初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 363

 
Tapochun:
ここで質問しているのは違うと思うんです。別のスレッドを作成し、そこにインジケータのコードを添付して、誰かが助けてくれることを期待しています。コードがなければ...誰も助けてはくれないだろう。
インジケータは売買しない)。
 
ToRを書くときに、アルゴリズムを正しく記述する方法がわからないという場面に出くわしました。EAの作業でポジションを 部分的に決済 することは可能かどうか教えてください。
 
Nikolay Lampickiy:
ToRを書くときに、アルゴリズムを正しく記述する方法がわからないという場面に出くわしました。EAの作業でポジションの 一部決済が 可能かどうか、アドバイスをお願いします。
そのためには、ポジションを閉じる順序で、そのポジションのロットより小さいロットを指定します(これはMT4の場合、MT5では小さいロットで反対のポジションを開くことができ、最終的には両者が重なります)。残りのロットを持つポジションは、市場に残ります。
 
Nikolay Lampickiy:
ToRを書くときに、アルゴリズムを正しく記述する方法がわからないという場面に出くわしました。EAの作業でポジションの 部分決済は 可能かどうか教えてください。
何がそんなに複雑なんだ?ポジションが均等に分割されていない場合(例えば0.09)、その大半(0.05)を決済し、ストップをブレークイーブンに移動します。次に、決済したポジションのもう半分(0.02)を利食いし、ポジション全体を決済するかブレークイーブンになるまでその逆の操作を行います。ステップの値は、固定値でも、任意の範囲から算出することも可能で、取引システムによって異なる。
 
Vladimir Zubov:
何がそんなに複雑なんだ?ポジションが均等に分割されていない場合(例えば0.09)、そのほとんどを決済し(0.05)、ストップをブレークイーブンに移動します。次に、さらに決済距離を延ばし、残った半分(0.02)を決済し、ストップを次の決済ステップのプラスに移動し、全てのポジションを決済するかストップに到達するまでこれを続けます。ステップの値は、固定値でも、任意の範囲から算出することも可能で、取引システムによって異なる。

正しく理解できているか?プログラミング言語MQL4は、マーケットオーダー量の半分だけをクローズすることを公式化することができます...ロット10で、価格が一定水準に達したら5ロット決済するような。

それとも、1/3を閉じることが可能なのでしょうか?

あるいは、このアイデアをEAで実現するには、異なる注文を出すのが簡単でしょう。価格が要求された水準に達すると、一方の注文は閉じられ、もう一方の注文は成行注文の数量の一部が閉じられた状態で残ります。いかがでしょうか?

 
Vitalie Postolache:
そのためには、決済注文でポジションのロットより小さいロットを指定する必要があります(これはMT4の場合、MT5では小さいロットで反対のポジションを開くことができ、最終的には両者が重なります)。残りのロットを持つポジションは、市場に残ります。
逆の立場では満足できない...。ご返信ありがとうございます。
 
Nikolay Lampickiy:

正しく理解できているか?プログラミング言語MQL4は、マーケットオーダー量の半分だけをクローズすることを公式化することができます...ロット10で、価格が一定水準に達したら5ロット決済するような。

それとも、1/3を閉じることが可能なのでしょうか?

あるいは、このアイデアをEAで実現するには、異なる注文を出すのが簡単でしょう。価格が要求された水準に達すると、一方の注文は閉じられ、もう一方の注文は成行注文の数量の一部が閉じられた状態で残ります。いかがでしょうか?

両方できるんです。OrderCloseは、それに指示されたボリュームをクローズすることができます。https://docs.mql4.com/ru/trading/orderclose。

もちろん、異なる利益レベルで複数の注文を出すことも可能です。 TPレベルはサーバーに保存され、価格がそれと交差する場合に実行されるため、接続障害が発生した場合にも信頼性が高くなります。

OrderClose - Документация на MQL4
  • docs.mql4.com
OrderClose - Документация на MQL4
 
Vladimir Zubov:

両方できる。OrderCloseは、それに指示されたボリュームをクローズすることができます。https://docs.mql4.com/ru/trading/orderclose。

もちろん、異なる利益レベルで複数の注文を出すことも可能です。 接続障害が発生した場合、TPレベルはサーバーに保存され、価格がそのレベルを超えたら執行されるため、信頼性はさらに高くなります。

返信ありがとうございました)))
 

こんにちは、私はある問題に直面しています。プロの方や経験豊富なMT5ユーザーの方のご意見をお聞かせください。私は、インジケータと CEventBaseクラスを書き、インジケータがイベントを生成するようにしました。これらのイベントをすぐに処理するExpert Advisorをリアルタイムで実行すると、エラーが発生します。4001, 4102, 4104.実はこのトラブルの元凶であるGenerate関数のコードを添付します。ご意見をお聞かせ頂ければ幸いです。)

皆さん、ごきげんよう。


bool CEventBase::Generate(long _chart_id, int _id_ind, SEventData &_data,
                          const bool _is_custom=true)
  {
   bool is_generated = true;
   // если индекс id события в массиве не верен
   if (_id_ind < 0 || _id_ind >= aEvents.Total())
    {
     Print("Не верно задан индекс ID события");
     return (false);
    }
   // заполняем поля 
   CEvent *event = aEvents.At(_id_ind);
   this._id = (ushort)(CHARTEVENT_CUSTOM+event.id);
   this._data = _data;
   this._data.sparam = event.name; // сохраняем имя события
   
   if(_is_custom)
     {
      ResetLastError();
      is_generated = EventChartCustom(_chart_id, event.id, this._data.lparam,
                                      this._data.dparam, this._data.sparam);
      if(!is_generated && _LastError != 4104)
         {
          Print("is_generated = ", is_generated);
          PrintFormat("%s Error while generating a custom event: %d", __FUNCTION__,_LastError);
          Print( ChartSymbol(_chart_id)," ",PeriodToString(ChartPeriod(_chart_id)), "Ошибка! _chart_id =", _chart_id, " event.id = ", event.id, " data.dparam = " ,this._data.dparam, " data.sparam = ", this._data.sparam);
          
         }
     }
   return is_generated;
  }


 
dariamap:

皆さん、こんにちは。私はある問題に直面しています。プロの方や経験豊富なMT5ユーザーの方のご意見を伺いたいです。私は、インジケータと CEventBaseクラスを書き、インジケータがイベントを生成するようにしました。これらのイベントをすぐに処理するExpert Advisorをリアルタイムで実行すると、エラーが発生します。4001, 4102, 4104.このようなトラブルの元になっているGenerate関数のコードを添付します。ご意見をお聞かせ頂ければ幸いです.)

皆さん、ごきげんよう。

明らかに、提示された方法は乗り換えの方法です。エラーは入っていない可能性が高いです。提示されたデータからは、何が起こっているのかよくわかりません。いくつかのバリエーションがあるかもしれません。

  • チャート識別子が間違っている(4101エラーの内容です)。
  • 問い合わせの頻度が高すぎる。
  • その他のパラメータ(例えばイベントID)が正しくない。

あなたが書いたコードのレベルから判断すると、エラーはいつでもどこでも起こり得ると言えるでしょう。
理由: