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

 
Alexey Kozitsyn:
是的,输入参数不能被修改。说实话,我不明白为什么你需要根据3/5位数的报价来改变这个值?你确实在输入参数中设置了这个值。你不能只写100(如果是3/5位数)而不去管吗?

事实上,我在5位数上进行优化--更多的历史,但在4位数上交易,使用不同的设置,包括点数。我不想混淆设置--这就是为什么这是一个解决方案。

 
-Aleks-:

事实上,我在5位数上进行优化--更多的历史,但在4位数上交易,使用不同的设置,包括点数。我不想混淆设置--这就是为什么这是一个解决方案。

它应该像这样工作

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}
 
Vitaly Muzichenko:

这应该是可行的

int Sign = 1;

int OnInit() {
// Округлим огрызки - 3 и 5 знак
Sign=(SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==3 || SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)==5)?10:1;
// Приведем к терминальному количеству знаков
TakeProfit*=Sign;
StopLoss*=Sign;
TrailingShift*=Sign;
TrailingStep*=Sign;
Slippage*=Sign;
}


谢谢 - 只要我能够让EA运行起来,我就会试一试......

 

我也得到了这个错误--如何纠正它?

'MODE_MAIN' - 枚举器标识已经定义 initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

 
-Aleks-:

这样的情况下,我得到了一个错误 - 帮助我理解为什么会出现这个错误 - 在MQL5中,你不能改变用户输入的变量的值?

你不能这样做!

如果你决定使用MQL4_to_MQL5.mqh,我强烈建议你不要这样做。因为它是为例子而写的,那是在图书馆描述中。也就是说,它根本不具有普遍性。特别是,有一个非常有限的MarketInfo版本(只做例子的工作)。但好的解决方案是存在的。因此,最好不要使用这个mqh本身,而只从其中提取有用的东西。

 
-Aleks-:

我也得到了这个错误--如何纠正它?

'MODE_MAIN' - 枚举器标识已经定义 initmql4__1.mqh 223 24


 ENUM_STO_PRICE StoFieldMigrate(int field)


  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+

重新命名。所有枚举器的字段都必须是不同的。而你在枚举ADX_MODE枚举MAIN_SIGNAL_MODE 中有相同的字段。
 
fxsaber:
重新命名。所有枚举的字段都应该是不同的。而你在枚举ADX_MODE枚举MAIN_SIGNAL_MODE 中有相同的字段。

我已经暂时把它评论掉了...我不认为这很关键...

然而,使用两个库编译了一个EA--交易功能 和其他功能的翻译,从4到5。

我仍然对5中的测试器感到厌恶--我找不到可以在可视化中添加指标的地方,也找不到如何过滤日志的方法...

还不能看到公开的订单,嗯。

 

如何解释这一点。

2016.11.04 20:42:25.224 2016.02.11 14:04:30 设置待定时出现不可预见的错误 - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30 Magic=49266773 cPoza::setOrder 发送了一个设置订单的请求。类型:买入止损 lot=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30 买入止损1.00 RTS-12.16 在68180 sl: 67260 tp: 68200 [无效的到期日]
2016.11.04 20:42:25.224 2016.02.11 14:04:30 设置待定时出现不可预见的错误 - 4756

 
-Aleks-:

如何解释这一点。

2016.11.04 20:42:25.224 2016.02.11 14:04:30 设置待定时出现不可预见的错误 - 4756
2016.11.04 20:42:25.224 2016.02.11 14:04:30 Magic=49266773 cPoza::setOrder 发送了一个设置订单的请求。类型:买入止损 lot=1.0 opPrice=68180.0 tp=68200.0 sl=67260.0
2016.11.04 20:42:25.224 2016.02.11 14:04:30 买入止损1.00 RTS-12.16 在68180 sl: 67260 tp: 68200 [无效的到期日]
2016.11.04 20:42:25.224 2016.02.11 14:04:30 设置待定时出现不可预见的错误 - 4756

过期设置有问题。
 
-Aleks-:

到目前为止,我对5个测试器感到厌恶--我找不到在哪里可以将指标添加到可视化中,也找不到如何过滤日志......

还没有办法看到开放的订单,嗯。

我正在使用2006年的MT4转换脚本来查看测试者的历史。它和MT4一样方便地显示一切。