どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1043

 

もう少し詳しくしっかり記述します。

主な指標は、ユーロドル・ペアにあります。この指標は、金、ドルインデックス、ユーロ通貨の他のペアの指標を呼び出す ものです。このインジケータは1分足で動作し、ドルインデックスに相場がないこともあります。例えば、ユーロには15分足のローソク足があり、ドルインデックスにはそのようなローソク足がない場合、インデックスはフリーズして刻みをつけません。そして、しばらくすると、EURに16分足のローソク足が、USD指数に16分足のローソク足が表示されます。質問は何ですか?インジケーターの計算を同期させ、呼び出されたすべてのシンボルのバーが時間的に一致したときのみカウントされるようにするにはどうすればよいでしょうか。

この構造を試してみました

if((iTime(NULL,0,i)==iTime("XAUUSD",0,i))&&(iTime(NULL,0,i)==iTime("EURJPY",0,i))){

一見クールだが、計算は当日のものだけで、前日のシグナルはない。シンボルの同期については、標準的なソリューションがあるのかもしれませんね。

 
nikelodeon:

もう少し詳しくしっかり記述します。

主な指標は、ユーロドル・ペアにあります。この指標は、金、ドルインデックス、ユーロ通貨の他のペアの指標を呼び出すものです。例えば、ユーロには15分足のローソク足があり、ドルインデックスにはそのようなローソク足がなく、インデックスがフリーズしてティックしないなど、ドルインデックスには相場がないことがあります。そして、しばらくすると、EURに16分足のローソク足が、USD指数に16分足のローソク足が表示されます。質問は何ですか?インジケーターの計算を同期させ、呼び出されたすべてのシンボルのバーが時間的に一致したときのみカウントされるようにするにはどうすればよいでしょうか。

この構造を試してみました

一見クールだが、計算は当日のものだけで、前日のシグナルはない。もしかしたら、シンボルの同期のための標準的なソリューションがあるかもしれませんね?

シンボルのデータを取得するために、ループ内のタイマSymbolInfoTick() で試してみてください。そして、そこにはすでに必要な同期があります。

つまり、現在のシンボルでは、このシンボルのティックが到着したときだけプログラムが開始されるのです。そのため、他のシンボルからの刻みが間に合わなくなります。しかし、ティックと独立して動作するタイマーでは、他のシンボルからティックを取得することができるようになります。

自分以外のシンボルのティックに高速で反応する必要がある場合は、タイマーをミリ秒に設定することができます。

 
artmedia70:
しかも、ひどくぼやけた質問で、自分にしか理解できない。

万歳!!!!ありがとうございました。ハッピーホリデー

あと2点、あなた。1) インジケータを別ウィンドウで削除できる?

2)現在のATRが(H期間の)ATRより高い場合、そのバーの上のATRは、別の色で強調表示されますか? または値は、このバーの上にのみ書き込まれるのでしょうか?

 
kocunyc89:

万歳!!!!ありがとうございました。ハッピーホリデー

あと2点、あなた。1)インジケータを別ウィンドウで削除することは可能ですか?

2)現在のATRがH期間のATRより大きい場合、そのバーの上のATRを別の色でハイライトする機能を追加する? またはそのバーの上だけに値を書き込む?

あらら...ほら、自分で編集して。

//+------------------------------------------------------------------+
//|                                                 iATRwithData.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot ATR
#property  indicator_label1  "ATR"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrDodgerBlue
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//+------------------------------------------------------------------+
//| enums                                                          |
//+------------------------------------------------------------------+
enum enumYN
  {
   enYes=1, // Yes
   enNo=0,  // No
  };
//+------------------------------------------------------------------+
//| input parameters                                                 |
//+------------------------------------------------------------------+
input int      PeriodATR=14;           // ATRs calculation period
int periodATR=(PeriodATR<1)?1:PeriodATR;
sinput enumYN DrawGraphic=enYes;       // Drawing ATR data over the candles
sinput int StartDrawingBar=100;        // Max bar for drawing ATRs data
int startDrawingBar;
sinput int TextSize=5;                 // Text size
sinput color TextColor=clrDodgerBlue;  // Text color
//--- indicator buffers
double         BufferATR[];
string Prefix;
//+------------------------------------------------------------------+
//| Classes                                                          |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferATR);
   
   Prefix="iATRwd("+IntegerToString(periodATR)+")";
   IndicatorSetString(INDICATOR_SHORTNAME,Prefix);
   int bars=Bars(Symbol(),Period());
   startDrawingBar=(StartDrawingBar<1)?1:(StartDrawingBar>bars)?bars:StartDrawingBar;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- delete graphics
   ObjectsDeleteAll(0,Prefix,0);
//---
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if(rates_total<periodATR) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1) limit=rates_total-periodATR-1;
   //---
   for(int i=limit; i>=0; i--) {
      BufferATR[i]=iATR(Symbol(),Period(),periodATR,i);
      if(DrawGraphic && i<startDrawingBar) {
         string tm_txt=TimeToString(time[i],TIME_DATE|TIME_MINUTES);
         string nm=Prefix+"_"+tm_txt;
         string text=IntegerToString(int(BufferATR[i]/Point()));
         string tooltip="ATRs period for candle on "+tm_txt+" is "+text;
         SetArrowText(0,nm,TextColor,text,0,ANCHOR_LOWER,time[i],high[i],"Arial",TextSize,tooltip);
         }
      }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Functions                                                        |
//+------------------------------------------------------------------+
void SetArrowText(long chart_id, string name, color text_color, string text, int sub_window, 
                  long text_anchor, long text_time1, double text_price1, string font="Arial", long font_size=5, 
                  string tooltip="\n", bool selection=false, bool hidden=true) {
   
   if(ObjectFind(chart_id,name)<0) ObjectCreate(chart_id,name,OBJ_TEXT,sub_window,text_time1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_ANCHOR,text_anchor);
   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,font_size);
   ObjectSetString(chart_id,name,OBJPROP_FONT,font);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,text_color);
   ObjectSetInteger(chart_id,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetInteger(chart_id,name,OBJPROP_TIME1,text_time1);
   ObjectSetDouble(chart_id,name,OBJPROP_PRICE1,text_price1);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_id,name,OBJPROP_HIDDEN,hidden);
   ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,tooltip);
}
//+------------------------------------------------------------------+

それとも、私にも全部やってほしいの?

 
artmedia70:

あらら...ここでは、自分でやるのです。

それとも、私が代わりにやってあげましょうか?

ありがとうございました! いい人
 
kocunyc89:
ありがとうございました!親切な方ですね。
どういたしまして。
 
こんばんは、インジケータでバッファデータをメインチャートとサブエンドの2つのウィンドウに表示させることは可能でしょうか?その場合、どのようにすればよいのでしょうか。
 
artmedia70:

どういたしまして。秘密でないなら、なぜプログラムの最終実行時刻を示すタイムスタンプが必要なのか - その中の時刻は変わりません。

単なる好奇心で...

オフラインのティックチャート用です。



 
こんにちは。

2つのMT4ターミナル間で変数を送信するために、どのような機能を使用できますか?可能であれば、ドキュメントへのリンクを追加してください。
 
abeiks 2台のMT4端末間で変数を送信するには、どのような機能がありますか?

int Flags=FILE_WRITE+FILE_TXT+FILE_COMMON;

int Info = FileOpen(fName,Flags)。

FileWrite(Info,What's Up); もう一方の端末で、読みます。FileOpenとF1上のカーソル - ヘルプを見る