Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
//--- создадим хэндл индикатораif(type==Call_iRSI)
handle=iRSI(name,period,ma_period,applied_price);
//--- индикаторный буферdouble rsi_buffer[];
//--- заполняем часть массива iRSIBuffer значениями из индикаторного буфера под индексом 0if(CopyBuffer(ind_handle,0,0,amount,rsi_buffer)<0)
{
//--- если копирование не удалось, сообщим код ошибкиPrintFormat("Не удалось скопировать данные из индикатора iRSI, код ошибки %d",GetLastError());
//--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитаннымreturn(false);
}
少し作り直しました
(マクロは使わないほうがいい)
少し作り直しました
(だからマクロは使わない方がいい;)
テスト時には、オプティマイザが空のループを投げ出さないように、できるだけコードを混乱させます。
ある
// for(int i = 0; i < 5; i++) sum += u.param[i];MQL実行の最適化は、計算された値が使用されないため、最初のループを事前に終了させることができます。したがって、結果を伴うSpeedTest()の後に何かが行われる必要があります - このループ
コメントアウトされたループで確認したところ、捨てられませんでしたが、他のテストではクラッシュする可能性があります。
マクロは好みの問題で、私は何度もテストしてうまくいっています。
UPD: 最新のコンパイラがどのように動作するかについて書かれた記事を見つけました。
https://habr.com/ru/post/431688/
https://habr.com/ru/post/47878/
コードはハンドルのiRSIの値を与え、tpは 常に10だけですが、価格とグラフも変化します。
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)です。
ビルド2652
コードはハンドルのiRSIの値を与え、tpは 常に10だけですが、価格とグラフも変化します。
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)です。
ビルド2652
インジケーターハンドルを手にしたあなたは、それが10
次に、右のバーの値を取得する必要があります
ヘルプを 読むか、フォーラムで回答を検索してください。
インジケーターハンドルを手にしたあなたは、それが10
次に、右のバーの値を取得する必要があります
ヘルプを 読むか、フォーラムで回答を検索してください。
了解です。緩衝材を研究します。不思議ですね、すべてそのまま動くはずのような気がしていたのですが、もしかしたらmql4と混同していたのかもしれませんね。
不思議なのは、ググってもmql5でインジケーターのデータを取得するところが見つからなかったことです。
あはは、私が理解したようにあなたの例によると、インジケータRSIの値は、最終的に以下の形式の変数にあります。
をチェックしました。
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : loops=100000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : loops=100000000 ms=10862287
この差が有意でなければ、テストの順番を逆にすれば、結果は逆になる可能性が高い。
ノットクリティカル
この関数は他のコマンドよりはるかに多くのリソースを消費するため、rand()をテストに含めることはほとんど正しくありません。
この方が正しいテストになると思うのですが。
結果
幸いなことに、結局は乗せる馬を間違えてしまったのだが。労働組合はもう少し早いです。より便利で、より読みやすいコードになります。
というのも、この関数は他のコマンドに比べて桁違いにリソースを消費するためです。
一顧だにしない
rand() の実行時間は一定で、一般的なC++関数である可能性が高い。"rand c++ source code "でググってみてください。
は初期化する必要がありますが、定数で初期化すると最適化に遭遇する可能性があります。
一般に、rand()が嫌われるのは理解できない。
というような初期化も可能です。
は速いだろう。
は、あなたのスクリプトを実行しましたが、正しくありません。
主な時間は、コードをキャッシュにロードし、プロセッサにロードすることです
を追加し、システムタイマーの 離散性
うーんほぼ乱数
100500回くらいテストしてください。
rand()は他のコマンドに比べ、一桁多いリソースを消費するため、テストに含めることは正しくないと思われます。
この方が正しいテストになると思うのですが。
結果
幸いなことに、私はまだ間違った馬に賭けたままです。労働組合はもう少し早いです。より便利で、より読みやすいコードになります。
一度だけ、しかも初当選の距離で、(最初の方式でショートから何かの変換ラインを外したような)。
一顧だにしない
rand() の実行時間は一定で、一般的なC++関数である可能性が高い。"rand c++ source code "でググってみてください。
は初期化する必要がありますが、定数で初期化すると最適化に遭遇する可能性があります。
一般に、rand()が嫌われるのは理解できない。
をバリアントとして、このようなもので初期化します。
はやいもので要は、余計なものを排除して、測るべきものをきっちり測ればいいということです。
ポイントは、余分なものがなく、必要なものを正確に測定することでした
ノー
繰り返されるコード断片があれば、最適化テストが行われるのです
rand()の実行時間にはどんな違いがあるのでしょうか?
テスト時間の2/3を実行させ、rand()の時間が一定であることが重要です。
MQLコードは、システムのMQL-functionsを使用するのですよね?- 完璧なコードをテストすることに何の意味があるのでしょうか?