2016年12月29日木曜日

海外ブローカーの終焉?英国スプレッド規制!!

日本ではご法度ですが、禁断の海外FXいろいろあります。

スイスショックのFXDDの決済後のレート変更は強烈でした。
会社を守るための苦渋の決断だったのでしょうがやられた方はたまったものではありません。
まぁ、FXDDのユーロはマルタ島の規制下にありますが日本でつかわれているFXDDはどこの国のFSPにも登録されていません。つぶれるよりも良かったのかもしれませんが・・・

XM 888も人気があると聞きますが、先日のアメリカ大統領選挙では突然レバレッジも変更 これも長期ポジションを持っていた人にとっては手痛い一撃になったようです。

そんな中来年の初旬から英国でレバレッジ規制が入るようです。
すべて25倍になるとの話 本当だと恐ろしいですね。

なぜかベリーズのAXIORY(本体は英国)やキプロス勢XM,FXPRO、ニュージーランドTITANあたりも影響を受けるとの噂も・・・・

しばらくはいつでも逃げれるように準備する必要がありそうです。

いや、もともと海外FXはご法度でした!!

2016年12月25日日曜日

OANDA社リアルタイムスプレッド変更!!


FX-ONに表示されているOANDA社のスプレッドが
原則固定プロコースから変動の東京サーバーに変わりました。

取引量が一番多いEURUSDの最大値のスクリーンショットです。



なかなかEA創作意欲の沸いてくる値ですね~♪







2016年12月18日日曜日

ふっかつの呪文!!MT4 TOKIO スタート!!



さて!!明日よりMT4東京都が始まります!!
しばらくは京都と東京を往復する生活になります。
京都を出ることを下京と言います。東京に行くことを上京と言います。
つまり京都から新幹線に乗って下京すると上京してしまい、東京から下京すると上京できる
もう何が何だかわかりませんねw

そんな中、MT4が新しくなりました。
ヴィルドゥ1031の登場です。
クラッシュ対策のバグフィックスとのことです。
また、密かにMT5に近づくのでしょうかw





「さいごのEA」非常に高い評価ありがとうございます!!
もうすぐDL終了します。

そしてたくさんの応援メッセージありがとうございました♪





2016年12月16日金曜日

さいごのEA




ということで一年のブランクを乗り越え社会復帰することになりました。
昨年の末頃よりブログをはじめ作ったEAはなんと総数1645個!
ブログで公開したもの、しなかったもの、
販売したもの、しなかったのも、
成績のよかったもの、だめだったもの
色々ありました。
そこで「さいごのEA」をつくりました。
すこしブログはおろそかになるかもしれません。
しかしドラクエでもさいごのかぎを見つけてからが本当の旅
これで終わりではありません!




さいごのEA


USDJPYのいまのトランプ相場を想像してください。
売り建てでマーチンゲール(倍がけ)をすると恐らく破たんするでしょう。
一方的なドル高だからです。
つまり相場の逆方向のマーチンゲールは大きなリスクがあるという事です。

ここで相場を考えずにマーチンゲールで勝つ方法を考えます。
買い建てマーチンゲール⇒ドル安相場で破たんリスク大
売り建てマーチンゲール⇒ドル高相場で破たんリスク大

一方向にエントリーするマーチンゲールはリスクがあるという事のようです。
それでは大きな足(月足、週足)などでトレンドを定めてマーチンをする場合はどうでしょうか
トレンドが逆転する時に大きな足は反応が遅く破たん方向に進むリスクがあります。

そこで考えたのが交互にエントリーするマーチンゲール
ロットは1,2,4,8,16,32,64と増やしていきます。
初めは買い建て、次は売り建てその次は買い建て・・・と繰り返します。


赤字①でロングエントリー 勝てば修了負ければ -1
負けた時には赤字②でショートエントリーポジションは2倍
逆方向にマーチンゲールをした場合101円もしくは98円に到達した時に必ずプラスになり終了になります。

相場はかならず動きます!そこを利用したのがこの「さいごのEA」です。

この「さいごのEA」では6連続64倍までエントリーします。



今回は英国のA社NコースのMT4で開発試験をしています。

ロト(Lots)・・・・別名ゴールド 一回のエントリー金額
呪文・・・・・・・下界ではコメントと呼ばれるようです。
まほう・・・・魔法数字(MAGIC NUMBER)
HP・・・・・利益確定&損益確定額(単位は円)
MP・・・・・ボラティリティー
※ボラティリティは狭義では偏差(ボリンジャーバンド)を示すようですが、広義では市場活性を示す全ての指標を指します。MT4デフォルトでも様々なボラティリティ指標がありますが、
ここではTACA Volaを使用しています。期間の長いボラティリティ指標は過去と直近の影響力の差を適時調整する必要がありますが、直近もしくは現在の最高値、最低値の差は最新の数字だけを指標にします。レンジ相場の回避目的のボラはこのTACA Volaが最適と考えています。





「さいごのEA」は私を応援してくれるすべての人がダウンロードすることができます!










2016年11月28日月曜日

BEEKS 負荷試験 これはなかなかすごい!!

お借りしているBEEKSのVPSの期限がそろそろ迫ってきました。
以前つくったSSCHECKERというEA?があります。
メジャー通貨のSWAPとSPREADを一画面に表示するものなのですが、
これがなかなか重いのです。
表示しながらバックテストをすると全く動かなくなる一品です。

逆に考えるとVPSの負荷試験として使えるのではないでしょうか!
このSSCHECKERをVPSで何個動かせるかやってみました。
試験をしたのはBEEKSのブロンズです。
MT4一個に6x6で36個同時に動かしましたが全く変化ありません。

タスクマネージャーをみるとCPU使用率はMT4が20%、その他13%
100個くらいはいけそうですね。
恐るべしBEEKS!!

※一つのMT4で複数のEAを走らせると同時に発注が出た場合、発注が正しく出ない可能性がありますので注意して下さい。

BEEKSのTY3をお借りしてのんびりEAを大量に走らせるのはありですね!!




2016年11月26日土曜日

EA Swapper Joe Limited

昨夜からIphoneのGMAILアプリがうまく動きません。
なんかGMAILアプリがアップデートして微妙になってしまいました。
片手で使いにくい・・・

それと同時にBloggerもイメチェン!!
こちらは最高の出来です^^ GOOGLE様ありがとう♪

さて以前SwapperJoeというEAを作成しました。
そこにありがたいコメントを頂きました^^

そこでわたしもアップデートしてみます


設定を日本語にしました(蛇足?こうゆう変更がわからなくなることが多いのですが・・・)

追加したのは
エントリー時間(月-木)は月曜から木曜の23時のエントリー分です。初期55分(23:55GMT+3)
エントリ時間(金)は金曜日の23時のエントリー分初期50分(23:50GMT+3)
最大ポジション数 初期100本
ポジション間隔 最低ポジションより価格が下回る時のみエントリーします。

ん?感覚?・・・・


//+------------------------------------------------------------------+
//|                                                SwapperJoeLimited |
//|                                      Copyright 2016, Taca        |
//|                                       http://taca.asia           |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016/11/26,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#property strict
sinput int MAGIC=2355;//MAGIC ナンバー
extern int Profit=60;//利益確定額  
extern double Lots=0.01;//ロット
extern int Spread=14;//スプレッド
extern int EntryMin=55;//エントリー時間(月-木)23:xx
extern int EntryMinFri=50;//エントリ時間(金)23:xx
extern int MaxPosition=100;//最大ポジション数
extern double MinPosition=0.01;//ポジション感覚
double PosAve,MinPos=Close[0]+2;
datetime TimeOld;
int d,i;
//+------------------------------------------------------------------+
//|Main Routine                                                      |
//+------------------------------------------------------------------+
void OnTick()
  {
     {
      if(Time[0] != TimeOld)
        {
         TimeOld=Time[0];
         if(OrdersTotal()==0){MinPos=Close[0]+2;}
         if(DayOfWeek()!=5&&Hour()==23&&Minute()==EntryMin   ){Entry();}
         if(DayOfWeek()==5&&Hour()==23&&Minute()==EntryMinFri){Entry();}
        }
     }
  }
//+------------------------------------------------------------------+
//|Entry                                                             |
//+------------------------------------------------------------------+
void Entry()
  {
   if(OrdersTotal()<MaxPosition && MinPos-MinPosition>Close[0])
     {
      d=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,0,0,"Swapper Joe!!",MAGIC,0,Red);
      Averaging();
     }
  }
//+------------------------------------------------------------------+
//|Average Sys                                                       |
//+------------------------------------------------------------------+
void Averaging()
  {
   PosAve=0;double PosAll=0,PosNum=0;
   for(i=0;i<OrdersTotal();i++)
     {
      d=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      PosAll+=OrderOpenPrice()*OrderLots();
      PosNum+=OrderLots();
      if(MinPos>Close[0]){MinPos=Close[0];}
     }
   if(PosNum==0){PosAve=0;}
   else{ PosAve=PosAll/PosNum;}
   for(i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==True)
        { d=OrderModify(OrderTicket(),OrderOpenPrice(),0,PosAve+Profit*Point,0,CLR_NONE);}
     }
  }
//+------------------------------------------------------------------+

2016年11月24日木曜日

きたぁぁービットコインのMT4!!!!BITPoint と USDJPYの相関性

BITPOINTのMT4をインストールしました!

仮想通貨がMT4で使えるというのは面白そうです。
まず、過去データーをエクスポート!
BITJPY おおw カッコイイ!2016/7途中からのデーターです。

同じ日にちのUSDJPYをEXCELで横に並べました。
両方1時間足です。

そして①終値-始値②最高値-始値③始値-最低値
この三つの相関性を見ることにしました。

相関性を調べる関数はCORREL(A群、B群)です。
相関性が近い時には1に逆相関の時は-1に近づきます。
0近辺は相関性がないということです。

さて結果です

①終値-始値    0.02
②最高値-始値  0.09
③始値-最低値  0.04

全く相関性はありません・・・
逆相関もないという事はまったくUSDと関係なく動いているようです。

また、チャートを見ると祝日の動きに似たような感じがします(感覚・エビデンスなし)

もしそうだとすると、期間の短いRSIや平均乖離など面白そうですね!!










2016年11月22日火曜日

Bars 1000本の壁

前日の同じ時間の傾向をみてエントリーするEAを作ろうと思いました。

今の時間は11:02です。昨日と一昨日と・・・・過去46日の11:02が上がっているのか下がっているのかの傾向をみてエントリーします。
一ヶ月の平日は約23日として二ヶ月分を見ようといった考えです。

条件は二つ
買い建てで一つは46日間でOPENとHIGHの差が0.01以上あれば+1なければ-1
その合計が一定以上になっている事。

OPENとCLOSEの差の平均が一定以上になっている事

この二点でLONGエントリーです。

さてさらさらっとソースを書いてみました。
バックテストと一定以上の最適化をします・・・・・

うまく動作しません。


原因を探るとCLOSE[1439]が0と表示されます。
いろいろ探ってみるとたどり着いたのが Bars 何本の足を格納しているかを表示する定数です。

バックテストの初めの段階でBarsは1000本そこから一本ずつ増えていくようです。
つまり1439本前は開始から439分後からしか表示されないようです。その46日間のデーターは46日経ってからという事のようです・・・・・

1000本というと
1時間足で41日
15分足で10日
5分足では3日の数字しか取れません
う~ん 没かな 
面白そうなアイデアとおもったのですが・・・



2016年11月18日金曜日

BEEKS社 本テスト結果


予備テストでは
FOREX社が337676micsec
外為社が256596micsec
という結果が出ました。
数字の出なかった三社に実発注で測定してみたいと思います。
10連続発注をします。ブローカーさんごめんなさい

今回の画像は上からBEEKS社のプラチナ、ゴールド、シルバーの順です。

まずはFXTF全体の中で一番遅い結果が出ました。
MT4サーバーの場所の問題かと思います。
しかし、10連続発注すべてきれいに受けてくれました。






次はAVA社まずまずの結果です。


←大量発注の痕跡が残ってしまいました・・・


そしてOANDA JAPANPRO 5kです。
ここはBEEKSと同じTY3にサーバーを置いています。
距離が近いからでしょうか
理想通りのプラチナ>ゴールド>ブロンドの速さになっています。





結論

比較ではありませんのでここからは主観が入ります。
BEEKS社のVPSは

OANDA JAPANPRO 超高速EA 超推奨特にプラチナコース!!

AVA社、FOREX社、外為ファイネスト社 推奨 一般的なEAでは問題なく動作すると予想

FTXF社 使用可 スピード的には一番遅い結果でしたが、全発注を受けたMT4サーバーの実力は素晴らしいですね。

といったところでしょうか

やはりTY3同士の相性は抜群ですね!
OANDA社は5kと1mで別々の価格が表示されます。
この差がスプレッドを超えた時に発注するEAを考えているのですが、
それ向けにBEEKS社プラチナを借りようか悩んできました。


ソースコード
※実発注します
TPSLはストップレベル、lotはロットです。
ブローカーコースに合わせて調整してください。
直ぐに動作しますのっで0secになった時は再インストールしてください。


int i,d,c;bool f;datetime NowTime,AllTime;
input double TPSL=0.02;
input double lot=0.01;
void OnTick(){if(!f){f++;for(i=0;i<10;i++)
{NowTime=GetMicrosecondCount();
if(OrderSend(Symbol(),OP_BUY,lot,Ask,5,Ask-TPSL,Ask+TPSL,"SpeedTest",356)>0)
{AllTime+=GetMicrosecondCount()-NowTime;c++;}
}if(!c){c++;}Comment("VPS to "+AccountCompany()+" "+AllTime/c+" micro sec.");}}



VPSをお貸しくださったBEEKS社の皆さま、そしてBEEKS社を紹介して下さったごごじゃんの担当様本当にありがとうございました!!

2016年11月16日水曜日

ソースコードの改行はex4ファイルに影響があるのか!

今日はMT4 TOKYOです!
大切な用事で東京にきています。

さて、ソースコードの改行について以前検証しましたが、
改行を入れるとEAの動作速度が遅くなるという結果が出ました。

でも本当でしょうか?確率的には間違いありませんでしたがプログラムは違うのでしょうか?
もし改行をすることでEX4ファイルに影響が出るなら、
EX4ファイルのバイト数に変化があるかもしれません

そこでEAをふたつw


a.mq4は一行
b.mq4は5行改行を入れました。



改行を5行いれると352バイト増えています!!!!
改行は0x0A 1バイトx5で 5バイト程度の増加と思っていましたが、
こんなに増えるものなのですね!!!

EAを作っていると、空白の1行を入れてしまいますが、
気を付けねばなりませんね

 

2016年11月11日金曜日

BEEKS 予備テスト第二弾!!

大統領選挙はいかがでしたでしょうか!
私は、上へ下への往復ビンタを頂戴いたしました。

反省点はスプレッドの管理不足とEAのスピード不足です。
大統領選挙のような時にはスプレッド上限は固定でなく、過去10分の平均+アルファといったような手法を取らないといけませんね。固定の為多くの勝つはずだった注文が出せませんでした。

そして、急変時に追いつくスピードが大切です。
そのためにはブローカーに最適なVPSを探すことが必須です。

BEEKS社からVPSをお借りしたのですが、大統領選の対策でテストが開始できていません。

いつものSPEEEDTESTの改良版SpeedTest B を作成しました。

#property copyright  "Copyright 2016/11/11,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#property version    "11.11"
input int MAGIC=1111;
int NowTime,AddTime[10],count,All,i;
void OnTick()
  {
  count++;
  for(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)==-1)
      {AddTime[0]=GetMicrosecondCount()-NowTime;}
  if(count<10)
    {
     Comment("We need more "+(10-count) + "Times. Please wait few minute.");
    }
  if(count>=10)
    {
    All=0;
    for(i=10;i>=0;i--){All+=AddTime[i];}
    Comment ("VPS to "+AccountCompany()+" "+(All/10)+" micro sec.");
    }
  }

あれやこれやと改良した後にやっぱりオリジナルが良かったと戻ってきた感じです。
不正なSLやTPでの発注をしてその時間を取得しています。
※一部は口座作成が間に合わず、デモ口座です。

BEEKS社の東京サーバーはエクイニクス社TY3にあります。
相性のいいのはどこのブローカーでしょうか?!
結果が2~4桁の場合はサーバーにMT4内で処理や中継点で処理されていてMT4サーバーに到達していない可能性が濃厚です。この場合は実発注で測るしかありません。


AVA社 16micro秒







FXTF ここも15micro秒 速すぎます。
実発注で試さねばなりません・・・





FOREX(Gain Capital)社







外為ファイネスト社






OANDA JAPAN PRO
ここはTY3にサーバーがあります。
5kと1mがありますが、5kで見ています。
BEEKSと同じTY3の中だとこういったことがあるのでしょうか



OANDA JAPANFX、FXTF、AVA社は実発注で測定してみます!
この三社は本当にこの速さが出れば、恐ろしいEAが開発できそうです。
あんまりスピードを追求しすぎるとよろしくないかもしれませんが・・・w


2016年11月7日月曜日

EA えれべーたーがーる♪

先日は短時間で作った雇用統計プログラム惨敗でした(;・∀・)
テストで動かすつもりだったのですがロットをなぜか1.0にしていたため、あぶら汗がたっぷり出ました。

そして、その反省を踏まえてアメリカ大統領選挙対策EAを開発しています。
また、BEEKS社から借りたVPS試験用のEAも開発中です。

そんな中、試行錯誤しているうちになぜかベッティングレートの探求をしてしまい
数時間たっぷりEXCELにハマってしまいました。
迷走しています。

両建てマーチンゲールから始まり両建てモンテカルロ、そして両建てイースト―コーストプログレと進み、両建てECBの改良で精根尽きました。

この時点でアメリカ大統領選挙のことは完全に忘れて、別のEAを作り始めていました。
以前エスカレーターボーイを作りながら思いついたシステムです。

なずけて「EA えれべーたーがーる♪」
この単語カタカナ表記は放送禁止用語だそうです><;


ボラティリティが0.01以上
でポジションが無ければ両建てエントリー
両建てとも幅0.3のシャンデリア・ストップで追っかけます。

トレーリングはボラティリティーが高い時に効果を発揮しやすいので、
0.01以上に限定しています。発注のタイミングは一切考えていません。




#property copyright"TACA 2016/11/7"
datetime t;int d,i;extern double LOTS=0.01,SL=0.3,Bnd=0.01;
void OnTick(){if(Time[0]!=t){t=Time[0];
if(iBands(Symbol(),PERIOD_CURRENT,14,1,0,PRICE_CLOSE,1,0)-iBands(Symbol(),PERIOD_CURRENT,14,1,0,PRICE_CLOSE,0,0)<Bnd)
{if(MarketInfo(Symbol(),13)<10 && OrdersTotal()==0){ORDSND();}if(OrdersTotal()!=0){ORDMDF();}}}}
void ORDSND(){d=OrderSend(Symbol(),OP_BUY, LOTS,Ask,1,Ask-1,0,"",11);d=OrderSend(Symbol(),OP_SELL,LOTS,Bid,1,Bid+1,0,"",11);}
void ORDMDF(){for(i=OrdersTotal()-1;i>=0;i--){d=OrderSelect(i,0);
if(OrderType()){if(OrderStopLoss()>Bid+SL){d=OrderModify(OrderTicket(),OrderOpenPrice(),Bid+SL,0,0);}}
else{if(OrderStopLoss()<Ask-SL){d=OrderModify(OrderTicket(),OrderOpenPrice(),Ask-SL,0,0);}}}}

月別で見ると試験の25ヵ月中15ヵ月がプラスです。
英国のA社のMT4で試験をしています。

大統領選挙は活性が高いので面白いかもしれませんね。



BEEKS セッティング方法!

BEEKS社のVPS設定方法です!
BEEKS社はMT4等自動売買の事を考えエクイニクス社にさーばーを置くすばらしいコンセプトの会社です。

しかし、一つ大きな壁が・・・サポートが英語のみです。
と、思っていたのですがなんとBEEKS社は日本語サポートもはじめたようです!!



VPSを申し込むとメールが来ます。

赤文字で日本語を書いてみました。だいぶ意訳です

RDPファイルを落としてWクリックすればVPSに入るためのID,PassWord入力の画面になります。
そこにこのメールのUsernnameとInnitial Passwordを入力いたします。

パスワードをコピペするとうまく進みません。手入力しましょう。

次にInnitial Password(初期パスワード)の変更を求められます。
①条件は10文字以上
②大文字、小文字、数字をすべて使用する事
お恥ずかしい話なのですが、ここを適当に読んでいたので、パスワード更新が出来ず悩みました。

ログインするとさすが東京BEEKS!体感は恐ろしく速いです。

実テストは大統領選挙後にw









2016年11月4日金曜日

BEEKS TY3 予備テスト 雇用統計用EA(高負荷)

先日、またわがままをゴゴジャンのご担当様に言ってしまったところ
駆けつけて下さり、問題解決をしてくださいました。
ほんとにいつもごめんなさい。

そのミーティングの最中にBEEKS社の話題が出ました。

東京エクイニクスにあるBEEKSのVPSサーバーの速さを体感してみたいと話したところ、
なんとBEEKSの担当者に連絡をと取ってくださいました!!
ゴゴジャンN氏の人脈の広さに驚きです。

そしてあれよあれよでBEEKS社のVPS ブロンズ、シルバー、ゴールドサーバーを一ヶ月お借りできることとなりました。
ゴゴジャンN氏もBEEKS社様も恐るべき仕事の速さです。

さて、いままでは不適切なSL/TPのオーダーを送信して返信のスピードを測定していました。
問題としては、中継サーバーではじかれてしまいMT4サーバーにたどり着けない会社がいくつかありました。
極端に乖離した予約注文を発注し時間を測る手もあるのですが、やはり知りたいのは実発注の時間です。

そして今夜は雇用統計
とっさに作ったのが雇用統計用EAです。
15:28に両建てをします。
シャンデリア・トレーディングで両方を追っかけ利益を出します。
両方の発注が無くなったらまた両建て発注をします。
ひたすら高速回線と処理速度を必要とするEAで予備テストです。

バックテストではいい結果が出るのですが、BEEKS社VPS vs 英国A社はいかに!!



※BEEKS社はエクイニクス社の東京TY3にVPSを立てています。
A社もTY3に中継点を置いていることからA社にしました。
(中継点からNY4までは高速回線でつないでいるようです。)

TY3はOANDA JAPANProコースが最近サーバーを立て話題になったところです。





int d,OTL,OTS;double C;
void OnTick(){{if(OrdersTotal()!=0){C=Close[0];
d=OrderSelect(OTL,1);if(OrderStopLoss()<C-0.02){d=OrderModify(OTL,OrderOpenPrice(),C-0.02,0,0);}
d=OrderSelect(OTS,1);if(OrderStopLoss()>C+0.02){d=OrderModify(OTS,OrderOpenPrice(),C+0.02,0,0);}}
else{if(Hour()==15&&Minute()>=31&&Minute()<=35&&MarketInfo("",13)<16)
{OTL=OrderSend("",0,1,Ask,2,Ask-0.02,0,"",1);OTS=OrderSend("",1,1,Bid,2,Bid+0.02,0,"",1);}}}}



2016年10月31日月曜日

SIGMA4 REMAKE

今朝、SIGMA4の定期テストをしました。

フォワードテストはボロ負けです。
リアルでは勝っている、負けていると様々なお話を頂戴いたしております。
同じEA、設定無しでこの違い原因がわからず困惑していました。

あと三時間で自動売買終了のO社のベーシック向けの開発でしたが、ブローカの負荷を考え様々な仕組みを入れています。その仕組みの影響にしても大きすぎます。

そんな中、FX-ON社にお願いしているフォワードテストを解析してみて、ふと気が付きました。
取引回数が少ない!

自宅フォワードの半分以下です。
可能性としてはフォワードに比べデモ口座はスプレッド変動が多く、スプレッドの上限を超える為発注できない。

もう一つは、スリッページを0にしています。
スリッページとは滑りの許容範囲ですが1にすると95%以上1損する側にずれます。
3でも90%以上損する側に3ずれるので0にしてあるのですが、ここが原因で発注の差が出ているのかもしれません。


右はFX-ONフォワードテストの取引パターン1-59と各取引回数
ほぼすべて70になるはずなのですが・・・

そこで、少し改良をしました。
まず発注時間の精度を上げました。

続いて一部ロジックの変更のNEWモードを追加しました。
もちろん今まで通りのオリジナルモードも使えます。

あまり好きな手法ではないのですが、未発注時の再エントリー機能を付けました。スリッページ等で発注できなかった時は何回かチャレンジします。

また、速度の障害になるいくつかの点を高速化重視で設定しました。

さて、試験開始です!
いい結果+今実施している試験の結果が出れば即アップします!










※FX-ON社コメントに先日調子が良くなってきたとコメントありがとうございました。
技術的な問題や設定等に関してはお答えさせていただいておりますが、利益が出た。損失が出た。その原因や対策についてのコメントには回答を控えさせていただいております。
折角のコメント返信なしでごめんなさい。
お気持ちはありがたく頂戴しております!!







11/2 18:00途中経過!


2016年10月27日木曜日

EA ESCALATOR BOY ソースあり

エスカレーターのマナーが変わってきています。
大阪では右側に立って左側を急ぐ人の為に開けます。
NY、ロンドン、パリ、香港など私の知っている大都市は右に立ちます。
しかし東京は左に立つようです。
京都は・・・前の人が立っている方向に並びます。
同じエスカレーターでも雰囲気で毎日変わります・・・

しかし、そごう横浜では二列に並んでくださいと係員がやっていました。
エレベーター前の混雑の原因は一列に立つことのようです。
そして、江の島以外のエスカレーターはほぼ無料です。
その無料のエスカレーターのメンテしてくださっている人の意見はなんと
「エスカレーターは歩かないでください!」でした。
危険という事と片方に並ぶと消耗品の片べりを起こすようです。

あなたはどちらでしょうか?
わたしは、二列派です!が、雰囲気によって片側によってしまいます。自分が無いですね

さて、スワップで利益を得たいとは、だれでも考えたことがあるのではないでしょうか。
AUDJPYを60円くらいで買っておけばよかったなと私もよく考えます。
※さてで始まる時は機嫌がいい時のようです。

三条京阪ブックオフ前のエスカレーターを見ていた時に思いついたのがこのEAです。
例えばAUDJPY、スワップはロングにつきます。

まず1本エントリーします。この時にはSL/TPは設定しません。
さらに0.1円下がったらもう一本発注します。この発注にもSL/TPは設定なしですが、この前の注文には発注価格+アルファでTPを付けます。

ポジションの運命は
①発注して決済されたもの⇒少し利益
②発注して未決済の物⇒スワップ獲得と損失
③一番最安値のポジション⇒スワップ獲得

バックテストではスワップは計算されませんが価格にある程度の幅がありますので長期ほったらかしには使えそうです。


 設定はこんな感じです。
MAGIC 1900 マジックナンバーです。世界最初のエレベーターは1900年にできたそうですので1900です。

SpreadLimit スプレッドの上限です13の場合1.3Pipsです。

Type Swapの方向です。AUDJPYのようにチャートが上昇してSWAPがもらえる時はSWAPUP、逆はSWAPDOWNにしてください。

LOTS ロットです。

TakeProfit 最初にエントリーしたTP/SLなしのポジションの利益確定です。
0の場合はTakeProfitはありません。例えば1円上がったらスワップより利益を取りたいという時には1000と入れて下さい。Point単位です。

Step こちらもPOINT単位です。100の場合初めに110円でエントリーした場合109.9円で追加オーダーと以前のロットのTP/SLをセットします。

そしてネーミングのエスカレーターボーイはエスカレーターが下がるようにポジションのオーダー価格が下がるというネーミングです。

使用できる金額と、耐えられる含み損を考えて設定をしてください。

バックテストはビジュアルモードがおすすめです。
月平均が上昇している時が最適です。



//+------------------------------------------------------------------+
//|                                                    ESCALATOR BOY |
//|                                      Copyright 2016, TACA        |
//|                                       http://taca.asia/          |
//+------------------------------------------------------------------+
enum LoS{SwapUp,SwapDown};
input int MAGIC=1900;
input int SpreadLimit=13;
input LoS Type=1;
input double Lots=0.01;
input int TakeProfit=0;
input int Step=100;
int d,i,Cnt;
double TP,Stp,PoO,OOP;
//Cnt:Count TP:TakeProfit Stp:Step PoO:Price on Order OOP:Order Open Price
int OnInit()
  {
   TP=TakeProfit*Point;
   Stp=Step*Point;
   return(0);
  }
//+------------------------------------------------------------------+
//|Ticker Boy                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

   if(SprChk() && OrdTtl()==0){Entry();}
   if(Type && PoO+Stp<Close[0] && OrdTtl()!=0){Modify();Entry();}
   if(!Type && PoO-Stp>Close[0] && OrdTtl()!=0){Modify();Entry();}
  }
int SprChk(){return(MarketInfo(Symbol(),MODE_SPREAD)<=SpreadLimit);}
int OrdTtl(){Cnt=0;for(i=OrdersTotal()-1;i>=0;i--){d=OrderSelect(i,0);if(OrderMagicNumber()==MAGIC){Cnt++;}}return(Cnt);}
//+------------------------------------------------------------------+
//|Entry Boy                                                                  |
//+------------------------------------------------------------------+
void Entry()
  {
   if(TP==0)
     {
      if(Type)
        {PoO=Bid;d=OrderSend(Symbol(),OP_SELL,Lots,PoO,0,0,0,NULL,MAGIC);}
      else
        {PoO=Ask;d=OrderSend(Symbol(),OP_BUY,Lots,PoO,0,0,0,NULL,MAGIC);}
     }
   else
     {
      if(Type)
        {PoO=Bid;d=OrderSend(Symbol(),OP_SELL,Lots,PoO,0,0,PoO-TP,NULL,MAGIC);}
      else
        {PoO=Ask;d=OrderSend(Symbol(),OP_BUY,Lots,PoO,0,0,PoO+TP,NULL,MAGIC);}
     }
  }
//+------------------------------------------------------------------+
//|Modify Boy                                                                  |
//+------------------------------------------------------------------+
void Modify()
  {
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      d=OrderSelect(i,0);
      if(OrderMagicNumber()==MAGIC)
        {
         OOP=OrderOpenPrice();
         if(Type)
         {d=OrderModify(OrderTicket(),OOP,0,OOP-Stp,0);}
         else
         {d=OrderModify(OrderTicket(),OOP,0,OOP+Stp,0);}
        }
     }
  }
//+------------------------------------------------------------------+

2016年10月25日火曜日

SWAP SPREAD CHECKER 主要通貨一括表示!無料ソースあり!

天皇陛下が京都へお戻りです。
お戻りと書くとまた京都の人は訳の分からんことをと思われる方が多いのですが・・・

日本の首都WIKI WIKIを根拠に出すのもなんですが、なかなかまとまっています。

さて、話がだいぶそれました。
最近ブローカーを探求しています。
この人はまた特定ブローカー専用EAを開発しようとしているのかとの声が聞こえてきそうですが、
その通りです!!

日本のブローカーがすこしづつなくなっていく中、期待したR社は突然のスプレッド沸騰が頻発し、O社のBコースは自動売買ができなくなります。
低スプレッドという国内ブローカーの魅力が薄れてきています。
同じ通貨量を購入する場合、はレバレッジが高いほうが有利です。

と、当たり前の話なのですがスプレッドやスワップを見て行くのは大変労力がいります。
一通貨ペアずつ紙に書いて平均を測って・・・

そこで!!主要通貨のでスプレッド、スワップをまとめてみるEAを作りました。
またしてもインディケーターではありませんw

主要通貨ペアは私の独断と偏見で決めましたw
通貨ペアの末尾の-a01などは自動判別です。内部でコッソリ処理しています。
OANDA JAPAN PROはoj1mチャートとoj5kチャートで別々に実施してください。



まずは女王陛下をこよなく愛する国のA社 サーバーはいまTY3かな
左端に通貨ペアが並んでいます。 その右はLONGとSHORTのSWAP
そしてその右が現在のスプレッド 起動してからの最大スプレッド、最小スプレッド、平均スプレッドです。ティック動作は複数通貨ペアでは出来ませんので、1/10秒が1単位となっています。

EURUSDのMIN 0がすばらしいですね。
スプレッドはオセアニアですがよさげです。

ここは手数料が別途必要ですがなかなか素敵です。




続いて女王陛下を愛する北アメリカの国OANDA社JAPAN FX 1Mと5K比較です。
片方しか出ていない人は気配値表示を右クリック⇒「通貨ペア」で設定してください。
各通貨ペアが二個づつ出てきます。レートは別々です。

USDJPYは0.6円、EURJPYは0.8円、その他ほとんどの平均スプレッドは5kが安くなっています。しかし高スワップのTRYJPY、ZARJPYは1mが安くなっていますね。
スワップは同条件のようです。
通貨ペアごとに選択する必要があります。



次はマルタ騎士団で有名なあの国のブローカーです。
べらぼうなスプレッドですが、世界的にはこれが標準なのでしょう。
USDJPYが+スワップ0.959は感動的です。



ストップレベル50のFXTFです。
短期取引には全く向かない会社ですが、
スワップの差がほとんどありません。
いままで気が付いていませんでしたが、これは良心的な会社ですね!!
また、スプレッドも全くぶれません。

OANDA社のNZDJPYのLONGスワップは3.4 FXTF社のSHORTスワップは-0.66
これを両建てすればw 




そして楽天-CM
ぐは!!スワップが見れない・・・
USDJPY,AUDJPYで0が出たのは素晴らしいですね。
平時のこれをみると大変素晴らしいブローカーです!




最後に888倍のあの会社です。
スワップは残念ですが、海外にしてはスプレッドは控えめですね。










//+------------------------------------------------------------------+
//|                                                Spread Swap Check |
//|                                      Copyright 2016, TACA        |
//|                                                        taca.asia |
//+------------------------------------------------------------------+
#property copyright"Copyright 2016/10/25,TACA"
#property strict
string Pair[13]={"USDJPY","EURUSD","GBPUSD","EURJPY","EURCHF","GBPJPY","EURGBP","AUDUSD","AUDJPY","NZDUSD","NZDJPY","TRYJPY","ZARJPY"};
string PairTail,txt,Sym;
double MaxSpr[13],MinSpr[13],AveSpr[13],CouSpr,NowSpr;
int x[7]={0,70,110,210,240,270,300};
int y[13]={40,60,80,100,120,140,160,180,200,220,240,260,280};
int d,i,j;
//+------------------------------------------------------------------+
//|Initialize                                                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(100);
   PairTail=StringSubstr(Symbol(),6,StringLen(Symbol())-6);
   for(i=0;i<13;i++)
     {
      Sym=Pair[i]+PairTail;
      NowSpr=MarketInfo(Sym,MODE_SPREAD);
      MaxSpr[i]=NowSpr;
      MinSpr[i]=NowSpr;
     }
     ObjectCreate(0,"objT",OBJ_LABEL,0,0,0);
         ObjectSetInteger(0,"objT",OBJPROP_XDISTANCE,0);
         ObjectSetInteger(0,"objT",OBJPROP_YDISTANCE,20);
         ObjectSetInteger(0,"objT",OBJPROP_BACK,False);
      ObjectSetText("objT","PAIR SWAP LONG SHORT  SPREAD NOW MAX MIN AVE",8,"Verdana",Yellow);
     
     
     
   for(i=0;i<7;i++)
     {
      for(j=0;j<13;j++)
        {
         ObjectCreate(0,"obj"+(string)i+(string)j,OBJ_LABEL,0,0,0);
         ObjectSetInteger(0,"obj"+(string)i+(string)j,OBJPROP_XDISTANCE,x[i]);
         ObjectSetInteger(0,"obj"+(string)i+(string)j,OBJPROP_YDISTANCE,y[j]);
         ObjectSetInteger(0,"obj"+(string)i+(string)j,OBJPROP_BACK,False);
        }
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|Good Bye Baby^^/                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,OBJ_LABEL);
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//|Check Spread Swap                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   CouSpr++;
   txt="Pair     SWAP Long Short  Spread Now Max Min Ave\n";
   for(j=0;j<13;j++)
     {
      Sym=Pair[j]+PairTail;
      ObjectSetText("obj0"+(string)j,Pair[j],8,"Verdana",Yellow);
      ObjectSetText("obj1"+(string)j,StringSubstr((string)MarketInfo(Sym,MODE_SWAPLONG),0,5),8,"Verdana",Yellow);
      ObjectSetText("obj2"+(string)j,StringSubstr((string)MarketInfo(Sym,MODE_SWAPSHORT),0,5),8,"Verdana",Yellow);
      NowSpr=MarketInfo(Sym,MODE_SPREAD);
      if(MaxSpr[j]<NowSpr){MaxSpr[j]=NowSpr;}
      if(MinSpr[j]>NowSpr){MinSpr[j]=NowSpr;}
      AveSpr[j]+=NowSpr;
      ObjectSetText("obj3"+(string)j,(string)NowSpr,8,"Verdana",Yellow);
      ObjectSetText("obj4"+(string)j,(string)MaxSpr[j],8,"Verdana",Yellow);
      ObjectSetText("obj5"+(string)j,(string)MinSpr[j],8,"Verdana",Yellow);
      ObjectSetText("obj6"+(string)j,StringSubstr((string)(AveSpr[j]/CouSpr),0,5),8,"Verdana",Yellow);
      
      
      
      txt+="            "+(string)NowSpr+"    "+(string)MaxSpr[i]+"    "+(string)MinSpr[i]+"    "+StringSubstr((string)(AveSpr[i]/CouSpr),0,5);
      txt+="\n";
     }
//Comment(txt);
  }
//+------------------------------------------------------------------+

2016年10月24日月曜日

EA ALLTIME (仮称) 久々の無料公開 ソース付き!

のーんびりしたEAを作っています。
条件設定がまだなのですが、スワップの取れる方向にのみエントリーするものです。
例えばAUDJPYでLONG方向にスワップが付くとします。
月、週、日の平均が上昇している時でRSIの条件が合えばエントリーします。
逆に月、週、日の平均のひとつでも下降している時はエントリーしません。
つまりエントリーしない時は何カ月もエントリーなしです。
(設定でスワップが付かない方向にもエントリーさせることができます)

ソースコードは10行以内がいいのですが、見やすくしたら300行程度になってしまいました。

利益確定額、追加発注金額をうまく調整するとのんびり長期にも短期型にもなります。
取りあえずAUDUSDで一ヶ月ほどしてみました。
最後はエントリー中にテスト期限が来て強制クローズで下がっています。
エントリーは最大4本 エントリーして追加発注額損失が出ると1本追加
最初のエントリーから追加発注額の4倍損失でもう一本、6倍でさらにもう一本です。

OANDAベーシック最終EAと似たような画面表示もありますので、自動売買OFFでも使えます。
時間の都合で条件設定が出来ていないのと、ロジックが検討できていませんが、
素敵な設定が出たら教えて下さい。














// This is TACA'S EA FOR OANDA BASIC.
#property copyright"CopyRight,Taca 2016/10/20"
#property description"Testing model"
#property strict
input int MAGIC=54720;//魔法数字
input ENUM_MA_METHOD MAMODE=2;//平均の種類
input int MAPRD=5;//平均の期間
input int RSIPRD=14;//RSIの期間
input int RSIUL=70;//RSIの売りライン
input int RSIDL=30;//RSIの買いライン
input int RSIOrdPrd=1;//RSIの発注期間
input double Lots=0.01;//ロット
input int SpreadLimit=30;//スプレッド上限
input int AdditionalOrder=5000;//追加発注金額
input double Profit=0.5;//利益確定額
input bool SwapMode=False;//スワップモード
input string Com="EA AllTime";//コメント
input color TxtClr=clrWhite;//文字色
input color TxtImpClr=clrYellow;//強調文字
bool SwapUp,SwapDown,SprLim,OrdType,RSIU[6],RSID[6],MAU[6],MAD[6];
color OBJCLR[14];
datetime Past;
double Ave,Prf,SprMax,SprMin,SprAve,SprNow,SprCou=1;
int x[14]={5,5,5,5,150,155,150,172,193,212,233,253,150,230};
int y[14]={25,40,55,70,10,25,40,40,40,40,40,40,55,55};
int Per[6]={43200,10080,1440,60,15,1};
int Pos,i,d,OBJFSI[14];
string Text[14],Obj[14];
string UD[3]={"U","D","N"};
string MAMODETxt[4]={"Simple MA ","Exponential MA ","Smoothed MA ","Linear Weighted MA "};
//+------------------------------------------------------------------+
//|Opening                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   for(i=0;i<14;i++)
     {
      Obj[i]="Label"+(string)i;
      ObjectCreate(0,Obj[i],OBJ_LABEL,0,0,0);
      ObjectSetInteger(0,Obj[i],OBJPROP_XDISTANCE,x[i]);
      ObjectSetInteger(0,Obj[i],OBJPROP_YDISTANCE,y[i]);
      ObjectSet(Obj[i],OBJPROP_BACK,true);
      ObjectSetInteger(0,Obj[i],OBJPROP_BACK,False);
      OBJFSI[i]=8;
      OBJCLR[i]=TxtClr;
     }
   d=ChartSetInteger(0,CHART_COLOR_BACKGROUND,Black);
   d=ChartSetInteger(0,CHART_COLOR_FOREGROUND,White);
   d=ChartSetInteger(0,CHART_COLOR_GRID,Gray);
   d=ChartSetInteger(0,CHART_COLOR_CHART_UP,Red);
   d=ChartSetInteger(0,CHART_COLOR_CHART_DOWN,Blue);
   d=ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,Red);
   d=ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,Blue);
   d=ChartSetInteger(0,CHART_COLOR_CHART_LINE,Green);
   SprSet();//Spread Setting
   SprChk();//Spread Check
   Write(); //データー記述
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|Ending                                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(i=0;i<14;i++){ObjectDelete(Obj[i]);Comment("");}
  }
//+------------------------------------------------------------------+
//|CORE                                                              |
//+------------------------------------------------------------------+
void OnTick()
  {
   SprChk();//Spread Check
   MAChk();//MAチェック
   RSIChk();//RSI CHECK
   Order(); //発注機関
   StopLoss();//ストップロス
   Write(); //データー記述
  }
//+------------------------------------------------------------------+
//|Entry Long                                                        |
//+------------------------------------------------------------------+
void EntryLong()
  {
   if(SprLim)
     {
      d=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,Ask+Profit,Com,MAGIC);
      OrdType=True;
     }
   Average();
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      d=OrderSelect(i,0);
      if(OrderMagicNumber()==MAGIC)
        {
         d=OrderModify(OrderTicket(),OrderOpenPrice(),0,Ave+Profit,0);
        }
     }
  }
//+------------------------------------------------------------------+
//|Entry Short                                                       |
//+------------------------------------------------------------------+
void EntryShort()
  {
   if(SprLim)
     {
      d=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,Bid-Profit,Com,MAGIC);
      OrdType=False;
     }
   Average();
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      d=OrderSelect(i,0);
      if(OrderMagicNumber()==MAGIC)
        {
         d=OrderModify(OrderTicket(),OrderOpenPrice(),0,Ave-Profit,0);
        }
     }
  }
//+------------------------------------------------------------------+
//|Averaging                                                         |
//+------------------------------------------------------------------+
void Average()
  {
   Ave=0;Pos=0;
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      d=OrderSelect(i,0);
      if(OrderMagicNumber()==MAGIC)
        {Ave+=OrderOpenPrice();Pos++;}
     }
   Ave=Ave/Pos;
  }
//+------------------------------------------------------------------+
//|Order Machine                                                     |
//+------------------------------------------------------------------+
void Order()
  {
   if(Time[0]!=Past)
     {
      Past=Time[0];
      //ポジション確認
      Pos=0;
      for(i=OrdersTotal()-1;i>=0;i--)
        {
         d=OrderSelect(i,0);
         if(OrderMagicNumber()==MAGIC){Pos++;Prf=OrderProfit();}
        }
      //スワップ
      SwapUp=False;
      SwapDown=False;
      if(MarketInfo(Symbol(),MODE_SWAPLONG )>=0){SwapUp=True;}
      if(MarketInfo(Symbol(),MODE_SWAPSHORT)>=0){SwapDown=True;}
      if(!SwapMode){SwapUp=True;SwapDown=True;}
      //初回発注
      if(MAU[0]&&MAU[1]&&MAU[2]&& RSI(RSIOrdPrd)<RSIDL && Pos==0 && SwapUp){EntryLong(); }
      if(MAD[0]&&MAD[1]&&MAD[2]&& RSI(RSIOrdPrd)>RSIUL && Pos==0 && SwapDown){EntryShort();}
      //追加発注1
      if(OrdType  && MAU[0]&&MAU[1]&&MAU[2]&& RSI(RSIOrdPrd)<RSIDL && Pos==1 && SwapUp && Prf<-AdditionalOrder){EntryLong();}
      if(!OrdType && MAD[0]&&MAD[1]&&MAD[2]&& RSI(RSIOrdPrd)>RSIDL && Pos==1 && SwapDown && Prf<-AdditionalOrder){EntryShort();}
      //追加発注2
      if(OrdType  && MAU[0]&&MAU[1]&&MAU[2]&& RSI(RSIOrdPrd)<RSIDL && Pos==2 && SwapUp && Prf<-AdditionalOrder*3){EntryLong();}
      if(!OrdType && MAD[0]&&MAD[1]&&MAD[2]&& RSI(RSIOrdPrd)>RSIDL && Pos==2 && SwapDown && Prf<-AdditionalOrder*3){EntryShort();}
      //追加発注3
      if(OrdType  && MAU[0]&&MAU[1]&&MAU[2]&& RSI(RSIOrdPrd)<RSIDL && Pos==3 && SwapUp && Prf<-AdditionalOrder*5){EntryLong();}
      if(!OrdType && MAD[0]&&MAD[1]&&MAD[2]&& RSI(RSIOrdPrd)>RSIDL && Pos==3 && SwapDown && Prf<-AdditionalOrder*5){EntryShort();}
   
   
     }
  }
//+------------------------------------------------------------------+
//|StopLoss                                                                  |
//+------------------------------------------------------------------+
void StopLoss()
  {
   if(OrdType && RSID[0] && !RSIU[0]){CloseAll();}
   if(!OrdType && RSIU[0] && !RSID[0]){CloseAll();}
  }
//+------------------------------------------------------------------+
//|Write on Display                                                  |
//+------------------------------------------------------------------+
void Write()
  {
//if(IsDemo() && !IsVisualMode()){return;}
//Note Time
   Text[4]="MN W1 D1 H1 QH M1";
//Note MA
   Text[0]=MAMODETxt[MAMODE]+"("+(string)MAPRD+") ";
   Text[5]=NULL;
   for(i=0;i<6;i++)
     {
     if(MAU[i]){Text[5]+=UD[0]+"   ";}
     else if (MAD[i]){Text[5]+=UD[1]+"   ";}
     else{Text[5]+=UD[2]+"   ";}
     }
//Note RSI

   Text[1]="RSI("+(string)RSIPRD+")";
   for(i=6;i<12;i++)
     {
      Text[i]=(string)RSI(Per[i-6]);
      OBJFSI[i]=8;
      OBJCLR[i]=TxtClr;
      if(RSIU[i-6]){OBJFSI[i]=10;OBJCLR[i]=TxtImpClr;}
      if(RSID[i-6]){OBJFSI[i]=10;OBJCLR[i]=TxtImpClr;}
     }
//Note SWAP
   Text[2]="SWAP";
   double TF;
//SWAP LONG
   TF=NormalizeDouble(MarketInfo(Symbol(),MODE_SWAPLONG),3);
   Text[12]="Long ";
   if(TF>=0){Text[12]+=StringSubstr((string)TF,0,4);}
   else{Text[12]+=StringSubstr((string)TF,0,5);}
//SWAP SHORT
   TF=NormalizeDouble(MarketInfo(Symbol(),MODE_SWAPSHORT),3);
   Text[13]="Short ";
   if(TF>=0){Text[13]+=StringSubstr((string)TF,0,4);}
   else{Text[13]+=StringSubstr((string)TF,0,5);}
   if(SwapUp){OBJFSI[12]=10;OBJCLR[12]=TxtImpClr;}else{OBJFSI[12]=8;OBJCLR[12]=TxtClr;}
   if(SwapDown){OBJFSI[13]=10;OBJCLR[13]=TxtImpClr;}else{OBJFSI[13]=8;OBJCLR[13]=TxtClr;}
//Note SPREAD
   Text[3]="SPREAD Now "+(string)SprNow+" / Max "+(string)SprMax
           +" / Min "+(string)SprMin+" / Ave "+(string)NormalizeDouble(SprAve,1);
//Display
   for(i=0;i<14;i++){ObjectSetText(Obj[i],Text[i],OBJFSI[i],"Verdana",OBJCLR[i]);}
  }
//+------------------------------------------------------------------+
//|MA CHECK                                                          |
//+------------------------------------------------------------------+
void MAChk()
  {
  for(i=5;i>=0;i--)
     {
     MAU[i]=False;
     MAD[i]=False;
      if(MA(Per[i],2)<MA(Per[i],1)){MAU[i]=True;}
      if(MA(Per[i],2)>MA(Per[i],1)){MAD[i]=True;}
      if(i==5&&!MAU[5]&&!MAD[5]){MAU[5]=True;MAD[5]=True;}
      if(MAU[i]==MAD[i]){MAU[i]=MAU[i-1];MAD[i]=MAD[i-1];}
     }
  }
//+------------------------------------------------------------------+
//|Moving Avarage                                                    |
//+------------------------------------------------------------------+
double MA(int Prd,int Times){return(iMA(Symbol(),Prd,MAPRD,0,MAMODE,PRICE_CLOSE,Times));}
//+------------------------------------------------------------------+
//|RSI Check                                                         |
//+------------------------------------------------------------------+
void RSIChk()
  {
   for(i=0;i<6;i++)
     {
      RSIU[i]=False;
      RSID[i]=False;
      if(RSI(Per[i])>RSIUL||RSI(Per[i])==0){RSIU[i]=True;}
      if(RSI(Per[i])<RSIDL||RSI(Per[i])==0){RSID[i]=True;}
     }
  }
//+------------------------------------------------------------------+
//|RSI                                                               |
//+------------------------------------------------------------------+
int RSI(int Prd)
  {return((int)iRSI(Symbol(),Prd,RSIPRD,PRICE_CLOSE,0));}
//+------------------------------------------------------------------+
//|Spread Check                                                      |
//+------------------------------------------------------------------+
void SprChk()
  {
   SprNow=MarketInfo(Symbol(),MODE_SPREAD);
   SprCou++;
   SprAve=(SprAve*(SprCou-1)+SprNow)/SprCou;
   if(SprMax<=SprNow){SprMax=SprNow;}
   if(SprMin>=SprNow && SprNow!=0){SprMin=SprNow;}
   if(SpreadLimit>=SprNow){SprLim=True;}else{SprLim=False;}
  }
//+------------------------------------------------------------------+
//|Spread Setting                                                    |
//+------------------------------------------------------------------+
void SprSet()
  {
   SprNow=MarketInfo(Symbol(),MODE_SPREAD);
   SprMax=SprNow;
   SprMin=SprNow;
   SprAve=SprNow;
  }
//+------------------------------------------------------------------+
//|CloseAll                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   for(i=OrdersTotal()-1;i>=0;i--)
     {
      d=OrderSelect(i,0);
      if(OrderMagicNumber()==MAGIC){d=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0);}
     }
  }
//+------------------------------------------------------------------+

2016年10月20日木曜日

【検証】フォワードテストとデモ口座の差異 後編

試験が終わりました。

同じVPSで同じブローカー同じコースで同じ条件で発注してどれくらい差が出るかを見ます。

前回の21:30にポジションを持っていないと固定TP/SLで発注するEAです。

MT4-1
MT4-2
MT4-3
MT4-4
MT4-5

見にくいのですね。表にしましょう。



00秒付近の発注
サーバー1と4は二回発注しています。
2,3,5は0秒前後の発注が欠けています。
1と4は発注時間が1秒ずれましたが価格は同じです。

06秒付近の発注
こちらはすべて発注していますが5は2秒早く発注しています。
5は他と比べ0.3Pips差があります。
決済時間は1,2が10秒、3,4は11秒、5は19秒です。
価格は少数以下626が2個 627が1個 630が1個 624が1個
最大0.6Pipsの差があります。

全く同じVPSに同じサーバーでも発注最大差0.3Pips+決済最大差0.6Pips
合計0.9Pipsの差が出る可能性があるようです。
スプレッドが0.4なので影響は非常に大くなります。
実質スプレッドは最大1.3Pips??

同一の環境でこのずれが起こるという事はMYFXBOOKを使ってもこの程度の差は出るという事です。
今回は単回ですが回数を重ねるともう少しまるくなるのかもしれません。

フォワードも、フロントも目安にはなるが、完全に同一にはならないのですね。
















【検証】フォワードテストとデモ口座の差異 前編

最近M氏とメールのやり取りをよくしているのですが、
送ったメールを読み返してみると最近書いている文章がどうも愚痴っぽい。
それでも返してくれるM氏には感謝です!

さてその愚痴ですが、バックテストと実運用で違いが出るとはよく聞く話です。
バックテストはご承知の通りと思うのですが、スプレッド完全固定にスリッページ0です。
わたし的にはなかなか精度は高いと思うのですが、架空のティックを作り出しているので全く話にならないとの書き込みもよく見ます。

続いてフォワードテストが信じられないといった話ですが、
例えばFX-ONでよく使われているのはOANDA デモ口座でのフォワードテストです。
もうすぐ自動売買ができなくなるベーシックコースと同じスプレッドです。

デモ口座はティック数が少ない事が多くあり、時間の欠けもよくあります。
しかし、ブローカーが違えばもっと大きな差がでます。
また、VPS,PCの環境によっても違いが出ます。
そういったことからMYFXBOOKでリアル運用を見せてほしいと言ったお話がよくあります。

しかしMYFXBOOKと実運用は全く同じになるかという事ですが、
やはりここにも差異を生じる要因があります。
一つはVPS,PCの環境差
1ブローカーでの複数EAの運用
サーバーの処理の差です。

複数EAを走らせているうえでのずれは複数走らせないことで解決できます。

VPS,PCのずれは同じVPS業者を使う事である程度解決できます。

VPSのある程度のずれとサーバーのずれを見てみたいと思います。
OANDA ベーシックコース5口座で同時に発注して差が出るかどうか試験をします。
同じVPS、おなじサーバーで差異が出るのでしょうか?

今回はこのEAです。
結果はいかに!?

extern int hh=15,mm=30;
void OnTick(){if(Hour()==hh&& Minute()==mm&&OrdersTotal()==0)
{int d=OrderSend(Symbol(),OP_BUY,0.01,Ask,0,Ask-0.02,Ask+0.02,NULL,1);}}



2016年10月18日火曜日

世界最後のOANDAベーシックコース専用EA!!

さて、OANDA社のEAの自動売買終了まで二週間を切りました。
OANDA社によると、自動売買は出来なくなるがシグナル配信やインディケーターは使えるとの事。
もう、ベーシックコースは諦めるしかないと誰もが思うところなのでしょうが、
そこに壁があるから人は知恵を働かせ成長するのです。

OANDA社ベーシックコース専用EAを作りました。
専用EAはこれが世界で最後ではないでしょうか!!


自動売買は出来ないという大前提があります。
今回作ったのは裁量アシスト型EA

むりくりにでもインディケーターにしなかったのはこだわりという事にしておいてくださいw

コメント欄に月、週、日、時間、クオーター時間、分のSMMA5、RSI そしてスワップを表示します。

SMMAは平滑移動平均線かんたんにいうと「尖がりにくい」平均です。
期間の長いEMAとも言えますがw
矢印が出ています。SMMA期間5が上向けか下向けかを見ています。

次はRSI70/30を超えると反転の目安です。
H1が70を超えています。。

そしてSWAP B(uy) / S(ell) 買いスワップは0.26、売りスワップは-0.54です。

使い方としてはSWAPがプラスの方にエントリーします。
この図ではLONG、BUYです。 まだここではエントリーの方向を決めるだけです。

次はMN(月)W1(週)D1(日)の方向がSWAPの方向と同じ方向か確認します。

その次はH1,M15,M1のRSIを確認します。
M1のみが30を切っている時は数PIPS
M1とM15が30を切っている時は数十PIPS
M1,M15,M30が30を下回っている時は数百PIPS程度にTP(利益確定)を設定します。

また、数百PIPS損が出たら追加で同じ方向にエントリーします。


これは、何をしているかというと含み損をマネージメントしたストップロスの無い裁量取引です。
最後のRSI確認がエントリーと利益の目安です。
しかし、RSI通りにいかないこともあります。
そんな時は大きな足MN,W1,D1の方向にいつかは進むというのを待ちます。
ストップロスで損失を決めるのではなく、放置すれば利益に代わる方向を見ています。

そして、SWAPのつく方向にエントリーすることで、未決済期間に利益を稼ぎます。
更に、大きく損失が出た時には難平をして、価格を平均化します。
ドル円でいうと数円で追加エントリーをしますので、10円動くことを考えても4~5本あれば大丈夫と思います。

ハ〇●バ先に50万円ほど入金して5000通貨で数ペア動かし、追加エントリーは5円が私流です。のーんびり確実に稼ぐやり方ですね


// This is TACA'S EA FOR OANDA BASIC.
string Text;
string UD[2]={"↑","↓"};
int Per[6]={43200,10080,1440,60,15,1};
int i;
int OnInit(){EventSetTimer(1);return(0);}
void OnDeinit(const int reason){EventKillTimer();}
void OnTimer()
{
//期間表示
Text="             MN W1 D1 H1 M15 M1\nSMMA5   ";
//SMMA5 表示
for(i=0;i<6;i++)
{
if(MA(Per[i],1)<MA(Per[i],0)){Text+=UD[0];}else{Text+=UD[1];}
Text+="    ";
}
//RSI表示
Text+="\nRSI        ";
for(i=0;i<6;i++){Text+=RSI(Per[i])+"  ";}
//SWAP表示
Text+="\nSWAP B/S   "+MarketInfo(Symbol(),MODE_SWAPLONG)
                 +" / "+MarketInfo(Symbol(),MODE_SWAPSHORT);
//コメント表示
Comment(Text);
}
//平均関数
double MA(int Prd,int Times){return(iMA(Symbol(),Prd,5,0,MODE_SMMA,PRICE_CLOSE,Times));}
//RSI関数
int RSI(int Prd){return(iRSI(Symbol(),Prd,14,PRICE_CLOSE,0));}