需要基于SL和账户风险的资金管理LOT大小公式! - 页 4 1234 新评论 Keith Watford 2015.02.06 02:39 #31 darelco:...在这部分代码中,有一个新的编译问题(错误--->'MarketInfo'---非法切换表达式类型),也许在更新到MT4 build 600+之前都是正常的...但从那时起它就不再工作了。所以,你能不能发布一些更新的版本......当然,如果你还在的话。我想如果你把 switch ( MarketInfo( strSymbol, MODE_DIGITS ) )到 int dig=MarketInfo( strSymbol, MODE_DIGITS ) ; switch ( dig )它就可以编译了 Alain Verleyen 2015.02.06 09:07 #32 darelco:...在这部分代码中,有一个新的编译问题(错误--->'MarketInfo'---非法切换表达式类型),也许在更新到MT4 build 600+之前都是正常的...但从那时起它就不再工作了。所以,你能不能发布一些更新的版本......当然,如果你还在的话。 switch((int)MarketInfo(strSymbol,MODE_DIGITS)) gadget 2015.02.06 10:00 #33 https://book.mql4.com/operators/switch"表达式和参数的值只能是int 类型的值。表达式可以是一个常数,一个变量,一个函数调用,或者一个表达式。 每个变化的'情况'可以由一个整数常数,一个字符常数,或者一个常数表达式来标记。一个常量表达式不能包括变量或函数调用"。 Keith Watford 2015.02.06 11:18 #34 angevoyageur: switch((int)MarketInfo(strSymbol,MODE_DIGITS)) 你再一次提出了一个更简单、更好的解决方案。 Alain Verleyen 2015.02.06 11:39 #35 GumRai: 你又一次想出了一个更简单、更好的解决方案。 我们都在向对方学习。 William Roeder 2015.02.06 13:12 #36 int dig=MarketInfo( strSymbol, MODE_DIGITS ) ; switch ( dig ) 或 switch((int)MarketInfo(strSymbol,MODE_DIGITS)) 或对象风格(除指针转换外,均可使用)。 switch( int(MarketInfo(strSymbol,MODE_DIGITS)) ) Sebastien Pelle 2017.03.05 05:20 #37 在我的不同EA中,它是这样写的。extern double Risk_Percent = 3;extern int StopLoss = 50;//+------------------------------------------------------------------+ { double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) / 100; if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT); if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT); return (MathMin(NormalizeDouble(lot,PipMultiplier),MaxLotSize)); }//+------------------------------------------------------------------+ if(_Digits==5 || _Digits==3)PipMultiplier=10; else PipMultiplier=1; slippage=Slippage*PipMultiplier; if(_Digits<4) { point=0.01; } else { point=0.0001; } return(0);//+------------------------------------------------------------------+ Need moneymanagement LOT size 需要编码方面的帮助 我不能相信 William Roeder 2017.03.05 13:34 #38 Sebastien Pelle: 在我不同的EA中,它是这样写的。 double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) / 自由保证金与你的 风险没有关系。它是你的经纪商 的止损(你账户的50%。)你应该阅读整个主题,而不是发帖。总结一下。 你把止损放在它需要的地方--交易的理由不再有效的地方。例如,交易一个支撑位的反弹时,止损要低于支撑位。 帐户余额*百分比/100=风险=订单手数*(|订单开盘价-订单止损|*DeltaPerLot+佣金PerLot)(注意OOP-OSL包括SPREAD,DeltaPerLot通常为10美元/点左右,但它考虑到了货币对与您帐户货币的汇率。 不要单独使用TickValue -DeltaPerLot 你必须正确地规范手数,并检查最小和最大。 你还必须检查FreeMargin以避免止损。 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...在这部分代码中,有一个新的编译问题(错误--->'MarketInfo'---非法切换表达式类型),也许在更新到MT4 build 600+之前都是正常的...但从那时起它就不再工作了。
所以,你能不能发布一些更新的版本......当然,如果你还在的话。
我想如果你把
switch ( MarketInfo( strSymbol, MODE_DIGITS ) )
到
它就可以编译了
...在这部分代码中,有一个新的编译问题(错误--->'MarketInfo'---非法切换表达式类型),也许在更新到MT4 build 600+之前都是正常的...但从那时起它就不再工作了。
所以,你能不能发布一些更新的版本......当然,如果你还在的话。
https://book.mql4.com/operators/switch
"表达式和参数的值只能是int 类型的值。表达式可以是一个常数,一个变量,一个函数调用,或者一个表达式。 每个变化的'情况'可以由一个整数常数,一个字符常数,或者一个常数表达式来标记。一个常量表达式不能包括变量或函数调用"。
你又一次想出了一个更简单、更好的解决方案。
在我的不同EA中,它是这样写的。
extern double Risk_Percent = 3;
extern int StopLoss = 50;
//+------------------------------------------------------------------+
{
double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) / 100;
if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
return (MathMin(NormalizeDouble(lot,PipMultiplier),MaxLotSize));
}
//+------------------------------------------------------------------+
if(_Digits==5 || _Digits==3)PipMultiplier=10;
else PipMultiplier=1;
slippage=Slippage*PipMultiplier;
if(_Digits<4)
{
point=0.01;
}
else
{
point=0.0001;
}
return(0);
//+------------------------------------------------------------------+
double lot = MathCeil(AccountFreeMargin() * Risk_Percent / 1000) /