OrderSend が実行されると、関連する注文、ポジション、または取引への対処が常に成功するわけではあり ません。過去や現在の取引情報が正しくなるのを数十ミリ秒待つ必要がある場面があります。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
クローズドポジションのTakeProfit(およびStopLoss)
fxsaber さん 2016.07.17 20:19
これは無差別に非難しているのではなく、何時間もかけて、すべてがどのように動くのか(HistorySelectByPositionやその他のものは役に立ちません)を見つけようとした結果なのです。そして、もし間違っていたら、喜んで謝ります。杞憂ではなく、RoboForexEU-MetaTrader5サーバーでテスター用のExpert Advisor(その方がわかりやすい)を表示しており、ポジションを開いてからSLとTPレベルをつけています。
void OnTick() { static bool Flag = true; if (Flag) { // Открываем SELL-позицию MqlTradeRequest Request = {0}; Request.action = TRADE_ACTION_DEAL; Request.symbol = Symbol(); Request.volume = 1; Request.price = SymbolInfoDouble(Symbol(), SYMBOL_BID); Request.type = ORDER_TYPE_SELL; MqlTradeResult Result; if (OrderSend(Request, Result)) { // Устанавливаем SL и TP Request.position = Result.deal; Request.action = TRADE_ACTION_SLTP; Request.tp = Result.ask - 10 * _Point; Request.sl = Result.ask + 10 * _Point; if (OrderSend(Request, Result)) Print("Сделка в тестере закроется либо по SL, TP, либо по окончании бэктеста") ; Flag = false; } } }
このEAでは、(OnDeinitで)1つのクローズポジションのSLとTPを定義することはできません。そういうものなのでしょうか?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
スラワ さん 2017.02.22 11:16
はい、ただし、テスト対象のEAに限ります。Expert Advisorで使用する指標は対象外です。トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
スラワ さん 2017.02.14 13:46
なぜ?ワンアクションで十分です。マーケットレビューでシンボルが選択され、そのシンボルの履歴がExpert Advisorに保持されている限り、同期が保たれるのです。Expert Advisorによる保持は、1本のバーをコピーするなどして、少なくとも2分に1回この履歴にアクセスすることを意味します。履歴が同期していれば、1本のバーをコピーするのにかかる時間はなく、わずか数プロセッササイクルで済みます。あるいは、今ここで言われたように、バーの 数を求め、また数クロックサイクル
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
アレクセイ・コジツィン さん 2017.02.14 13:47
インジケーターには2分間隔が含まれていますか?
はい、また、同期の事実を確認することで、同期も保持されるのでしょうか?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
スラワ さん 2017.02.14 13:50
これは、指標にも当てはまります。1分タイマーを作成し、対象となるすべてのタイムスケールのバーの本数を 問い合わせる。タイミングファクトを確認しても、タイミングは保持されない。
OrderSend が実行された後、適切な注文、ポジション、または取引を参照することは、必ずしも成功しません。過去や現在の取引情報が正しくなるのを数十ミリ秒待つ必要がある場面もある。
数ミリ秒を待つ必要はないのです。
メッセージはOnTradeTransactionで 表示されます。
コードを見る
スクリプトにはない。スクリプトではなく、EA+ExpertRemoveを使うのは馬鹿らしい。
さらに、OrderSendは180秒間サーバーからの応答がない場合、タイムアウトでクラッシュします。これは、OnTradeTransactionがチケット待ちで永遠に蓄積される可能性があることを示唆している。そして、あなたのスクリプトのようにOnTradeTransactionに1つのorder_ticketだけという選択肢はまずいです。非同期送信の後、注文のリストを使った作業がある。だから非同期なんです。バッチを扱うために。また、バッチを使った作業がないのであれば、非同期は決して必要ありません。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索