バックテストで問題が見つかり、根本的な原因がわからない!

 

バックテスト後の画面は下記をご参照ください。

不思議なことに関する3つの質問も画像に表示されています。

iCustomの使い方を読んだり、EAやインジケータを何度も確認しましたが、結局根本的な原因は分かりませんでした。

緊急で助けてください、どうもありがとうございます

(*.スクリーンショットをクリックすると拡大表示され、質問をより明確に見ることができます)

これは、インジケータ "Reverse" の重要なコードです(重要なコードがわかるように、他のコードは "..." で置き換えています)。

int OnInit()
  {
   IndicatorBuffers(8);
   ....
   SetIndexBuffer(6,ExtBuffer1);
   ....
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ...
   ...

   for(i=limit-1; i>=0; i--)
     {
      ...
      Value=...;
      ExtBuffer0[i]=MathLog((1+Value)/(1-Value));
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;
     }

   ...
   ...
  }

これは、インジケータを使用するEAの重要なコードです(他のコードは、それが重要なコードのために明確であるように、"... "に置き換えられました)。

...
...

void Reverse()
  {
   Joy1=iCustom(Symbol(),0,"Reverse",6,1);
   Joy2=iCustom(Symbol(),0,"Reverse",6,2);
  }

void openPosition()
  {
   ...
   if(Joy2<=-10 && Joy1>=10) 
    {
    r=OrderSend(Symbol(),OP_BUY,lotSize,Ask,slippage,0,0,TradeComment,MAGIC,0,clrMediumBlue);
    ...
    }
   else if(Joy2>=10&& Joy1<=-10) 
    {
    r=OrderSend(Symbol(),OP_SELL,lotSize,Bid,slippage,0,0,TradeComment,MAGIC,0,clrMediumVioletRed);
    ...
    }
   ...
   }
void closePosition()
  {
   ...
    if(openType==OP_BUY && Joy2>=10 && Joy1<=-10)
     for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrDodgerBlue);
            ...
            }
   else if(openType==OP_SELL && Joy2<=-10 && Joy1>=10) 
    for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,clrDeepPink);
            ...
            }
   ...  
  }
void OnTick()
  {
   ...
   Reverse();
   openPosition();
   closePosition(); 

}

 

これで、インジケータファイルを再作成し、黄色い線の描画の 問題は解決しました。

しかし、他の2つの問題については、まだ何もわかっていません。助けてください。

 

問題はおそらくインジケータに起因しています。

 if(ExtBuffer0[i]>= 0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;

EmptyValueも確認して ください。

 
ffoorr:

この問題は、おそらくインジケータに起因しています。

EmptyValueも確認してみてください。

ffoorr様、黄色い線が見えるように、空の値はないはずです。

 

もしif(ExtBuffer0[i]==0)

SetIndexEmptyValueに書かれていることに従えば、穴があいてしまい、何もない状態になります。

行は、次の2つのデータまで印刷されないでしょう。


そうでなければ、インジケータのインデックスをチェック し、シグナルが1バー遅れているように見えます。

そうでなければ、インジケーターのコードを見なければ、誰も知ることができません。


フィッシャー・インジケータを使っていますか?

 

ffoorr様、大変お世話になっております。しかし、コードでインジケータを確認した ところ、空の値がないことが確認できました。

tick storyとMT4を再インストールしましたが、問題はまだ残っています。ということで、まだ確認中です。

 

ジョリードラゴン

SetindicatorEmptyValueがない場合、emptyvalueはEMPTY_VALUEに なります。

であれば、if( ExtBuffer1[i]!= 10 ) Open_Order() というコードを書きます。

もしExtBuffer1[i] が == EMPTY_VALUE であれば、注文があることになります。


しかし、私はこれが問題の原因であるかどうかを知ることはできません。

 

ffoorr様、ExtBuffer1が10または-10でない場合、ExtBuffer1[i] のデータを表示するようにコードを追加しました。最終的に私は何も得られず、それはすべてのバーでExtBuffer1が10または-10で あることを証明 します

私はまた、2つの行を持つ2つのバッファのみにインジケータを更新しました。白と黄色で1つずつ表示されています。私のEAでは黄色い線のデータを使用しています。

下のデータを見ると、注文が変わるのは、まさに黄色い線のデータが変わっているためです。下の「1」は注文の開始または終了の直前のバーの黄色い線のデータ、「2」は「1」の前のバーの黄色い線のデータを意味します。私の場合、注文の開始と終了もこのように処理しています。

インジケーターのコードも何度も確認しましたので、そのインジケーターはその前のバーに基づいて計算されており、したがってフィッシャー・インジケーターではないことが確認できます。

しかし、注文の変更は黄色のライン(シグナル)と一致しないことがわかります。

とても不思議です。根本的な原因は何なのでしょうか?どなたか教えてください。

2013.04.30 04:00:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 08:30:01:    1:  10.0, 2: -10.0-error:       0

2013.04.30 08:30:02:    1:  10.0, 2: -10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 16:03:26:    1:  10.0, 2:  10.0-error:       0

 
なんてことだ。まだ何もわからないわどうしたんだ?
 
jollydragon: なんてこったい。これでもまだ全然わからないんです。どうしたんだ?
  1. どうしてわかるんですか?インジケータもiCustomもループもない のですから。
  2. インジケータはまだ10とありますが、(最初の)画像には隙間がありますね。カーソルがどこにあったのかがわからないのです。ギャップの上にあったのでしょうか?
  3. 情報がないからわからないのです。変数値を含むifの 前と中にprint 文を追加して、追跡してください。
 

実は、あなたの時間を節約するために、重要なコードを削除しています。

しかし、あなたの助けは非常に高く評価され、ここで私は、EAとインジケータの両方のファイルを添付させてください。

なお、ファイル名は添付後、自動的に変更されます。2つの単語の間にランダムな文字が挿入されています。私のパソコンでは、「Trade Joy」と「Solar Joy」です。

解決策を楽しみにしています。)

ファイル:
tradebjoy.mq4  12 kb
trademjoy.ex4  17 kb
solarxjoy.mq4  7 kb
solarcjoy.ex4  8 kb
理由: