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

 

这是个什么样的错误呢?我从DC的角度来看,是一个糟糕的锻炼?

2017.07.12 12:42:48.493 '1234885286': order #247632722 sell 0.02 EURAUD closing at 1.49721 failed [Trade timeout]
 
Vitaly Muzichenko:

我认为这是个什么样的错误,我从特区方面的不良汇报中得知?

128

err_trade_timeout

超时过期


件的处理程序。

    case 128:
      str="Истек срок ожидания совершения сделки.";
      if(detailed) str=::StringConcatenate(str, "\n", "Прежде, чем производить повторную",
                 " попытку (не менее, чем через 1 минуту), необходимо убедиться,",
                 " что торговая операция действительно не прошла (новая позиция",
                 " не была открыта, либо существующий ордер не был изменён или",
                 " удалён, либо существующая позиция не была закрыта).");
      break;
 
Artyom Trishkin:

128

err_trade_timeout

交易执行的超时时间过期


件的处理程序。

我的代码中有这些错误处理程序,但它们从未存在过。 今天我决定在一家流行的经纪公司的演示中检查我的程序,并首次面临这样的错误。

我正确的理解是这是经纪公司的硬件问题,而不是我这边的问题?

 

请告诉我这个函数是否正确。 我的想法是计算在一定数量的以前的蜡烛中,价格是否突破了平均价格。

该函数根本没有被执行,结果应该是:如果它没有被破坏,returnToMA ==1,如果它被破坏,returnToMA ==0。

也许这个问题有别的解决办法?


returnToMA = MAtouch(TRADE_TF2,TRADE_TF2_MA,barscount)

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

如果(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i) ){return(0);break; }

如果(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i){return(0);break; }

否则返回(1)。

}

 
forexpipsrunner:

请告诉我这个函数是否正确。 我的想法是计算在一定数量的以前的蜡烛中,价格是否突破了平均价格。

该函数根本没有被执行,结果应该是:如果它没有被破坏,returnToMA ==1,如果它被破坏,returnToMA ==0。

也许这个问题还有其他解决办法?

你的函数将总是有零,因为最大或最小值总是大于/小于或等于MA。

在你的情况下,烛台必须由至少两个参数来描述。

1)确定蜡烛图的开盘位置--在MA之上或之下

2.根据1,检查MA是否被触及。

 
-Aleks-:

在函数中你将总是有零--因为最大或最小值总是大于/小于或等于MA。

在你的情况下,烛台必须由至少两个参数来描述。

1.确定蜡烛图的开盘位置--高于或低于MA值

2.根据1,检查MA是否被触及。

谢谢你。我添加了条件,但它总是返回1,我可以在某个地方改变括号吗? 或者断裂不起作用,函数通过将返回值赋值为1而终止。


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

{return(0);break; }

如果( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break; }

else return(1);

}

 
forexpipsrunner:

谢谢。我添加了条件,但它总是返回1,我可以在某个地方改变括号吗? 或者断裂不起作用,函数通过将返回值赋值为1而终止。


int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4, int tradema=10, int bars=100)

{

for(i=0;i<=bars;i++)

{

if( iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

{return(0);break; }

如果( iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)

&&iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))

{return(0);break; }

else return(1);

}


试试这样的方式

int MAtouch(ENUM_TIMEFRAMES tfpricereturnafterbreak=PERIOD_H4,int tradema=10,int bars=100)
  {
   int x=0;
   for(int i=0;i<=bars;i++)
     {
      if(iLow(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}

      if(iHigh(Symbol(),tfpricereturnafterbreak,i)>=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i)
         && iOpen(Symbol(),tfpricereturnafterbreak,i)<=iMA(Symbol(),tfpricereturnafterbreak,tradema,0,MODE_EMA,PRICE_WEIGHTED,i))
        {x=1;break;}
     }
   return(x);
  }

如果满足条件,它将返回1--有一个交叉点--这不正是我们想要的吗?

 
-Aleks-:

试试这个

如果条件得到满足,它将返回1--有一个交叉点--这不正是我们想要的吗?

谢谢你,用你的版本的代码,它像时钟一样工作。
 
forexpipsrunner:
谢谢你,用你的版本的代码,它像时钟一样工作。

很高兴能提供帮助。
 

下午好!

伙计们,你们能否告诉我,你们能否以编程方式在图表上 显示该指标?还是只能手动?

如果是这样,是什么命令?

原因: