エキスパート: 多通貨 OnTick(string symbol) イベントハンドラ - ページ 3

 

興味深く再読。

もしMQが、デフォルトでDCサーバー上のグラスのブロードキャストをオンにして、DCがそれをオフにすることを許さないのであれば、タンバリンを使ったこれらのダンスは必要ないだろう。それはビッドとアスクだけの空のベットであるが、ブロードキャストされるべきである。

そうすれば、OnBookEventで必要なインストゥルメントをサブスクライブすることで、多通貨のティックを簡単に追跡できます。

実際、OnBookEventは標準的な多通貨ティック・ハンドラーです。

そして今のところ、それはガラスを翻訳するディリングでのみ可能です。

 
micle:

記事のコードは古いです。

そう、このコードはOnChartEvent ハンドラがまだテスターで動作していなかった時に書かれたものです。

Urain:

興味深く再読。

もしMQがデフォルトでDCサーバーのビーカー放送を有効にし、DCがそれをオフにすることを許さないのであれば、これらのすべてのタンバリンダンスは必要ないだろう!MQがデフォルトでDCサーバーのビーカー放送を有効にし、DCがそれをオフにすることを許さないのであれば。ビッドとアスクだけの空のベットであっても、ブロードキャストされるべきである。

そうすれば、OnBookEventで必要なインストゥルメントをサブスクライブすることで、多通貨のティックを簡単に追跡できます。

実際、OnBookEventは標準的な多通貨ティック・ハンドラーです。

そして今のところ、それはグラスを翻訳するディリングでのみ可能である。

OnBookEventで一度遊んでみた。専門家向けには、一般的にはうまくいくだろう。しかし、私なら「ブロードキャスト」を削除して、チャート用のサブスクリプションを作るだろう。もう一つのマイナス点は、インジケーターでは使えないことだ。テスターでは試していません。

このトピックに関する最初の出版物以来、多くのタンバリンが殺された。もっと受け入れやすいものが登場した。いつか公開するかもしれない。

 
Lizar:

そう、このコードはOnChartEventハンドラーがまだテスターで動作していなかったときに書いたものだ。

OnBookEventで遊んでいました。専門家向けには、一般的には、それでいいだろう。しかし、私なら「ブロードキャスト」を削除し、チャート用のサブスクリプションを作るだろう。もう一つのマイナス点は、インジケーターでは動作しないこと。テスターでは試していません。

このトピックに関する最初の出版物以来、多くのタンバリンが殺されてきた。もっと受け入れやすいものが登場した。いつか発表するかもしれない。

もっと微妙な方法がある。チャートのためのサブスクリプションではなく、特定のExpert Advisorのためのサブスクリプションだ。

つまり、購読しないとチャートのシグナルを受信できない。したがって、放送はかなり質的に処理されます。

スタックを持つ2つのチャートで添付ファイルのフクロウを実行します。各フクロウは購読しているシグナルのみを受信する。

ファイル:
 

Lizarさん、こんにちは、

あなたのコードを使用したいのですが、私のブローカーはmql4言語(TradeMasterFX Meta, Version: 4.00 Build 890)を使用しています、

私のターミナルをmql5をサポートするターミナルにアップグレードする方法はありますか?

アドバイスありがとうございます、

エムール

 
Konstantin Gruzdev:

ディスカッションへようこそ)

取引、自動取引システム、取引戦略のテストに関するフォーラム

mql5言語の特徴、作業の機微とテクニック

Andrey Khatimlianskii, 2018.10.09 23:18

spyを使用して空のEAを50の商品で実行すると、メッセージがログに溢れ始めます:

2018.10.09 22:49:24.730 Spy (AUDNZD,W1) indicator is too slow, 4281 ms. rewrite the indicator, please

インジケータに500ミリ秒のkastumイベント送信頻度のフィルタを追加すると、エラーは少なくなりますが、消えません。

私だけでしょうか?


EA コード:

#define  ForEach(index,array)   for(int index=0, max_##index=ArraySize(array);  index<max_##index;  index++)

string Symbols[];

int OnInit()
{
   ArrayResize( Symbols, SymbolsTotal(true) );

   ForEach( i, Symbols )
   {
      Symbols[i] = SymbolName(i,true);

      if( Symbols[i] != _Symbol )
         iCustom( Symbols[i], PERIOD_W1, "Spy.ex5", ChartID(), i );
   }
   return(INIT_SUCCEEDED);
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
   if( id == CHARTEVENT_CUSTOM )
      OnTickMS( Symbols[ (int)lparam ] );
}

void OnTick()
{
   CheckSignal( _Symbol );
}

void OnTickMS(const string &Symb)
{
   CheckSignal( Symb );
}

void CheckSignal(const string symbol)
{
   //コメント( シンボル, ": "、
   // DoubleToString( SymbolInfoDouble( symbol, SYMBOL_BID ), 5 ), " / "、
   // DoubleToString( SymbolInfoDouble( symbol, SYMBOL_ASK ), 5 )).);
   return;
}


プロファイラに よると、iCustom, OnChartEventの95%はほとんど何もしていません。プロセッサ(i5-3570)の負荷は75%です。


Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.09.21
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Andrey Khatimlianskii:

議論を呼びかけたい)


EAのOnDeinit()の中で、IndicatorRelease() とIndicatorDelete()を適切な回数だけ使ってみるという提案があります。
 
nra_:
あなたのEAのOnDeinit()で適切な回数だけIndicatorRelease() とIndicatorDelete()を使ってみては どうでしょうか。

OnDeinitに来るべきではありません。

EAを削除した後、メモリはしばらくして解放されます。

 
Andrey Khatimlianskii:

OnDeinitに行き着く必要はない。

Expert Advisorを削除した後、メモリはしばらくして解放されます。

4281 ミリ秒がどこで浪費されているのか、インジケーターをプロファイリングすることをお勧めします。多分、メッセージ送信 そのものにあるのでしょう。

 
Stanislav Korotky:

インジケーターをプロファイリングして、4281 ミリ秒がどこで浪費されたかを調べるのは合理的だ。メッセージ送信自体にあるかもしれない。

やって みました。

ある時点で EventChartCustom が 3 秒以上動き始めます。

 
EA の OnDeinit が OnDeinit に来てはいけないことは理解していますが、これは理想的です。テストの15時間中、Expert AdvisorでOnInitが1回呼び出されたのは確かですか?