初学者的问题 MQL5 MT5 MetaTrader 5 - 页 931

 
Vitaliy Sendyaev:

下午好!

你知道如何为市场建立一个指标吗?

我有一个扩展名为.mq5的文件和一些扩展名为.mqh的包含文件。

据我所知,你不能通过资源把.mqh附加到.mqh文件上,我真的应该把所有东西都手动转换为一个文件吗?

如果有一个新的版本怎么办 :?这很疯狂+)))

谢谢。

你把编译好的(.ex5)文件发送给市场。这个文件将已经包含了你所有的包含文件。

 
Vladimir Karputov:

一个反问:"为什么你需要在这里明确地指定一个符号?

如果你使用这个函数,你必须在OnInit中给m_symbol分配一个符号。

在这种情况下,如果你在 "EURUSD.m "符号上运行EA,"EURUSD.m "将自动被设置为m_symbol。

问题是,专家顾问在不同的符号上徘徊。而我需要更新欧元兑美元的报价。

我找到了这个解决方案,但我认为它是错误的

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

问题就在这里,EA在不同的符号上徘徊。而我需要更新欧元兑美元的报价。

我找到了这个解决方案,但我不认为它是正确的

在InInit中为m_symbol写入EURUSD.m符号。或者告诉我你是做什么的,你是怎么做的--当我想玩猜拳的时候。
 

乡亲们,请指教!!。

TimeCurrent()函数 如何将小时和分钟的值传递给变量,以便它们能够与这些值一起工作?

例如,我想用字符串(12:15)传递小时和分钟,并将12和15传递给变量。如何做到这一点?
 
TaywinLannister:

乡亲们,请指教!!。

TimeCurrent()函数 如何将小时和分钟的值传递给变量,以便你可以对这些值进行操作?

例如,我想用字符串(12:15)传递小时和分钟,并将12和15传递给变量。如何做到这一点?

时间到结构

 
Konstantin Nikitin:

时间到结构

谢谢你!
 
你好!我把指标 从Metatrader 4转换 到Metatrader 5,但现在它在分钟时间框架上显示箭头的位置与Metatrader 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:
嗨!我把指标 从metatrader 4转换 到metatrader 5,但现在它在一分钟周期内显示箭头的位置与metatrader 4不同。我是不是在什么地方犯了错误,还是因为一个经纪商的4版和5版终端的分钟图上的报价不同?

在MQL5和MQL4指标中做一个简单的测试 - 打印条形时间#0。

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

这将有助于了解什么是什么。

 
Vladimir Karputov:

在MQL5和MQL4指标中做一个简单的测试 - 打印条形时间#0。

这将有助于了解什么是什么。

OnCalculate 中添加了这个文本,现在酒吧的时间每分钟都在变化,但现在根本没有箭头。可能的错误是什么?

ArraySetAsSeries(time,true); 

   ArraySetAsSeries(open,true); 

   ArraySetAsSeries(high,true); 

   ArraySetAsSeries(low,true); 

   ArraySetAsSeries(close,true); 
 
Yevgen Butov:

在OnCalculate中添加了这个文本,现在酒吧的时间每分钟都在变化,但现在根本没有箭头。可能的错误是什么?

你没有搞清楚。比较打印出来的数值。比较酒吧时间#0和酒吧时间#rates_total-1。比较那里和那里...