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

 

こんにちは。Mt4でフラグを処理するのがしばらくして止まってしまいました。

void OnTimer()
  {
//---
   //-----------------
   int tmeLeftC = PeriodSeconds() - (TimeCurrent()-Time[0]);
   int tmeLeftL = PeriodSeconds() - (TimeLocal()-Time[0]);
   
   
//флаг на вкл отправки   
   if ((sendflag==0) && (tmeLeftC >= 10)) 
      {
         sendflag=1;
      }
      

//Условия на отправку 
///------BAY 
   if ((sendflag==1) && (fNewBar()) && (TimeHour(Time[0]) >= StartH) && (TimeHour(Time[0]) <= EndH) && ((tmeLeftC <= SecondsPrevToServer) || (tmeLeftL <= SecondsPrevToServer)))
      {
         Print("Predict data");
         sendSig();
         Print("Send data");
         sendflag=0;
      }
 
itslek:

こんにちは。mt4でフラグを処理するのがしばらくして止まってしまいました。


タイマーの周波数は100-200msで試してみてください。
500msは1秒を捉えるには無理がある

そして、その数秒後、あるいは1分後にローソク足が開くことがあります。

 
Ivan Ivanov:

試してみてください。

...それとも、本当にexternが必要なのでしょうか?


ありがとうございます。助かっているようです。

inputとexternの違いは何ですか?

 
Taras Slobodyanik:

タイマーの周波数は100-200msで試してみてください。
500msは1秒を捉えるには長すぎる

そして、その数秒後、あるいは1分後にキャンドルが開くこともあります。


ということで、キャッチできていないことが問題なのではありません。何も問題はないんです。

問題は、フラグが機能しなくなり、フラグの条件を無視して500msごとに信号を送るようになったことです。 何が起こっているのか理解できません...。

 
RichLux: inputとexternの違いは何ですか?


 

新しいバーが表示されたときに、バッファをリセットする方法を教えてください。なぜかバッファをゼロにリセットできず、新しいバーが 表示されると、古い蓄積データの上に新しいデータが重なってしまうのです。コードに正しく記述されていないこと。

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
  
   
}
 
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
      Buf_1[0]=0;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }
   
      
   if(Bid > Bid1) 
   {
   V1 = iVolume(NULL, 0, 0);
   V2 = V1 + V2;
   Buf_1[0]= V2;
   }                             
   else 
   {
   V3 = iVolume(NULL, 0, 0);
   V4 = V3 + V4;
   Buf_2[0]= (V4*-1);
   }
   Bid1=Bid;
   
   
  return(rates_total);
}
 
itslek:

ということで、問題は、彼がキャッチしていないことではないのです。何も問題はないのです。

問題は、フラグが機能しなくなり、フラグの条件を無視して500msごとに信号を送信し始めたことです。


ローカルとサーバーを同時に、タイミングが混乱していますね。
こんな感じで、ざっくりと2回目を釣る。

//+------------------------------------------------------------------+
bool NewBar()
{
static bool flag=false;
static int bar=Bars;
static datetime lasttime=0;

if (!flag && Bars!=bar)
   {
   bar=Bars;
   lasttime=TimeLocal();
   flag=true;
   }
if (flag && TimeLocal()-lasttime>=pause) //pause - пауза после начала бара, например 59 сек
   {
   flag=false;
   return(true);
   }
return(false);
}
 

こんにちは、あなたはそれが任意のプログラムまたはタイムフレームを 指定することができますバーデータへの参照であるかどうかに関係なく、この指標のためにiDataに入力する必要がある場合は、教えてください、なぜ他のタイムフレームのデータは、現在の異なるオンタイムフレームのチャートに正しく反映されていないですが、指定したタイムフレームのチャートでのみ、ですか?ありがとうございます。

 

こんにちは、もしかしたら誰かが反応して助けてくれるかもしれません、もう一度やってみます。367ページ 投稿です、そこに全て書いてあります。

 
Novaja:

こんにちは、もしかしたら誰かが反応して助けてくれるかもしれません、もう一度やってみます。こちらの記事、367ページ、 ありますよ。


チェックしてみてください。