2016年6月6日月曜日

【ボランティア募集中】 VPSとFX会社の距離測定について

FX会社とVPSの距離を測定し比較共有したいと思います。
これが解れば、どのFX会社を使うにはどのブローカーが最適か判断しやすくなります。

そこでVPSからFX会社までの距離を測定するEAを作成しました。


GetMicrosecondCount()でMT4起動からのマイクロ秒を取得します。
次に逆指値200、指値50でBUYエントリーをします。
FX会社から注文を拒否されます。
現在の価格107JPY/USDより逆指値200は高いからです。
同様に指値50現在の価格より低いのではじかれます。

注文不成立で戻り値-1を確認後もう一度起動からのマイクロ秒を取得
その差(かかった時間)がFX会社までの往復時間です。

10回の平均をとります。
チャート画面の左上に出ます

お名前.COM 日本サーバーからOANDAへは292,672マイクロ秒です。
0.292秒かかるという事ですね。

【ボランティア募集!】

ご使用のVPSとFX会社の距離を下記EAで測定し教えて下さい。

メール:bigtaca@gmail.com
もしくはコメント欄にご記入ください。

VPSの会社とプラン、FX会社の名前、かかった時間を教えて下さい。

使用方法
①下記EAをセットする。(自動売買を許可するに必ずチェックを入れて下さい)
②自動売買をオンにする。
③ VPS to ~がでたらその時間を記録してください。

※逆指値>指値の買い注文でエラーが出ます。約定はしませんが心配な方は残高0の口座で動かしてください。
何万回も発注エラーを繰り替えすとFX会社から指摘されるといううわさがあります(未確認)
念のため動かすのは最大5分程度にしてください。

自動売買のチェック、自動売買のONが抜けていると二、三桁の数字が出ます。
この場合FX会社までデーターが届いていないのでもう一度動かしてください。

集まったデーターはこのブログで公表します。
ご友人やご家族にもご協力いただけると助かります。

ご協力よろしくお願いします。
TACA

EA SpeedTest


#property copyright  "Copyright 2016/6/5,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#property version    "1.1"
input int MAGIC=1192;
double count;
int NowTime,AddTime[10];
void OnTick()
  {
  count++;
  for(int i=10;i>=0;i--){AddTime[i]=AddTime[i-1];}
    NowTime=GetMicrosecondCount();
    if(OrderSend(Symbol(),OP_BUY,0.01,Ask,5,200,50,"SpeedTest",MAGIC,0,clrNONE)==-1)
      {AddTime[0]=GetMicrosecondCount()-NowTime;}
  if(count<10)
    {
     Comment("We need more "+(10-count) + "Times. Please wait few minute.");
    }
  if(count>=10)
    {
    int All;
    for(i=10;i>=0;i--){All+=AddTime[i];}
    Comment ("VPS to "+AccountServer()+" "+(All/10)+" micro sec.");
    }
  }

追記

図1.

測定中に操作履歴にこのようなメッセージが出ていればちゃんと測定ができています。

FXDD社ではこのEAは使えないようです。
※想像ですが、MT4は一般的には直接FX会社のサーバーにつながるのですが、
FXDDはマルタ共和国のサーバーには直接つなげず、データセンターに一度繋いでいます。
接続アイコンが緑なのはデーターセンターにつながっているという事です。
サーバーにログインしますが、接続アイコンをクリックするとデータセンターが出てきますね。

SLやTPが適切かをサーバーでは判断していないようです。
図1のようなエラーも出ず。測定時間も極端に短く(三桁)になります。

そして海外ではサーバーに直接つなげるサービスもあるようですね^^σ


m**o**m様 から頂きましたAMAZONEC2 東京とAXIORY TY3の写真です。

AMAZONで同じ建屋はやはり速いですね!







2016年6月5日日曜日

メモリーとCPUプレゼント!! 無料です!

PCの引っ越しが大体終わりました。

メモリーとCPUが余りました 
なぜ?
必要な方は こちらに郵便番号、住所、名前、電話番号をメールをください。

CPU E6550 INTEL CORE2 DUO 2.33GHZ/4M/1333/06 L723A813 マレーシア
メモリー 512MB PC2 5300U CL5 2個 SAMSUMG 韓国
メモリー D2/677 2G 2個 BUFFALO 



動作確認   :   さっきまで動いていた
保証      :   まったく一切無し
表記      :   適当です間違っているかも・・・
梱包      :   透明ぷちぷちで適当
XP、SSD動かしていたのですが、i7 5550と比較するとバックテストは倍ぐらいの時間で終わります。
MT4はシングルタスクでしか動きません。
シングルの性能はその程度しか上がっていないということでしょうか
WIN10のアップデートで システムと圧縮メモリが動くようになりました。
細かい動きのEAはこちらのほうがはやいこともw

早い者勝ちですよー



2016年6月4日土曜日

【告知】FX-ON 記事三回目掲載!!

FX-ONに三回目の記事が掲載されました。
ブログは平気なのですが記事となると読み返すのが照れくさいですね。

少しプロフィットファクタ(PF)について書いてみました。

MT4を始めたころは人一倍PFの高いEAを追い求めていました。

しかし、PFの高すぎるEAはこつこつ稼いだものが一気に消える物が多いことに気付きました。
コツコツドガンです。

その辺の仕組みなど書いてみましたのでご一読ください!!

VPS失敗列伝! メンテナンス後の再起動編

明日は縣まつりです。縣まつりは深夜の奇祭と言われる祭りです。
見たことは無いのですが、朝2時、町中の全ての電気を消した真っ暗な中を生まれたままの姿で神輿を担いで回るそうです。
洛南で行われるため洛中の人には無名なのですが、夜店の数がものすごくなかなか楽しいお祭りです。

そしてその翌日は光回線メンテナンスの日
インターネットをYAHOOからYAHOOに切り替えるとiPhoneが1,500円/月、安くなるそうです。

通信業界は難解な仕組みのようです。
YAHOOからYAHOOに切り替えとは何の事でしょうか!
なぜYAHOOではなく、iPhoneの価格が割引になるのでしょうか!

とりあえず私がしなければならないのは月曜日の朝までにサーバーへMT4の引っ越しを終わらせなければなりません。

既述ですが、木曜日にOANDA用にBEEKSを申し込みました。一時間以内に開設できると書いていたのですが、音沙汰なし・・・

お名前.COMの アメリカサーバーはお試し期間終了

あるのは お名前.COMの日本サーバーです。(これもお試しあと一ヶ月)
取りあえずこちらに避難しようとVPSにコネクトしました。

あれれれれ?

WINDOWS2008がシャットダウンされています。
先週末にメンテナンスがあったようです。
メンテナンススケジュールを確認してませんでした。


そしていろいろと調べていると、めたぶろ先生のラボにたどり着きました。

設定をしないとメンテナンス後にVPSは自動ログインしてくれないようです!!!
幸いポジションを持っていなかったのですが複数のテストEAを一週間放置していたのは考えただけでも恐ろしいことです。

メンテナンススケジュールの確認と自動ログインの設定は必須です


億劫ですが、いまからお名前.COMへ引っ越しします。
スピード次第では、来週にBEEKSへ再び引っ越しです♪




2016年6月3日金曜日

EA X(仮称) 開発中! 名前募集中!

今月はAMSERが好調です。月利約40%を叩き出しました!!
30万円ほどEAに入れていましたのでムフフ♪

しかし、開発は続きます!!
そういえば、最近記事書いて、ブログ書いてメールしてあんまり開発してないなぁ~

そこで今週はガチです。開発です。
リアルとバックテストの違いはほとんど遅延によるずれです。
約定率をうたい文句のあのOANDAでさえ往復0.4Pips程度ずれます。

原則固定0.4Pipsは実は0.8Pips程度という事です。
ずれを減らすために24時間ほど前にBEEKSを申し込んだのですが一切音沙汰がありません。

話しがそれました・・・
開発中の一品を紹介します!
EAの名前はまだ決めていません EA X(仮称)です。
OANDAのEURUSDのスプレッドは0.5Pips


そこをなんと1.8Pipsでバックテストしました♪  
いつも大げさ、オーバーリアクションといわれます・・・
結果は年利95% よさげです。





つづいて9Pips 11にしようか悩んだのですがまぁ原則固定0.5+0.4で0.9です。

年利94%


あれ?下がった?


よくみると年利947%でしたw


すごいです!よくがんばりました!
このEA X(仮称)には様々なシステムが導入されています。
集大成です。





一般のEAと比較のためにスプレッド5も用意しました。

ご覧くださいEA X(仮称)の実力です!!






結果




年利1958%



いい数字です!1958年と言えば私の大好きな一万円札発行の年です!


EAの名前募集中です!!
コメント欄にかっこいいの意味深なものお書きください!!











【EAを作ろう】第十五回 ぽちぽち補助EAを作ります!

わたしもポチポチ病の重症患者です。
EAが稼いだ分をそっくりそのままポチポチで失います@@;

早くエントリーしたいと我慢できずにポチ!
含み損が多くなる前にポチ!
冷静に考えると待てないのです。

そこで!!いままでの関数で、ぽちぽち補助EAを作ります。
エントリー用にアラートシステム
クローズは自動的にシャンデリア・トレーリング

行動様式は画面に張り付いてチャートを注視する状態から、ポテチを食べながら、漫画を読みながら、アラートが鳴ったら画面確認と決定的な変革が起こります。太りそう・・・

ボリンジャ・バンドをこえたらアラート
MACDがクロスしたらアラート
RSIが70,30を超したらアラート

ポジションがあるときは自動的にシャンデリア・トレーリング
儲かった時にはマリオのコインをとるコイーン♪を鳴らしたいのですが音源がありません・・・

#property copyright "Copyright 2016/6/3,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
int d;double TSL,OTSL,SL;datetime TimeOld;
input int ChandelierTrailing=60;
input string RSI;
input int RSIPeriod    = 14;
input int RSIUpperLine = 70;
input int RSIBelowLine = 30;
input string MACD;
input int MACDFastPeriod=12;
input int MACDSlowPeriod=26;
input int MACDSignalPeriod=9;
input string BollingerBands;
input int BandsPeriod=20;
input double BandDevision=2.0;

void OnTick(){if(OrdersTotal()!=0){CS();}
if(Time[0]!=TimeOld){TimeOld=Time[0];
if (RSI(2) < RSIUpperLine && RSI(1) > RSIUpperLine){Alert("RSI above the " + RSIUpperLine);}
if (RSI(2) > RSIBelowLine && RSI(1) < RSIBelowLine){Alert("RSI below the " + RSIBelowLine);}
if (MACD(0,2)<MACD(1,2)&&MACD(0,1)>MACD(1,1)){Alert("MACD Golden Cross");}
if (MACD(0,2)>MACD(1,2)&&MACD(0,1)<MACD(1,1)){Alert("MACD Deadly Cross");}
if (Band(1)<Close[1]){Alert("Bollinger Bands above the " + BandDevision);}
if (Band(2)>Close[1]){Alert("Bollinger Bands below the " + -BandDevision);}
}}

double RSI(int Shift){return(iRSI("",0,RSIPeriod,0,Shift));}
double MACD(int mode,int shift){return( iMACD("",0,MACDFastPeriod,MACDSlowPeriod,MACDSignalPeriod,0,mode,shift) );}
double Band(int mode){return( iBands("",0,BandsPeriod,BandDevision,0,0,mode,1) );}

void CS(){
d=OrderSelect(0,SELECT_BY_POS);
if(OrderType()==0)
{if(TSL<Close[0]){TSL=Close[0];SL=TSL-ChandelierTrailing*Point;}}
else
{if(TSL>Close[0]){TSL=Close[0];SL=TSL+ChandelierTrailing*Point;}}
if(TSL!=OTSL){OTSL=TSL;d=OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0,clrNONE);
}}

意外と長くなってしまいました・・・
#propertyでコピーライトとブログのページを載せていますが、
ソースをコピーされた多くの人は書き換えるようです@@;

input~が続きます。各設定を好きなように変更してください!
定数の名前は短いのが好きなのですが、input やexternは変数名がそのまま表示されますので、
解りやすくしています。

input string~は設定画面で各項目の区切りがわかりやすいようにいれています。
RSI は定数、RSI() は関数です。別の物として扱われます。

void OnTick()でポジションを持っている時 OrdersTotal!=0 の時はCS()シャンデリアストップ関数へ飛ばしています。
その次の行ではTime[0](その足の始まった時間)を見ています。
Time[0]をTimeOldに格納してTime[0]とTimeOld(ひとつ前のTime[0])を比較しています。
足が変わるとTime[0]が変わります。
足が変わるたびにその下を動作させます。

アラートが鳴り続けてポテチタイムを阻害されるのを防ぐためです。

そしてその下は条件がそろえばアラートを鳴らします。
一番上はRSI(2)二本前のRSIが上の線より下でRSI(1)一本前のRSIが上の線より上になった時にアラートを鳴らします。一度上の線より下に来ないと再びアラートはならないようにしています。

Alertは( )の中に文字列を入れます。
線の位置は70以外にも設定できるようにしましたので + RSIUpperLineでいくつを超えたかわかるようにしました。 

あとは追っかけて読んでみてください。
ブログに乗せるには長めのソースコードになりましたが、していることはシンプルです!











2016年6月2日木曜日

【EAを作ろう】第十四回 関数を作ろう2 ボリンジャー MACD

関数は続いてボリンジャーバンドへ

iBands(通貨ペア , 時間軸 , 期間 , 偏差 , バンドシフト , 適応価格 , モード , シフト)

詳細は割愛w


iBandsでよく使う変更点はモードです。
モード:1上の線
モード:2下の線

double Band(int mode){return( iBands("",0,20,2,0,0,mode,1) );}

Band(1)は期間20 偏差2 の 上の線
Band(2)は期間20 偏差2 の 下の線

Bandsのsはよく忘れるので省きました。

さらにMACD

iMACD(通貨ペア , 時間軸 , 短期期間 , 長期期間 , シグナル期間 , 適応価格 , モード , シフト)

モードは0:MACD 1:SIGNAL です。
MACDの場合クロスを見ることが多いのでシフトも変更の必要があります。
ex.シフト2(2個前の足)は SIGNAL > MACD そして、 シフト1は SIGNAL < MACD となればゴールデンクロスです。

double MACD(int mode,int shift){return( iMACD("",0,12,26,9,0,mode,shift) );}

期間は短期12 長期26 シグナル9が一般的です。

12月26日は第九が演奏される日ですね。



OANDA BEEKS  VPSサーバーを借りよう!!

私はOANDA JAPANのBASICコースをメインで使っています。
理由はやはりサブ口座がたくさん持てること ストップレベル0 1,000通貨です。
欠点としては両建てができない セカンドスワップUSDJPY両方マイナススワップ
といったところでしょうか

OANDAのサーバーはニューヨークにあります。
因みに私の生まれたのもニューヨーク(らしい)です!記憶の範囲ではアメリカ大陸に入ったことはありませんw
そしてBEEKSの売りはなんといってもOANDAサーバーと同じ建物にサーバーがある事です。
最速1msだそうですwわたしのPC i7で関数を呼び出すのに数msかかるのに1msとは何という事でしょうw

しかしアメリカにあるため説明は入会申し込みの一部を除いてすべて英語です。
そしてなぜか支払いはブリティッシュポンド建てw

まあなんとかなるでしょうという事でやってみました。
「OANDA VPS」で検索してOANDAからBEEKSの入口までたどり着きましょう


最初の画面です。日の丸をクリックしましょう。日本語の画面としては最後の画面ですw
下に進みます。



適当に書いていってください。(適当と言っても嘘はダメですよ!)パッケージはブロンズ、OSは2008、Managed VPSサービスはいいえにしました。

最初の難関です。この先への進み方がわかりません。
がめんでアイコンが指に代わるクリッカブルポイントは VISAとPAYPALの上だけです。
VISAを押してみます
どの方法にしますか?左からVISA,VISAデビット、VISAElectron、VISApurchasing,Master,Master デビット う~ん よくわかりません。
取りあえず左から押してみます まずはVISA

そして必要事項を記入します。
さっきも書いた気が・・・
支払い終了のメッセージが届きました!!
完了です!!
メールにも支払い完了ときました!

意外と簡単です。あれ?お金は払ったけどこの先どうするのでしょう?
ログインの仕方などなど全く不明です。
BEEKSからはメールも来ません・・・・
一抹の不安が頭をよぎります










その後
いろいろ調べているとBEEKSのHPにこんな記述がありました。



ご利用までのステップ


数ステップで、VPSにお申し込みいただけます。パッケージを選択し、クレジットカード又はデビットカードを選び、paypalでお支払いいただけます。お支払いが完了いたしますと1時間以内(営業日の場合)にメールにより、ログイン情報をお送りいたします。

「一時間以内(営業日)にメール」???
さきほど支払い完了のメールが来ましたがそれでしょうか?
それとも一時間以内といってもあと30分でメールが来るのでしょうか?
いまニューヨークは午前4時 営業時間の9時か10時になったらメールが来るのでしょうか?

う~ん ふ・あ・ん です(><;)




【EAを作ろう】第十三回 関数を作ろう1 RSI

FX-ONの社長から手書きの手紙を頂戴いたしました。
うれしいものですね♪

関数を作ります。
MT4にはiRSIやiMA,iBands,iMACDなどなど本当に多くのインディケーターが用意されています。
とくにEMAの計算を作らなくていいことは非常に助かるのですが、設定項目の多さに戸惑うことがあります。
RSIはシンプルなオシレーターの中では精度が高いので気に入っています。
まずはこのRSI算出のiRSIを見ていきたいと思います。

iRSI(通貨ペア , 時間軸 , 期間 , 適応価格 , シフト)

通貨ペア
USDJPYやEURUSD等です。
チャートに合わせるときにはSymbol()を使うことになっていますが、
Symbol()を呼び出すのに数ミリ秒かかります。
非公式ですがNULLで代用できます。さらに""(ダブルコーテーション2個)でもOKです。
この非公式なやり方のほうが早くなります。
時間軸
チャートに合わせるときは PERIOD_CURRENT  もしくは0
一分足は              PERIOD_M1            もしくは1
日足は                PERIOD_D1             もしくは1440

設定項目に入れるときは extern ENUM_TIMEFRAMES 定数; 

期間
RSIの期間です。
14か20の使用頻度が多いと思いますが、時間軸によってまちまちです。

適応価格
終値を使うことが多いのですが、下は安値 上は高値などいろいろあるようです
終値      PRICE_CLOSE         もしくは 0
中央値  PRICE_MEDIAN もしくは 4

設定項目に入れるときはextern ENUM_APPLIED_PRICE 定数;

シフト
取得したいバーの位置
0は現在、1は一本前・・・

私の場合通貨ペア:""、時間軸:0、期間:14、適応価格:0、シフト:1がほとんどです。
毎回同じ項目を入れるのは面倒なので

double RSI(){return(iRSI("",0,14,0,1));}

このような関数を使うことが多くあります。
毎回打たなくてもRSI()で呼び出せるからです。
見にくいのでインデントを付けてみます。

double RSI()
  {
  return( iRSI("",0,14,0,1) );
  }

iRSIでもとめた値をreturnに入れて返すだけのシンプルな奴です。

RSI=iRSI("",0,14,0,1);

これじゃダメなのかと声が聞こえてきそうです。
単純にRSIが70を超えた処理、30を下回った処理を行う場合このほうが早いですね。

しかし関数の場合は応用がききます。
RSIの期間を14と20と両方確認したい場合


double RSI(int Period)
  {
  return( iRSI("",0,Period,0,1) );
  }

こうすることで

RSI(14)は期間14のRSIの値、RSI(20)は期間20のRSIの値になります。

さらに、時間軸も変更したいときには

double RSI(int TimeFrame,int Period)
  {
  return( iRSI("",TimeFrame,Period,0,1) );
  }

こうすることでRSI(1,20)は一分足の期間20のRSI
RSI(5,14)は五分足の期間14のRSIなどという使い方もできます。


伝統的な書き方はこちら
double Fast_RSI14 = iRSI(Symbol(),PERIOD_M1,14,PRICE_CLOSE,1);
double Fast_RSI20 = iRSI(Symbol(),PERIOD_M1,20,PRICE_CLOSE,1);
double Slow_RSI14 = iRSI(Symbol(),PERIOD_M5,14,PRICE_CLOSE,1);
double Slow_RSI20 = iRSI(Symbol(),PERIOD_M5,20,PRICE_CLOSE,1);


わたし的にはこうですね
double RSI(int TimeFrame,int Period){return(iRSI("",TimeFrame,Period,0,1));}















【EAを作ろう】第十二回 定数3

また定数に戻るのかというところですが、細かな整理とコピペ関数の作成です。

定数にはintやdoubleやboolなど様々なものがあります。
また設定したい項目はexternやinputを前に着けることでできます。

定数にはもう一つ区別があります。
グローバル定数とローカル定数です。
はじめに宣言する関数はグローバル定数といいEAのどこでも参照することができます。

ところが関数の{}内で宣言されたローカル定数は関数の中でしか参照できません。
関数を出ると消えてしまいます。
ではすべてグローバルで宣言すればいいという話ですが・・・


よく使う関数はファイルにしてあります。
コピペ用ですw


int d;int i;
void OnTick(){}
void Exit()
{ for (i=OrdersTotal()-1; i>=0; i--)
  { d=OrderSelect(i,SELECT_BY_POS);
    d=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,clrNONE);
  }
}

これは持っているポジションをすべてクローズする関数です。
保存する時についついコンパイルボタンを押してしまいます。
OnTick()がないと「動かす気有るの?」とエラーが出ます。
そこでダミー void OnTick(){} を入れています。

さて、コピペ用関数 Exit() ですが void Exit() 以下をコピペします。
しかし、定数 i , d の宣言が足りません。
コピー先の先頭にもどって宣言しているかどうかを確認して、
宣言されていない時は貼り付けるのですが面倒です。
そこで!!

void OnTick(){}
void Exit()
{ for (int i=OrdersTotal()-1; i>=0; i--)
  {int d=OrderSelect(i,SELECT_BY_POS);
    d=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,clrNONE);
  }
}

こうすれば解決です。今回のiやdの様に関数内でしか使わない時はローカル定数にするといいですね。

また関数内で宣言して値を保持したい時は
static int A=1;のような記述ができます。
使い道は・・・




2016年6月1日水曜日

【告知】FX-ON 記事二回目掲載!!

告知と書くとライブハウスか官報のイメージでしょうか

FX-ONに記事を書かせていただいております。
第二回目が掲載されました!

私の文才と知識でどこまで続くのかは
謎ですが精一杯書いていきたいところです。


記事の執筆といいましても、書きたいことを書いて担当さんに送ると
最適な掲載のタイミングで
デザインも考えて掲載していただけるすばらしいシステムです。

応援よろしくお願いします!!