初学者的问题 MQL4 MT4 MetaTrader 4 - 页 113

 
你好!!我想做的是:
,我需要我的EA打开所有的订单(卖出和买入),即使它们已经打开了,而且它不会在所有的条件收敛时做,而是在下一个蜡烛上做!请帮助我......,我很感激。

目前,我的代码里有这个。

PHP代码。
void start()
{
if(
NewBar()
{
//算法本身等等
}
}

bool NewBar()
{
static
datetimelastbar=0;
datetime curbar=iTime(Symbol(),0,0);
if(
lastbar!=curbar)
{
lastbar=curbar;
return(
true);
}
return(
false);
}
 
qroner:
void Uchet_Orderov_Function(string _Simvol, int _Magic, int &_Mas[8]){
ArrayInitialize(_Mas, 0)。
int Ticket=-1;
for(int pos=OrdersTotal()-1; pos>=0; pos--){
如果(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Simvol&&)
OrderMagicNumber()==_Magic && OrderTicket()!=Ticket){
Ticket=OrderTicket()。
switch(OrderType()){
case 0:{_Mas[0]++;_Mas[6]++;break;}
case 1:{_Mas[1]++;_Mas[6]++;break;}
case 2:{_Mas[2]++;_Mas[7]++;break;}
case 3:{_Mas[3]++;_Mas[7]++;break;}
case 4:{_Mas[4]++;_Mas[7]++;break;}
case 5:{_Mas[5]++;_Mas[7]++;break;}
}
}
}

}

这里有一个功能。

我只是认为问题不在代码中,因为在标准模式下没有错误。

总之,似乎没有人回答......。

 
qroner:

总之,似乎没有人回答......。

终端告诉你错误在第69行,但你显示的是程序文本,那里的行数较少......。你想怎么回答?
 
qroner: 总之,看起来没有人会回答......。

你发布的函数中似乎没有任何错误。我对使用OrderTicket()!=Ticket来筛出具有相同票据的相邻订单感到困惑。检查并确保没有这样的命令。如果(69,25) 是由编译器指定的,请看第69行的第25位 - 错误就在那里。键入这一行。

 
Vladimir: 终端告诉你错误在第69行,但你显示的程序文本中的行数较少......你想根据什么来回答?

我真的想知道他在69号线上有什么

 

唷,还以为没人反应呢。

这里是代码的这一部分。

66 double Volatility(int _period){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

谢谢你的提示

 
qroner:

唷,还以为没人反应呢。

这里是代码的这一部分。

66 double Volatility(int _period){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

谢谢你的提示。

一切都很清楚。错误在于summ+=MathAbs(High[i]-Low[i])这一行;从边缘开始计算25个位置可能会返回到High[i]。

我写的是Alert(Low[-1]);编译器需要一个正数。我写了int n=-1; Alert(Low[n]); - 当执行Array out of rangre时。但是我怎么会<0呢?也许是缺乏历史数据的缘故吧,检查一下日期间隔,从...到...

 

请告知选择哪个交易商或确切的服务器名称。

 
qroner:

唷,还以为没人反应呢。

这里是代码的这一部分。

66 double Volatility(int _period){

67 double summ = 0;

68 for(int i=1; i<=_period; i++)

69 summ+=MathAbs(High[i]-Low[i])

70 return(NormalizeDouble(summ/_period, Digits))

71 }

谢谢你的提示。

double Volatility(int _period)
  {
    double summ = 0;

    for(int i=1; i<=_period; i++)
        if(ArraySize(High) > i && ArraySize(Low) > i)
           summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }
double Volatility(int _period)
  {
    double summ = 0;
    int src = MathMin(MathMin(_period, ArraySize(High)), ArraySize(Low));

    for(int i=1; i<src; i++)
        summ+=MathAbs(High[i]-Low[i]);

    return(NormalizeDouble(summ/_period, Digits));
 }

似乎_period 的值有时大于数组项目。因此,阵列超限。

选择其中一个选项。

 
下午好!我如何创建一个触发器? 例如,我需要这个条件if(iClose(NULL,HTF,4)<BlueLine)如果它被执行 DayDown = 1 !问:如何将DayDown设为1,并在第二天才轮询?