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

 
Eugen8519:

このように注文が終了します

上に書いたように...

またはOnTick()のコードを投稿してください。

 
Eugen8519:

このように注文が終了します

この構造は

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(UseTimeLimit)
     {
       YesStop=true;
       MqlDateTime str1;
       TimeToStruct(TimeCurrent() , str1);
       if(str1.hour > startHour && str1.hour < stopHour)
          YesStop=false;
     }
   if(YesStop==false)
     {
      if(EMA0...)
        {
         .....
         OPENORDER("Sell");
        }
   
      if(EMA0...)
        {
         .....
         OPENORDER("Buy");
        }
     }
//---
   if(EMA0...)
     {
      .....
      CLOSEORDER("Sell");
     }

   if(EMA0...) 
     {
      .....
      CLOSEORDER("Buy");
     }
  }
//+------------------------------------------------------------------+
void CLOSEORDER(string ord)
  {
   .....
  }
//---
void OPENORDER(string ord)
  {
   .....
  }
 
ありがとうございます。今晩チェックして、後で報告します。
 
MakarFX:

この構造は

間違っていなければ、次のように書くことができます。

   if(UseTimeLimit)
     {
       YesStop=true;
       MqlDateTime str1;
       TimeCurrent(str1);
       if(str1.hour > startHour && str1.hour < stopHour)
          YesStop=false;
     }
 
Eugen8519:
そうですか、アドバイスありがとうございます。今夜チェックして、後で報告します。

フクロウの起動時の設定でUseTimeLimitが設定されている場合

この関数は、 OnTick()ではなく、OnInit()で使用するのがよいでしょう。

 
Vitaly Muzichenko:

間違っていなければ、このように書くことができます。

実はこんな風に書いているんです。

if(TimeHour(time[i])>=Time_Start&&TimeHour(time[i])<TimeFinish)

或いはもっと単純に

if(Hour()>=Time_Start&&Hour()<TimeFinish)
 

こんにちは、インジケータラインの正しい平均化の方法を教えてください。周期Per_1の基本曲線は、Buffer_2[]で平均化周期Per_ 2の単純平均化のブロックを追加するまでは、普通に描画される(Buffer_1[])。

int OnCalculate(デフォルトパラメータ)

{

int i, j, limit;

if(rates_total <= Per_1)

return(0)です。

//最後に計算したバーを再計算します。

limit = rates_total - prev_calculated - Per_1;

if(prev_calculated > 0)

limit++です。

//calculate and fill in indicator buffers (インジケータ・バッファの計算と充填)

for(i=0; i < limit; i++)

{

//インジケーターのメインラインを 計算する

Buffer_1[i] = 曲線の式

double Sum = 0;

for(j = i; j < Per_2 + i; j++)

{

//平均化ラインを計算する

Sum += Buffer_1[j];

Buffer_2[i] = Sum / Per_2;

}

}

return(rates_total);

}

 
 
Eugen8519:
それが問題で、starthour->stophourのオーダーを開いたり閉じたりしているだけです
また、オープンオーダーは、ストップアワー後にクローズされません。

ストップアワー後の取引はできないため

クローズ前のオープン、トローリングなどのポジション維持のロジックをずっと書き続けてきたんです。ほとんどの場合、他のものを開く前に、すでに開いているものをチェックしなければならないのは事実です。

あなたの論理は正しいので、ブロックを入れ替えるだけでいいのです。

MqlDateTime str;
void OnTick()
 {
 // Close Positions
 TrailingStop();

 if(условие_закрытия)
  {
   ClosePos();
  }

 // Open Positions
 if(UseTimeLimit)
  {
    TimeCurrent(str);
    if(str.hour > startHour && str.hour < stopHour)
     {
      OpesPos(...);
      ...
     }
  }
// end
}
 

カッコイイ!うまくいきました!ありがとうございます。