OrderSend(...);
ModifyPos();void ModifyPos(){if(OrderSelect(0, SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);}}
void ModifyPos(){if(OrderSelect(0, SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);}}
Expert Advisorがマルチカレンシーである場合、必要です。
Bidと Pointの 値は、おそらく MarketInfo()を通してすでに設定(記載 )されているので、なおさらです。
一度、多通貨のExpert Advisorのブランチを立ち上げました。ご覧いただければ、いくつかの疑問が解消されるはずです...。
マルチカレンシーエキスパートアドバイザーに関する質問」です。
そして、ここでは具体的に修正について
「マルチカレンシーアドバイザーの質問
このバリエーションで作ったのは...。開いた直後にModifyPos()を呼び出すと
停止 - 20.
テイクプロフィット - 100
ログのメッセージ -OrderModify error 130
テイクポジションに買いポジションを試してみる
考えてみてください!買いポジションの場合、テイクプロフィットが突然現在の価格より 下になるのはなぜですか?
エラーが発生しても不思議ではありません
そして、売りポジションも同様に...。
しかし、Take Profitを変更する必要がない場合は、このようにするのが良いでしょう。
同様に、セルサイドの場合考えてみてください!買いポジションのテイクプロフィットが、突然現在の価格より下になるのはなぜですか?
どうりでエラーが発生するわけだ!
Ridさん、ありがとうございました。
注意していなかったので)・・・。を実行し、さらに成功した。)
テスト中にログに残るようになった最後のエラーは、OrderSend エラー 138 です。
このエラーは、取引がないときは途切れることなく、つまり1ティックごとに発生します。
注文が発生するとすぐにエラーが消える...注文が終了するとまたエラーになる...。
信号がないのに注文を送ろうとしているように見えるのですが・・・。しかし、売りと買いの(if)条件があるので、なぜか理解できない
テスト中にログに残るようになった最後のエラーは、OrderSend エラー 138 です。
このエラーは、取引がないときは途切れることなく、つまり1ティックごとに発生します。
注文が発生するとすぐにエラーが消える...注文が終了するとまたエラーになる...。
信号がないのに注文を送ろうとしているように見えるのですが・・・。しかし、売るにも買うにも条件(if)があるのだから、わけがわからない。
よく読まないでくださいhttps://book.mql4.com/ru/content それがすべてです。
読むことと理解することは違う...。実践で理解したい)
入力には条件があり、これらの条件が満たされた後、コントロールは注文を開く関数に渡される...
OrderSendが 条件を迂回して動作しようとしているのが理解できない...論理的にはエラーが発生する...入力条件がないため
定義済み変数や時系列配列 のデータをリフレッシュする。Expert Advisorやスクリプトが長時間計算を行い、データの更新が必要な場合に使用する機能です。データが更新された場合は TRUE、そうでない場合は FALSE を返す。クライアント端末の現在の状態に対応するからといって、データが更新されるとは限らない。Expert Advisorとスクリプトは、履歴データの独自のコピーで動作します。現在のシンボルのデータのコピーは、Expert Advisor またはスクリプトの最初の起動時に作成されます。Expert Advisor を次回起動するたびに(スクリプトは一度だけ実行さ れ、受信ティックに依存しないことに留意してください)、最初に作成されたコピーが更新されます。Expert Advisorやスクリプトの実行中に、1つまたは複数の新しいティックが来る可能性があるため、データが古くなることがあります。
//------------------------------------------------------------------------------
OrderSend を 実行する前に、この関数を挿入してみる。
Opening and Setting Orders 2008-05 もご参照ください。 :オープニングとセッティング・オーダー 2008-05-05 14:26:13
"取引注文の拒否を最小限に抑え、プログラムを安定的に動作させるためには、OrderSend()関数を実行する前に、プログラムが使用する情報環境パラメータをMarketInfo()とRefreshRates()関数で更新しておく必要があります。"
は役に立ちません...