新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 991

 
LuckyTrader:
这个错误已经消失了,措辞也一样,现在它已经到了另一个部分。就在上面,我给伊戈尔写信

插入发生错误的打印件,也许你可以通过这种方式解决你的问题。

没有其他办法,我已经解释了你出错的原因。

 

你好,我决定把指标 从MQL4改写 成MQL5,结果卡在了指标缓冲区。我想我已经输入了我需要的所有内容,但指标线仍然没有显示出来!

这里有一个例子,我想显示过去30条的收盘价,我甚至在缓冲区上加了一个注释,看它是否被填满了......

缓冲区在填充,但图表是空的,我没有看到它(()

可能是什么问题呢? 也许MQL5中的条形图是倒过来的?)


//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                                                . |
//|                                                                . |
//+------------------------------------------------------------------+
#property copyright "."
#property link      "."
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 8         // Количество буферов индикатора
#property indicator_plots   8         // Количество графических серий

#property indicator_label1 "TestLine" 
#property indicator_type1 DRAW_LINE  
#property indicator_style1 STYLE_SOLID 
#property indicator_width1 1  
#property indicator_color1 Red  
//+------------------------------------------------------------------+
//|                        БУФЕРЫ                                    |
//+------------------------------------------------------------------+
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];
//+------------------------------------------------------------------+
//|                     ПАРАМЕТРЫ БУфЕРА                             |
//+------------------------------------------------------------------+
int OnInit(){                   

SetIndexBuffer(0,Buffer1,INDICATOR_DATA);
PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);  
PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);         
PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue);   

return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Деинициализация                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
Comment("");}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| 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[]){
                
                
for(int Z = 30; Z>=0; Z--) {
Buffer1[Z] = iClose(NULL,0,Z);} 
Comment(Buffer1[0]);               

return(rates_total);}
//+------------------------------------------------------------------+

 
Nikita Zubarov:

你好,我决定把指标 从MQL4改写 成MQL5,结果卡在了指标缓冲区。我想我已经输入了我需要的所有内容,但指标线仍然没有显示出来!

这里有一个例子,我想显示过去30条的收盘价,我甚至在缓冲区上加了一个注释,看它是否被填满了......

缓冲区在填充,但图表是空的,我没有看到它(()

可能是什么问题呢? 也许MQL5中的条形图是倒过来的?)


在MQL5中,小节的编号是相反的

for(int Z = rates_total-50; Z<rates_total; Z++)


可以使用https://www.mql5.com/ru/docs/array/arraysetasseries 来改变索引。
Документация по MQL5: Операции с массивами / ArraySetAsSeries
Документация по MQL5: Операции с массивами / ArraySetAsSeries
  • www.mql5.com
//| Custom indicator initialization function                         | //| Custom indicator iteration function                              |
 
Igor Makanu:

在MQL6中,小节的编号是相反的


你可以使用https://www.mql5.com/ru/docs/array/arraysetasseries 来改变索引。

谢谢你!,加了一行,就开始正常显示了。

ArraySetAsSeries(Buffer1,true); 
但我认为从右到左,条形图的编号是一样的,只是缓冲区向后退了....。
 
Nikita Zubarov:

谢谢!,加了一行,开始正常显示了!。

但在我看来,条形图的编号从右到左是一样的,只是缓冲区向后退了....。

在4中,0号小节是最右边的小节。

在5中,0号栏是最左边的栏。

默认情况下,指标缓冲区的 索引与时间序列的索引相同。

如果你使用ArraySetAsSeries(),它将只应用于一个数组--在你的例子中是应用于指标缓冲数组Buffer1,为了正确的计算,你也应该应用于关闭。

ArraySetAsSeries(Buffer1,true); 
ArraySetAsSeries(close,true); 
for(int Z = 30; Z>=0; Z--) 
{
Buffer1[Z] = сlose[i];
} 

或按上述方法改变循环

 
你好,请你告诉我,如果我想让我的EA在当前图表以外的符号上开仓
OrderSend(MarketInfo("EURUSD",MODE_ASK), OP_BUY, Lots, Ask, Slip, 0, 0, " ", Magic, 0, Blue)
我是否正确? 如果不正确,请纠正我
 
Averman:
你好,请你告诉我,如果我想让我的EA在当前图表以外的符号上开仓
OrderSend(MarketInfo("EURUSD",MODE_ASK), OP_BUY, Lots, Ask, Slip, 0, 0, " ", Magic, 0, Blue)
我是否正确? 如果不正确,请纠正我

当然这是不对的。

OrderSend("EURUSD", OP_BUY, Lots, MarketInfo("EURUSD",MODE_ASK), Slip, 0, 0, "", Magic, 0, Blue) 
如果我没有在什么地方犯错,那就是你犯错了。但无论如何,其含义应该是可以理解的。
 
MQL6已经出现了,有人测试过这个外壳吗?
 
Seric29:
MQL6已经出现了,有人测试过这个外壳吗?

今天是4月1日吗?

 
Alexey Viktorov:

今天不是4月1日吗?

于是我开始上网搜索))。

...发现一个单页的mql6网站和一个链接到mql5.com的论坛