初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 714

 
dimnik:

OnTradeTransactionを使用 することで、不思議と最適化時間が変化しています。15Mのシステム、非常にシンプル、年間履歴、1回の実行は0.3〜0.4秒で発生します。

最適化スタート後、最初の200~300本は1秒以下で進み、次のものは15~20秒まで遅くなります(50回!)。

プロセッサのオーバーヒートやトロトロ感はなく、メモリは半分以上空いています(16GBから)。

OnTradeTransaction ハンドラを使用する前は、このようなことはありませんでした。小さな時間枠のより複雑な Expert Advisor でさえ、ほぼ同じ速度で最適化されていました。

HistoryDealSelectはそれほど速度に影響するのでしょうか?どうすればラグを解消できるのか?

void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
   if( trans.type != TRADE_TRANSACTION_DEAL_ADD) return;
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
   long     deal_type         =0;
   double   deal_volume       =0;
   long     deal_magic        =0;
   if(HistoryDealSelect(trans.deal))
     {
      deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
      deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
      deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
     }
   else
      return;
   if (deal_type == DEAL_TYPE_BUY && deal_magic == MagicNumber) current_position += deal_volume;
   if (deal_type == DEAL_TYPE_SELL && deal_magic == MagicNumber) current_position -= deal_volume;
      
  }


コードを全部見せてください。
 

こんにちは。

誰が知っている - インジケータとどのように多くの最大でゼロバーの右側にバーを表示する方法?(する価格予想)。

 
dimnik:

速度に悪い影響を与えるのはHistoryDealSelectでしょうか?どうすれば減速を解消できるのか?

開発者は、History関数の呼び出しを最小限にすることを推奨しています(高価です) - Historyキャッシュによって。

kodobase (MT4Orders)で動作するソリューションを投稿しましたが、おそらくあなたには合わないでしょう。

キャッシュを使用してもラグが発生したことはありません。

しかし、OnTradeTransactionは 最適に書かれていないにもかかわらず、遅くなることはないはずです。

 
Renat Akhtyamov:

こんにちは。

誰が知っている - インジケータとどのように多くの最大でゼロバーの右側にバーを表示する方法?(する価格予測)。

最後のバーの開始 時間にPeriodSeconds()を追加し、そこにグラフィカルなオブジェクトでローソクを描画します。右側に最大金額が表示されます。ただ、出口がある場合、どのように表示されるかは確認していません。おそらく、それ自体を考慮すべきなのでしょう。
 
Alexey Viktorov:
最後のバーの開始 時間にPeriodSeconds()を追加し、そこにグラフィカルなオブジェクトでローソクを描画します。せいぜい右側に見える程度でしょう。ただ、出口がある場合、どのように表示されるかは確認していません。おそらく、1つは考慮に入れておく必要があります。
ありがとうございます、持ってます
 
Alexey Viktorov:
最後のバーのオープン 時間にPeriodSeconds()を追加し、そこにローソク足を描画します。せいぜい、右側に表示される程度です。しかし、その外観は確認していない。おそらく、考慮する必要があるのでしょう。

チャート上では継続を描きますが、残念ながらインジケーターウィンドウでは描けません。

もちろん私が間違っているのかもしれませんが...。

どうでしょう。インジケーターの線をゼロバーを超えて右側に続けることはできますか?

 
誰が知っている - それは、ゼロバーを超えて右側に指標線を継続することが可能ですか?
 
Renat Akhtyamov:
インジケーターラインは、ゼロバーを超えて右側に伸ばすことができるのでしょうか?
できます。シフトを設定することは可能ですが、存在しない値で計算することはおそらく不可能であり、インジケータは時間を使用しません。だから、グラフィカルな要素を使ったバー表示の話をしたんです。ObjectCreate() には、ウィンドウ番号(サブウィンドウ)と時刻の両方が含まれています。グラフィカルな要素を作成する際には、特に問題はないはずです。
 
Alexey Viktorov:
できます。ずらすことはできますが、おそらく存在しない値で計算され、その時間はインジケータ表示には使われません。だから、グラフィカルな要素を使ったバー表示の話をしたんです。ObjectCreate()には、ウィンドウ番号(サブウィンドウ)と時刻の両方が含まれています。したがって、グラフィカルな要素を作成する際に問題はないはずです。

チャートウィンドウでは、タイムスタンプを利用して、将来の目的のバーを参照することができます。それが功を奏した。

しかし、インジケーターウィンドウで同じことができません。例:インジケーターバッファに-1, -2, などのインデックスで値を書き込むことができない。

問題はこれです。

原理的には明らかです。解決策は、グラフィカルなオブジェクトによってインジケータを作成することです。

 
Renat Akhtyamov:

チャートウィンドウでは、タイムスタンプを利用して、将来の目的のバーを参照することができます。それが功を奏した。

しかし、インジケーターウィンドウで同じことができません。例:インジケーターバッファに-1、-2などのインデックスで値を書き込むことができない。

問題はこれだ。

原則的にはクリアしています。解決策は、グラフィカルなオブジェクトでインジケータを作成することです。

2番目のバッファを通常の値で計算し、例えば("未来 "を表示するために10本のバーを計算したい場合)、このバッファをBuff[9] -- Buff[8] -- Buff[n] -- Buff[0] の値で計算し、このバッファに0以外のオフセットを付けて表示します。バッファオフセットを将来の希望する小節 数に設定する(この例では10)。
理由: