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

 
PolarSeaman:

自分で思いついたわけではありませんが、「OnTimer()のデータを更新すれば、あなたのコードが 動作するようになりますよ。"

どうすればいいのでしょうか?

オフラインのスケジュールはありますか?

 
フクロウがホバリングしている時間枠以外の時間枠から、一番下の指標を取得する方法を教えてください。
 
Galim_V:
フクロウがホバリングしている時間枠以外の時間枠からボトム指標を取得する方法を教えていただけませんか?

1.なぜ、鳥を吊るしたのですか?残念ではありませんか?

2.ヘルプを開いたことがありますか?インジケータデータの受信関数の最初の2つのパラメータは、値を受信したいチャートの シンボルと期間を指定するために使用されるので、Expert Advisorで任意の時間枠からインジケータデータを受信することは全く問題ではありません。

確かに、エディタでコードを入力しても、関数の形式変数のリストが開かれ、そこにシンボルとタイムフレームがツールチップで表示されます。注意しないのはおかしい。

 
Artyom Trishkin:

オフラインのスケジュールはありますか?

いいえ。

 
PolarSeaman:

いいえ。

では、なぜ必要もないのにリフレッシュし続けるのでしょうか?

時間が必要ですか?最後のティックの時刻を取得する:TimeCurrent()、または最後のローカル時刻を 取得する:TimeLocal()。

週末に最後の時刻を取得した場合、タイマーは役に立ちません。時刻は金曜日の最後の時刻、または最終営業日の最後の時刻となります。また、TimeLocal() ではサーバー時刻を取得できないため、オフセットを指定して再計算する必要があります。

しかし、最終的に何を手に入れたいのかがよくわからない。

 
Artyom Trishkin:

1.なぜ、鳥を吊るしたのですか?残念ではありませんか?

2.ヘルプを開いたことがありますか?インジケータデータの受信関数の最初の2つのパラメータは、値を受信したいチャートの シンボルと期間を指定するために使用されるので、Expert Advisorで任意の時間枠からインジケータデータを受信することは全く問題ではありません。

確かに、エディタでコードを入力しても、関数の形式変数のリストが開かれ、そこにシンボルとタイムフレームがツールチップで表示されます。注意しないのはおかしい。

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Rounding 44.53781512605145 45.0 これは「通常」モードでのストキャスティックデータです。

2=iStochastic(NULL,0,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

ここで、M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2) と聞いています。

2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Rounding 0.0 0.0を取得しました。



 
Artyom Trishkin:

しかし、最終的にどうしたいのかがよくわからない。

バーが閉じる2秒前にアラート、欲しい。週末は仕事をしない。

 
PolarSeaman:

そこで、ティックなしでバーが閉じる2秒前にアラートを出す必要があります。

より正確なタイマー(最低500ms)を動作させ、ローカルタイムとサーバータイムの同期をとる必要があります。
すでにお話したとおりです。

ティック到着時に、TimeCurrent()-TimeLocal()
の差をカウントする(これはローカルとサーバーの時刻を同期させるために一度だけ行われる)。

- これはブローカーからの相対的なオフセットで、このオフセットが後で変更された場合、時間は再計算される必要があります。
- エキスパートアドバイザーの開始時(またはバーD1の出現時)に、オフセットを考慮したローカル時間で、必要な時間をすべて再計算 します。
- 非同期化、ブローカーとの接続の喪失、ローカルハンドの翻訳をチェックしながら、タイマーで「カウント」したものを待ちます。

1秒単位でキャッチできる
 
Taras Slobodyanik:

より正確なタイマー(少なくとも500ms)を実行し、ローカルタイムとサーバータイムを事前に同期させる必要があるため、簡単にはいきません。
すでにお話したとおりです。

キャッチできるのは±1秒

ありがとうございます。M5バーが閉じるまでの、秒単位の時間の作り方。今はH1が表示されています。

#property strict
#property indicator_chart_window
//--- input parameters
#define  MILLISEC_TIMER_INTERVAL         500 
int            timeOffset;
datetime       ServerLocalOffset;
datetime       prevTime,myTime,localtime;
bool           newBar = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
   
  datetime srvtime,tmpOffset;
   RefreshRates();
   srvtime = TimeCurrent();
   // Modified
   localtime = TimeLocal()+TimeGMTOffset();
   if(TimeHour(srvtime)>TimeHour(localtime)){
      // Server Time is still ahead of us
      int newOffset = TimeHour(srvtime)-TimeHour(localtime);
      ServerLocalOffset = (newOffset*60*60);
   }else if(TimeHour(srvtime)<TimeHour(localtime)){
      // Server Time is Behind us
      int newOffset = TimeHour(localtime)-TimeHour(srvtime);
      ServerLocalOffset = (newOffset*60*60);
   }else{
      // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   if(tmpOffset < 30 && tmpOffset >= 0){
      timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   }
   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
 sec=Time[0]-localtime-timeOffset;
 if(sec<=2){Alert("время откр. бара ",Time[0]);}
      Comment(TimeToStr(sec,TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
現在の期間のバーが閉じるまでの秒数をカウントする方法がまだわかっていません。助けてください。