Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
私は専門家とは程遠いので、あらかじめ謝っておきます。
EAを書いているところです。
課題です。
1)複数のインジケータを使用する場合。1つのインジケータを異なる設定(期間)で使用することができますが、それらを並行して動作させ、シグナル取得までの時間を短縮するにはどうすればよいですか?
2)指標からのシグナル受信と並行して、常にチェックを行い、利益が出ているポジションや負けているポジションを決済する。それに、募集職種が多いので、この作業は部分的に並列化する必要があります。例えば、1000件の注文を 3〜4スレッドでチェックすることができます。
3) 上記のプロセスと並行して、1.の指標から受け取ったシグナルを売買に利用する。
そして、最も興味深いのは、テスターが利用でき、テスターでの最適化が可能なように、これらのタスクをすべて並列化するにはどうしたらいいかということです。
できれば例を挙げて、道を示してください。ありがとうございました。
私は専門家とは程遠いので、あらかじめ謝っておきます。
タスク
1)複数のインジケータを使用する場合。1つのインジケータを異なる設定(期間)で使用することができます。それらを並列に動作させ、信号の受信時間を短縮する方法。
2)指標からのシグナル受信と並行して、利益確定または損切りのポジションのチェックと決済を常に行う。それに、募集職種が多いので、この作業は部分的に並列化する必要があります。例えば、1000件の注文を 3〜4スレッドでチェックすることができます。
3) 上記のプロセスと並行して、1.の指標から受け取ったシグナルを売買に利用する。
最も興味深いのは、テスターが利用でき、テスターでの最適化が可能なように、これらの作業をいかに並列化するかということです。
できれば例を挙げて、道を示してください。よろしくお願いします。
端末を開けたことがありますか?一般に、テスターとオプティマイザーは、口座での取引と並行して常に利用可能です。
パラレルの必要性に疑問がある場合、インジケーターからの信号を受信するまでにどれくらいの時間がかかるのでしょうか。
一度でも端末を開いたことがあるのか?テスターとオプティマイザーは、口座での取引と並行して常に利用可能です。
インジケーターからのシグナルを受け取るのに、並列化する必要性に疑問があるのでは?
1) 複数のインジケータを使用する。1つのインジケータを異なる設定(期間)で使用することができます。
2)指標からのシグナル受信と並行して、常にチェックを行い、利益が出ているポジションや負けているポジションを決済する。それに、募集職種が多いので、この作業は部分的に並列化する必要があります。例えば、1000件の注文を3〜4スレッドでチェックすることができます。
3) 上記のプロセスと並行して、1.の指標から受け取ったシグナルを売買に利用する。
1つのシンボルで起動したインジケータは、1つのフローで動作します。しかし、うまく書けば、遅延は発生しない(ミリ秒単位でカウントされる)。
しかし、すべての取引操作は、追加のExpert Advisor/スクリプトを使用して並列化することができます。必要に応じてメインEAから呼び出したり、常時起動しておいたり。実装例はこちらの記事 で紹介しています。または非同期のOrderSendを使用しますが、この場合、制御が少し難しくなります。
そして、最も興味深いのは=テスターとテスターでの最適化が利用できるように、これらの作業をすべて並列化するにはどうしたらいいか?
テスターではこのようなことは必要なく、同期して動作し、ティックを見逃すことはないのです。2つのバリエーション - テスター用とオンライン用 (if ( IsTesting( )).
同じツール上で動作するインジケータは、すべて同じスレッドで実行されます。しかし、きちんと書けば、遅延はありません(ミリ秒単位でカウントされます)。
しかし、すべての取引操作は、追加のExpert Advisor/スクリプトを使用して並列化することができます。必要に応じてメインEAから呼び出したり、常時起動しておいたり。実装例はこちらの記事 で紹介しています。あるいは、非同期のOrderSendを使用することもできますが、この場合、制御が少し難しくなります。
テスターにとっては、これはすべて不要なことで、同期して動作し、ティックをスキップすることもないのです。テスター用とオンライン用の2つのバリエーションを作成します (if ( IsTesting( ))。
1つのツールで起動したインジケータは、すべて1つのスレッドで動作します。しかし、うまく書けば、遅延は発生しません(ミリ秒単位で計算されます)。
--- 理解できない。自分で指標を書くつもりはない。純正インジケーターを使用しています。で、要は並列で使って応答速度を下げたいんだけど...。
テスターではこのようなことは必要なく、同期して動作し、ティックをスキップすることもありません。テスター用とオンライン用の2つのバリエーションを作成します (if ( IsTesting( ))。
----全く理解できない。必要ない人はいないでしょう?これは同期的に動作しますが、私の場合は非同期性を考慮し、その逆を行う必要があります。2つのバリエーションとは一体何なのか?自分のEAのバリエーションが1つあり、それをテスターで動かしたいのですが、処理を並列化してテスターで見せたいのです。
すべてが順次実行されるため、ドローダウンが発生するようになりました。
--- 理解できない。自分でインジケータを書かない。標準のものを使っています。で、要は並列で使って応答速度を下げたいんだけど...。
応答速度の測定はされましたか?パラレルではもっと損をしますよ。
----全く理解できない。欲しくない人なんているの?同期して動くけど、非同期性を考慮してほしい......。2つのバリエーションとは一体何なのか?自分のEAのバリエーションが1つあり、それをテスターで動かしたいのですが、処理を並列化してテスターで見せたいのです。
EA1枚。
なぜStrategy Testerで並列化のテストをするのか?
すべてが順次実行されるため、ドローダウンが始まっていて、とんでもないことになっています。
取引注文の 送信を分散させるか、OrderSendAsyncを使用 する。
多くの取引を決済する必要がある場合、1つの大きなカウンターを開き、利益を確定してから、落ち着いてOrderCloseByを1つずつ決済することができます。取引注文の送信を分散させるか、OrderSendAsyncを使用 する。
ということで、オーダーセンドだけでなく、他にもいろいろなチェックが行われています。しかし、それらはすべて、ある関数が終了するまでキューに入れられ、他の関数は実行されない・・・。
問題文にすでに記述しています。そして、それは複雑な作業です。DLLでもチャットでも何でもいいのですが、私が興味を持ったのは、これらのタスクを並行してテスターで実行し、何が何だか理解できるようにするシナリオです。
だから、令状を送るだけでなく、他のチェックもたくさん行われているんだ。しかし、1つの関数が終了するまで、すべてキューに入れられ、他の関数は実行されない・・・。
問題の用語で説明しました。そして、それは複雑な作業です。DLLでもチャットでも何でもいいのですが、私が興味を持ったのは、これらのタスクを並列化してテスターで実行し続け、何がどうなっているかを確認するシナリオです...。
そして、どれだけの貴重な時間を失い、どんな結果になるのか。また、「損失」がなかったら、利益はどうなるのでしょうか?
そして、どれだけの貴重な時間を失い、どんな結果を招いているのか。また、「損失」がなかったら、利益はどうなるのでしょうか?
24コアを自由に使えるテスターで、このストラテジーを実行するのに5日かかります。そして、1つのコアしか動作しない。この間、誰も必要としないくだらないログが、1テラバイト、2テラバイトと肥大化する可能性があるのは言うまでもない。しかも、すべて最適化なしで。そして、このバカログはどうやっても無効化できない.
4つのスケジュール、それぞれのコアで - 私はそう言うプロセスを加速する場合はどう思いますか、この点の増加4倍。さらに、1000件の取引を成立させるための別プロセス、例えばこのプロセスを5スレッドや10スレッドに分解することで、10倍になります。さらに、シグナルによるポジションを 開くための別のプロセスも ...
何度も何度も思うのですが・・・。
しかし、1ミリ秒+ブローカーまでのラグ+ブローカーから取引所までのラグ(厨房でない場合)は、とんでもない損失である。これがシベリアで理解されないのは不思議だ...。