MT5とスピードの関係 - ページ 91

 
Anton:

ObjectGetIntergerのブレーキは当たり前?

 
fxsaber:

ObjectGetIntergerのブレーキは当たり前?

Getメソッドはすでにsynchronousなので、待ちます。オブジェクトの操作は、オブジェクトへの直接アクセスではなく、特別なコマンドキューを通して行われます。

ちなみに、SetメソッドとGetメソッドを混在させないことを強く推奨します。writeを複数形にしてからreadを複数形にするとよいでしょう。あるいはその逆もしかり。

 
Renat Fatkhullin:

Getメソッドはすでにsynchronousなので、待機しています。オブジェクトは、オブジェクトへの直接アクセスではなく、特別なコマンドキューで処理 されます。

ちなみに、SetメソッドとGetメソッドを混在させることは推奨されません。setと書いてからread setと 読むとよい。あるいはその逆もしかり。

残念ながら問題があるんです。上記のコードで表示されます。

分かりやすい説明ありがとうございます。

 
ある場面で邪魔になった。

実アカウントで 実行した結果。

2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryDealsTotal() = 99663
2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryOrdersTotal() = 174307

2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

通常の実装に比べ、約2500倍の高速化を実現。この方法によってのみ、合理的な時間でいくつかの計算を行うことができます。

 

ターミナルに強制的にメモリを確保させるには、次のスクリプトを実行します。

void OnStart()
  {
   short arr[];
   ArrayResize(arr,INT_MAX);
   ArrayInitialize(arr,0);
   Print(ArraySize(arr));
   Sleep(5000);
  }

アレイサイズを RAMサイズに合わせる

 
Rorschach:

ターミナルに強制的にメモリを確保させるには、次のスクリプトを実行します。

アレイサイズを RAMサイズに合わせる

何を考えているのか?

 
fxsaber:

何を考えているのか?

どうやら、端末をメモリ不足の 状態にして、それを解放するための内部機構が働くかどうかを確認するようです。

 
traveller00:

どうやら、端末をメモリ不足の 状態にすると、内部でメモリ解放の仕組みが働くようです。

はい、端末がメモリ不足になり、キャッシュされたデータのリセットを開始します

 

規格外の事態が発生しました。Expert Advisorは、インジケータのシグナルに基づいてスクリーンショットを撮影し、フィルターが通過した場合、ポジションをオープン/クローズするコマンドを出します。
スクリーンショット名には、CHFJPY_d29_h10_m24_s17の ように、日、時、秒の時刻が含まれます。時刻はTimeCurrent()関数から取得する。

ターミナルには28個のExpert Advisorのインスタンスが動作しています。ある時から44分間、端末がフリーズしたような状態になり、10時27分に再び正常に動作するようになりました。以下は、端末のログそのものの部分です。


接続の中断は確認できない。EURUSDの10:27の最初のエントリーは、取引履歴の10:14のslの終値です。

以下は、EAからのログの一部です。上の赤枠で示したように、ログの記録時刻とスクリーンショット名にもあるTimeCurrent()の時刻はほぼ同じです。
そして、下のフレームでは、その差は30分。


CHFJPYのシンボルでは、10時12分にオープニングシグナルを含む1つのスクリーンショットが形成され、10時24分にシグナルを含む2つ目のスクリーンショットが形成されました。しかし、10時27分の1分間に開店・閉店と新規開店が起こった。


1) TimeCurrent()が動作し、実際のサーバー時刻を取得すると、Expert Advisorはインジケータから正しい信号を受信します。
2)ログが書き込まれたのは10時27分です。スクリーンショットは10:27にハードディスクのFilesフォルダに書き込まれ、新しい注文(古いシグナルに基づく)は10:27にオープンされました。

もしかしたら、どなたか遭遇したことがあるかもしれませんが、このようなしゃっくりやスローダウンの原因は何でしょうか?どのような機能で検出すればよいか教えてください。この状況は、4月以降も何度か繰り返されている。

 
Vasiliy Pushkaryov:

どのような関数で原因をつかめばよいか教えてください。

TimeLocalとTimeCurrentの 不一致を監視する。

理由: