初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 931

 
Vitaliy Sendyaev:

こんにちは。

マーケット用のインジケーターの作り方をご存知ですか?

拡張子が.mq5のファイルと、拡張子が.mqhのインクルードファイルがあります。

私が理解する限り、リソース経由で.mqhファイルを添付することはできません、私は本当に手動ですべてを1つのファイルに変換する必要がありますか?

新しいバージョンがあったらどうしよう :?クレイジーです +)))

ありがとうございます。

コンパイルした(.ex5)ファイルをマーケットに送ります。このファイルには、すでにすべてのインクルードファイルが含まれています。

 
Vladimir Karputov:

なぜ、ここでシンボルを明示的に割り当てる必要があるのか」という反論があります。

この関数を使用する場合、OnInitでm_symbolにシンボルを割り当てる必要があります。

この場合、「EURUSD.m」のシンボルでEAを実行すると、「EURUSD.m」が自動的にm_symbolにセットされます。

Expert Advisorが別のシンボルにホバーリングしていることです。そして、EURUSD.m のクォートを更新する必要があります。

私はこの解決策を見つけたが、私はそれが間違っていると思う。

void OnTick()
  {   
// Обновляем котировки
    if(!m_symbol.Name("EURUSD.m")) //Обновляем котировки по второму символу
    RefreshRates();
    if(!m_symbol.Name("GBPUSD.m")) //Обновляем котировки по символу где висит советник
    RefreshRates();
 
EgorKim:

それが、EAが違うシンボルにホバリングしているんです。そして、EURUSD.m のクォートを更新する必要があります。

私はこの解決策を見つけたが、私はそれが正しいとは思わない。

InInitでm_symbolにEURUSD.msymbolを 書き込む。あるいは、あなたが何をどのように行っているのか、教えてください。
 

皆さん、アドバイスお願いします!!!

TimeCurrent()関数で 時間と分の値を変数に渡して、これらの値で動作できるようにするにはどうしたらよいでしょうか。

例えば、時間と分を文字列(12:15)で渡して、変数に12と15を渡したい場合です。どうすればいいのか?
 
TaywinLannister:

皆さん、アドバイスお願いします!!!

TimeCurrent()関数で 時間と分の値を変数に渡して、これらの値を操作できるようにするにはどうしたらよいでしょうか。

例えば、時間と分を文字列(12:15)で渡して、変数に12と15を渡したい場合です。どうすればいいのか?

TimeToStruct

 
Konstantin Nikitin:

TimeToStruct

ありがとうございました。
 
こんにちは!メタトレーダー4からメタトレーダー5にインジケータを変換 したのですが、分タイムフレームでメタトレーダー4のように間違った場所に矢印が表示されるようになりました。どこかで間違えたのか、それともあるブローカーのターミナルの4版と5版で分足チャートの相場が違うからなのか?
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_color1  clrBlue
#property indicator_color2  clrRed

#property indicator_width1  1 
#property indicator_width2  1 
//+------------------------------------------------------------------+

double     SignalBufferRed[];
double     SignalBufferBlue[];
datetime TimeAlert=0;
ENUM_TIMEFRAMES tf0,tf1,tf2,tf3,tf4,tf5; // Было инт
int S=0;
//+------------------------------------------------------------------+
int OnInit()
  {
  
    SetIndexBuffer(0,SignalBufferBlue);
    SetIndexBuffer(1,SignalBufferRed); 
//--- задать рисование линии 
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ARROW); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger(0,PLOT_ARROW,233); 
   //--- задать рисование линии 
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_ARROW); 
//--- задание стиля для рисования линии 
   PlotIndexSetInteger(1,PLOT_ARROW,234); 
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,5); 
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-5); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); 
   //--- установим в качестве пустого значения 0 
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0); 





   tf0=Period();
   tf1=next_period(tf0+1);
   tf2=next_period(tf1+1);
   tf3=next_period(tf2+1);
   tf4=next_period(tf3+1);
   tf5=next_period(tf4+1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
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[])
  {
   int i,limit;

   limit=rates_total-prev_calculated-1;
   if(rates_total<1) return(0);
   double d=(high[1]-low[1]+high[2]-low[2])/2;
   for(i=limit; i>=0; i--)
     {
      if(S<1 && NormalizeDouble(open[i]-close[i],_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)<0 && 
         NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)<0)
        {
         SignalBufferBlue[i]=low[i]-d;
...
         S=1;
        }
      if(S>-1 && NormalizeDouble(open[i]>close[i],_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))-iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))-iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))-iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))-iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)),_Digits)>0 && 
         NormalizeDouble(iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))-iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false)),_Digits)>0)
        {
         SignalBufferRed[i]=high[i]+d;
...
         S=-1;
        }
     }

   return(rates_total);
  }
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES next_period(int per) // Было инт
  {
   if(per > PERIOD_W1)  return(PERIOD_MN1);  // Былы цифры вместо период_
   if(per > PERIOD_D1)   return(PERIOD_W1);   // Былы цифры вместо период_
   if(per > PERIOD_H4)    return(PERIOD_D1);  // Былы цифры вместо период_
   if(per > PERIOD_H1)     return(PERIOD_H4);  // Былы цифры вместо период_
   if(per > PERIOD_M30)     return(PERIOD_H1);  // Былы цифры вместо период_
   if(per > PERIOD_M15)     return(PERIOD_M30);   // Былы цифры вместо период_
   if(per >  PERIOD_M5)     return(PERIOD_M15);  // Былы цифры вместо период_
   if(per >  PERIOD_M1)     return(PERIOD_M5);  // Былы цифры вместо период_
   if(per == PERIOD_M1)     return(PERIOD_M1);  // Былы цифры вместо период_
   return(Period());
  }
//+------------------------------------------------------------------+
 
Yevgen Butov:
こんにちは!メタトレーダー4からメタトレーダー5に変換した のですが、分足でメタトレーダー4のように矢印が間違った場所に表示されるようになりました。どこかで間違えたのか、それともあるブローカーのターミナルの4版と5版で分足チャートの相場が違うからなのか?

MQL5とMQL4のインジケーターで簡単なテストをしてください - バータイム#0を表示します。

Print("Bar #0: ",time[0]);

そうすることで、何がどうなっているのか...を理解することができます。

 
Vladimir Karputov:

MQL5とMQL4のインジケーターで簡単なテストをしてください - バータイム#0を表示します。

そうすることで、何がどうなっているのか...を理解することができます。

OnCalculateに このテキストを追加し、バータイムが1分ごとに変わるようになりましたが、矢印が全く表示されなくなりました。何がエラーになるのでしょうか?

ArraySetAsSeries(time,true); 

   ArraySetAsSeries(open,true); 

   ArraySetAsSeries(high,true); 

   ArraySetAsSeries(low,true); 

   ArraySetAsSeries(close,true); 
 
Yevgen Butov:

OnCalculateにこのテキストを追加し、バータイムが1分ごとに変化するようになりましたが、現在は全く矢印がありません。何がエラーになるのでしょうか?

うまくいかなかったんですね。印刷された 値を比較する。バータイム#0とバータイム#rates_total-1を比較します。あそことあそこの両方を比べてみてください...

理由: