MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 103

 
trader781:
eg: 取引が終了するのを待つにはどうすればよいですか?
アレクセイ・ヴィクトロフ
1.オーダーが開かれたら、グローバルレベルまたはスタティックという変数にチケットを書き込み、このオーダーの色が青く なるまで、おっと、比較OrderCloseTime() > 0でクローズされるまで監視します。クローズタイムが0より大きい場合、注文はクローズされます。

2.GOTO演算子への置き換えは、より効率的です。機能については、ドキュメントをお読みください。

何か例を示す方法はないでしょうか?前の取引が終了するのを待つにはどうしたらよいですか?

double Lot = 0.1;      

double loss = 100;  



int start()

  {

  int order;

    if(OrdersTotal()==0)                            

    {                  

      order = OrderSend(Symbol(),OP_BUY,Lot,Ask,1*Point,Ask-loss*Point,Ask+loss*Point);   // Вверх

      order = OrderSend(Symbol(),OP_SELL,Lot,Bid,1*Point,Bid+loss*Point,Bid-loss*Point);    // Вниз

    }



   return(0);

  }

//+------------------------------------------------------------------+

 
DenZell:

何か例を示す方法はないでしょうか?前の取引が終了するのを待つにはどうしたらよいですか?

double Lot = 0.1;      

double loss = 100;  



int start()

  {

  int order;

    if(OrdersTotal()==0)                            

    {                  

      order = OrderSend(Symbol(),OP_BUY,Lot,Ask,1*Point,Ask-loss*Point,Ask+loss*Point);   // Вверх

      order = OrderSend(Symbol(),OP_SELL,Lot,Bid,1*Point,Bid+loss*Point,Bid-loss*Point);    // Вниз

    }



   return(0);

  }

//+------------------------------------------------------------------+

いくつかの選択肢があります。

最もシンプルなのは、一連の動作です。まず、すでに開いている注文で何かをしようとし、次に、開いている注文がなければ、それを設定しようとするのです。

ポジション処理と新規注文の開始を2つの独立したユーザー定義関数に分割します。その後、OnTick()関数で 未決済注文の存在を確認し、得られた結果に応じてどちらかの関数を呼び出します。

言葉にするとこんな感じです。

void OnTick()
{
if(OrdersTotal() > 0)
  открытие();
else
  сопровождение();
}

bool открытие()
{
// здесь код открытия
}

bool сопровождение()
{
// здесь код сопровождения
}
また、OrderCloseTime() > 0 の場合、特定の注文をチェックすることはさらに困難です。

これは、アカウントが提供する場合ですが、より多くの場合、他のExpert Advisorの作業や手動で注文を開くのケースです。
 
は、端末のアカウント履歴の開始日をプログラムで選択することは可能でしょうか?
 
Money_Maker:
端末のアカウント履歴の開始日をプログラムで選択することは可能ですか?
できます。これは、史上初の「6型バランス駆動」での受注となります。この注文の開始時刻が アカウント履歴の始まりとなる。
 
Artyom Trishkin:
できます。今回の受注は、史上初の「6型バランス駆動」での受注となります。
私は履歴の最初の順序を必要としない...履歴は最大で開く...私は特定の日付からの履歴が必要...私はプログラム的に設定します(どうやら、質問は詳細のために合理化されました)。
 
Money_Maker:
私は履歴の最初の順序を必要としない...履歴は、私は特定の日付から履歴を必要とする最大に開かれている...私はプログラム的に設定します(どうやら質問は詳細を犠牲にして合理化されています)。
という答えもあり得ます。

しかし、質問はやはり「流れ作業」なので、その「特定の日」よりもオープン時間が 早い注文は飛ばすべきと言うことになりますね。
 
Artyom Trishkin:
答えは、「できる」ということでもあります。

しかし、質問はまだ "合理化 "のままなので、私は、そのオープン時間は、この "特定の日付 "より早いです注文をスキップする必要があると言うだろう...もちろんそれは私に発生しませんでした...しかし、7年間の注文がたくさんある...
私は日付でフィルタリングすることを本当に考えていませんでした...しかし、7年は非常に多くの注文です...。
スクリーンショットでは、質問に赤い下線が引かれていますが、これは質問が流されていないのでしょうか?
 
Money_Maker:
もちろん、日付でフィルタリングすることは思いつかなかったが......7年間で、多くの注文がある......。
スクリーンショットでは、質問に赤い下線が引かれていて、そこにある日付を入れなければならない...ということは、質問が流されていないのでは?
ご質問の意味がわかりません :(

プログラム的に具体的に何をしたいのか?
 
Artyom Trishkin:
質問の意味がわからない :(

プログラム的に具体的に何をしたいのか?
赤い下線が引かれた部分に日付を入力し、基本的に[OK]をクリックします... レポートの履歴の深さを決定します
 
Money_Maker:
赤い下線が引かれているところに日付を入力し、基本的に[OK]をクリックします。
純粋なmqlでは、プログラム的にできないのです。WinAPIでこのウィンドウと日付を探す必要がありますね。