"ダミー "からの質問 - ページ 63

 
masharov:

エキスパートアドバイザーは、別のタイムフレームでインジケータを使用します。Expert Advisor のテストでは、インジケータから間違ったデータが表示されます。

EA自体はM5で、インジケータはH4で動作します。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。

返される値は、インジケータの値と似ていますが、価格チャートウィンドウにインジケータが適用されたときに見える実際の値とは異なります。

何が問題なのか?

インジケータ呼び出しの コード例です。

考えられる原因

- 最初の14小節のルールが尊重されない場合 インジケータでhttps://www.mql5.com/ru/articles/15

- 現在のTFとプリセットTFの間の相関が遵守されていない(例えば、別のTF上の極値の必要値を持つバーのシリアル番号は、おそらくプリセットと異なり、その結果、高値、安値などが全く異なる) - これらはすべて、指標の特定の実現に依存します。

- もしかしたら、前のティックの古いインジケータ値がバッファに残っていて、空の値でバッファを再初期化する必要があるかもしれません。ArrayInitialize(array,EMPTY_VALUE) です。

Индикатор от индикатора в MQL5
Индикатор от индикатора в MQL5
  • 2010.02.08
  • MetaQuotes Software Corp.
  • www.mql5.com
При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
 
x100intraday:

考えられる原因

- 最初の14本のバーのルールが守られていない場合 インジケータでhttps://www.mql5.com/ru/articles/15

- 現在のTFとプリセットTFの間の相関は観察されない(例えば、別のTFの極値の必要値を持つバーのシリアル番号は、プリセットのものと異なる必要があり、その結果、高値、安値などが異なる) - これらはすべて、指標の特定の実装に依存する。

- もしかしたら、前のティックからの古い値がインジケータに残っていて、バッファを空の値で再初期化する必要があるかもしれません。ArrayInitialize(array,EMPTY_VALUE) です。

1. 価格チャート上のすべてのバーにインジケータが描画されます。

2.ここは何も問題ない。

3.役に立たなかった

 

リファレンスによると、日付/時刻はこのように表現することが許されているそうです。

D'12:00:00'

datetime 型の変数に値を代入しています。

 datetime start = D'12:00:00'

コンパイル時に警告がポップアップします。

なぜ?

 
Urain:
日付が指定されていないため、時刻12:00:00のみが指定されています。日付のスペルはコロンではなく、フルストップです。

リファレンスにはこう書かれている。

日付(年、月、日)、時間(時、分、秒)のいずれか、またはすべてを省略することができる。数値の範囲は 1970年1月1日から3000年12月31日までです。

D'2004.01.01 00:00' // 新年を迎えて
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00' です。
D'01.01.2004' //同上 D'01.01.2004 00:00:00'
D'12:30:27' //D'[コンパイル日] 12:30:27' に相当する。
D' '//D''【コンパイル日】00:00:00'' に相当する。

...

それとも、私が誤解しているのでしょうか?

 
masharov:

EA本体はM5で、インジケータはH4で動作しています。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。

私は、2点目を主張し続けます。

あなた自身、同じTFで正しい値が返されると書いていますね。もちろん、異なるものでは、現在のTFでは期待できない値が返されます。

マシャロフ

返される値は、インジケーターの値と似ていますが、インジケーターを価格チャートウィンドウに取り付けたときに見える実際の値とは異なります。

同じような値は、天井からではなく、M5と同等でないTFの1つから発生していると思われます。現在のTFがH4であれば、そこからの値であろうし、M5からの値も予想される。もし、M5からH4へのコードを再研磨すれば、おそらくH4で値を見つけるとき、H4で正確に正しい値をキャッチすることが可能になります(他のTFでは不正確な値に見えますが)。

もし、インジケータが1つまたは別のTFに従って正しい値を返すことができても、例えばM5でH4で表示することができない場合、同じTFでないExpert Advisorと一緒に作業するときに、返された値から何を期待できるでしょうか。

 
tol64:

リファレンスにはこう書かれている。

日付(年、月、日)、時間(時、分、秒)のいずれか、またはすべてを省略することができる。数値の範囲は 1970年1月1日から3000年12月31日までです。

D'2004.01.01 00:00' // 大晦日
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00' です。
D'01.01.2004' //同上 D'01.01.2004 00:00:00'
D'12:30:27' //D'[コンパイル日] 12:30:27' に相当する。
D' '//D''【コンパイル日】00:00:00'' に相当する。

...

それとも、私が誤解しているのでしょうか?

はいはい、ちゃんと理解しましたよ、慌てていて注意してなかったです。

どうやら元々そういうものだったようで、その後キャンセルされ、証明書の訂正はされなかったようです。

とにかく、これはヘルプの不正確さなのか、バグなのか、疑問が残ります。

 

Urain:

...

とにかく、これはヘルプの不正確さなのか、バグなのか、疑問が残ります。

スクリプトの一例です。

void Set_Start_And_End_TradeSession()
{
 datetime start = D'00:45:00';
 datetime array[];
 int s = 0, e = 0, i = 0;
 long chart_ID = ChartID();
 long count_bars = Bars(Symbol(),0);
 
 CopyTime(Symbol(),0,0,(int)count_bars,array);
 
 ArraySetAsSeries(array,true);
 
 for(s = 0; s < count_bars; s++)
   {
    ObjectCreate(chart_ID,"start_date",OBJ_VLINE,0,array[s],0); ChartRedraw();
    Sleep(50);
    if(array[s]==start) { Comment("Ok!!!"); break; }
    if(i==1441) { Comment("Error!!!"); break; }
    i++;
   }
}
そういうことなんです。ただ、コンパイル後に警告が出るのが嫌なんです))。もしかしたら、開発者の誰かがコメントしてくれるかもしれません。
 
Urain:

いずれにせよ、ヘルプの不正確さなのか、バグなのか、疑問は残りますね。

コンパイラの警告は、まだエラーがあることを意味するものではありません。プリントアウト:ヘルプにしたがってすべて反映されます。
 
masharov:

エキスパートアドバイザーは、別のタイムフレームでインジケータを使用します。Expert Advisor のテストでは、インジケータから間違ったデータが表示されます。

EA自体はM5で、インジケータはH4で動作します。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。

返される値は、インジケータの値と似ていますが、価格チャートウィンドウにインジケータが適用されたときに見える実際の値とは異なります。

何が問題なのか?

インジケータ呼び出しの コード例です。

AS_SERIES フラグは、多次元配列および静的配列には設定できません。

トライ

void OnNewBar() // моя функция
{
 double wave[];
 ArraySetAsSeries(wave, true);
 CopyBuffer(W_handle,0,(int)0,2,wave);
 if (wave[1] > 0) Buy(); 
}

または次のようになります。

void OnNewBar() // моя функция
{
 double wave[1];
 if(CopyBuffer(W_handle,0,(int)1,1,wave)<1) return;
 if (wave[0] > 0) Buy(); 
}
 
  string Symb="EURUSD";
  for(i=0;i<OrdersTotal()+PositionsTotal();i++)
     {
      if(Symb==PositionGetSymbol(i)) Orders_Total++;
     }
     Alert(Orders_Total);
実際には1つのポジションと1つの注文があるのに、なぜアラートはOrders_Total= 1と表示されるのでしょうか?