文章 "EA 交易中的限制和验证" - 页 2

 

谢谢。

 
double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

SYMBOL_VOLUME_LIMIT' - 未声明的标识符.............

SymbolInfoDouble'--没有一个重载可以应用于函数调用.............

只有我吗?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
gumgum:

SYMBOL_VOLUME_LIMIT' - 未声明的标识符.............

SymbolInfoDouble'--没有一个重载可以应用于函数调用.............

只有我吗?

只要新版本发布,一切都会变得正常。我们正在等待新版本的发布。
 
Rosh:

你能做到吗?

lot_max=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
 

还有一个关于SeriesInfoInteger() 函数的问题。

在创建主题"AccountInfo...信息相关性"时,我了解到有些函数使用 "缓存在软件环境中 "的数据,而有些函数总是 "直接访问实际数据"。

SeriesInfoInteger() 函数属于哪一类函数?

 

CheckVolumeValue 函数中使用了以下代码:

int ratio=(int)MathRound(volume/volume_step);

if(MathAbs(ratio*volume_step-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

volume_step,ratio*volume_step);

return(false);

}

但它更正确:

int ratio = (int)MathRound((volume-min_volume)/volume_step);

if (MathAbs(ratio*volume_step+min_volume-volume)>0.0000001)

{

description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f",

  volume_step,ratio*volume_step+min_volume);

return(false);

}

因为体积变化的最小步长 必须从最小值开始计算。

 

也许代码段

//--- вычислим значение маржи

bool check=OrderCalcMargin(type,Symbol(),lots,last_tick.ask,margin);

应替换为

//--- вычислим значение маржи

double price = (type == ORDER_TYPE_BUY || type == ORDER_TYPE_BUY_LIMIT || type == ORDER_TYPE_BUY_STOP || type == ORDER_TYPE_BUY_STOP_LIMIT) ? last_tick.ask : last_tick.bid;

bool check=OrderCalcMargin(type,Symbol(),lots,price,margin);

[删除]  
为方便起见,所附源代码 文件和 HTML 代码中的源代码插页现已全部翻译成葡萄牙语。
MQL5.community - User Memo
MQL5.community - User Memo
  • 2010.02.25
  • MetaQuotes Software Corp.
  • www.mql5.com
You have just registered and most likely you have questions such as, "How do I insert a picture to my a message?" "How do I format my MQL5 source code?" "Where are my personal messages kept?" You may have many other questions. In this article, we have prepared some hands-on tips that will help you get accustomed in MQL5.community and take full advantage of its available features.
 
Rashid Umarov:

由于 MQL5 中的更改,现在一个符号允许的最大总体积可通过以下方式获得:

请勿使用旧版本! 原来是这样的:

文章已更正,并附上了新的Check_Order_And_Volume_Limits.mq5 专家代码。

亲爱的管理员

我尝试使用此函数,但在所有情况下都返回 0。

我的 MT5 版本是 2280

 
double orders_volume_on_symbol=PendingsVolume(symbol);


出现错误,没有此类函数

我修改函数使其不包括挂单后,结果是 0


double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- 获取对订单最大交易量的限制
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- 用符号获取体积限制
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- 按一个符号获取未平仓合约的交易量
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- 如果我们已经使用了可用容量
      if(max_volume-opened_volume<=0)
         return(0);

      //--- 开仓量不超过 max_volume
      //double orders_volume_on_symbol=PendingsVolume(symbol);
      //allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
      allowed_volume=max_volume-opened_volume;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

这是因为最大交易量为 0,开仓交易量为 0;

如果没有未结头寸,为什么最大交易量为 0?

第 2715 版

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5