2020年1月7日火曜日

OANDA MT5 スプレッドチェッカー改

バックテストを実施する時にMT4(旧メタ)ではスプレッドを入力します。
原則固定の場合はその値~+2、3
変動の場合は平均スプレッドの+2,3を使う人が多いのではないでしょうか

MT5にはBidとAskのデーターが入っていますので、その差をスプレッドとしてバックテストを行います。こちらでスプレッドを指定することはできません。

前々回スプレッドを調べるEA?を公開しましたが、それを改良しました。
https://mt4kyoto.blogspot.com/2019/12/5.html

旧:月別の平均スプレッドを「操作ログ」に出力

新:通貨ペアの表示
月別の平均、最小、最大スプレッドと計算したティック数の表示
ソースはこんな感じです。



#property strict
long Sum[2100][13],Cnt[2100][13],Max[2100][13],Min[2100][13],SP;
MqlDateTime AMSER;
void OnInit()
   {
   for(int i=0;i<2100;i++)
      {
      for(int j=1;j<=12;j++)Min[i][j]=99999;
      } 
   }
void OnTick()
   {
   TimeToStruct(TimeCurrent(),AMSER);
   SP=SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
   Cnt[AMSER.year][AMSER.mon]++;
   Sum[AMSER.year][AMSER.mon]+=SP;
   if(Min[AMSER.year][AMSER.mon]>SP)Min[AMSER.year][AMSER.mon]=SP;
   if(Max[AMSER.year][AMSER.mon]<SP)Max[AMSER.year][AMSER.mon]=SP;
   }
void OnDeinit(const int reason)
   {
   Print(_Symbol);
   for(int i=0;i<2100;i++)
      {
      for(int j=1;j<=12;j++)
         {
         if(!Cnt[i][j])continue;
         Print(i,".",j," Average: ",Sum[i][j]/Cnt[i][j]," Max: ",Max[i][j]," Min: ",Min[i][j]," Cnt: ",Cnt[i][j]);       
         }
      }
   }

0 件のコメント:

コメントを投稿