アドバイザーの書き方を勉強中...。 - ページ 4

 

Expert Advisorがマルチカレンシーである場合、必要です。

Bidと Pointの 値は、おそらく MarketInfo()を通してすでに設定(記載 )されているので、なおさらです。

一度、多通貨のExpert Advisorのブランチを立ち上げました。ご覧いただければ、いくつかの疑問が解消されるはずです...。

マルチカレンシーエキスパートアドバイザーに関する質問」です。

 

そして、ここでは具体的に修正について

「マルチカレンシーアドバイザーの質問

 

このバリエーションで作ったのは...。開いた直後にModifyPos()を呼び出すと

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);
    }  
  }

停止 - 20.

テイクプロフィット - 100

ログのメッセージ -OrderModify error 130

 

テイクポジションに買いポジションを試してみる

Ask+ TakeProfit*Point

考えてみてください!買いポジションの場合、テイクプロフィットが突然現在の価格より 下になるのはなぜですか?

エラーが発生しても不思議ではありません

そして、売りポジションも同様に...。

しかし、Take Profitを変更する必要がない場合は、このようにするのが良いでしょう。

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
同様に、セルサイドの場合
 
rid >> :

考えてみてください!買いポジションのテイクプロフィットが、突然現在の価格より下になるのはなぜですか?

どうりでエラーが発生するわけだ!

Ridさん、ありがとうございました。

注意していなかったので)・・・。を実行し、さらに成功した。)

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);
            }      
   }
 

テスト中にログに残るようになった最後のエラーは、OrderSend エラー 138 です。

このエラーは、取引がないときは途切れることなく、つまり1ティックごとに発生します。

注文が発生するとすぐにエラーが消える...注文が終了するとまたエラーになる...。

信号がないのに注文を送ろうとしているように見えるのですが・・・。しかし、売りと買いの(if)条件があるので、なぜか理解できない

 
ALex2008 писал(а)>>

テスト中にログに残るようになった最後のエラーは、OrderSend エラー 138 です。

このエラーは、取引がないときは途切れることなく、つまり1ティックごとに発生します。

注文が発生するとすぐにエラーが消える...注文が終了するとまたエラーになる...。

信号がないのに注文を送ろうとしているように見えるのですが・・・。しかし、売るにも買うにも条件(if)があるのだから、わけがわからない。

よく読まないでくださいhttps://book.mql4.com/ru/content それがすべてです。

 

読むことと理解することは違う...。実践で理解したい)

入力には条件があり、これらの条件が満たされた後、コントロールは注文を開く関数に渡される...

OrderSendが 条件を迂回して動作しようとしているのが理解できない...論理的にはエラーが発生する...入力条件がないため

 
boolRefreshRates() )

定義済み変数や時系列配列 のデータをリフレッシュする。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()関数で更新しておく必要があります。"

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

は役に立ちません...