错误、漏洞、问题 - 页 7 1234567891011121314...3184 新评论 Sergey Gritsay 2010.06.14 19:02 #61 FEDOR_MQL:而在这个发展阶段:参数、函数调用 和函数本身是否应该显示编译时错误。如果是这样,为什么?我有错误。是的,它确实由于某种原因显示错误,尽管不应该有任何错误。我请开发人员注意这一点。 我这样改了,没有错误,但当我使用switch开关时,仍然显示错误。 //+------------------------------------------------------------------+ #property copyright "2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //--- input parameters input double Lots=0.1; input bool MM = true; input double Risk = 10.0; double lots; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(MM) lots = LotSon(); //вызов функции LotSon else lots = Lots; } //+------------------------------------------------------------------+ double LotSon() { double LotMin = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); double LotMax = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); double Lot = AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000.0 * Risk; Lot = MathMin(LotMax,MathMax(LotMin,Lot)); if (Lot < LotMin) Lot = LotMin; if (Lot > LotMax) Lot = LotMax; // Вариант первый /* switch(LotStep) { case 0.01: Lot=NormalizeDouble(Lot,2);break; case 0.1 : Lot=NormalizeDouble(Lot,1);break; case 1.0 : Lot=NormalizeDouble(Lot,0);break; } */ // Вариант второй if (LotStep == 0.01)Lot=NormalizeDouble(Lot,2); if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1); if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0); // Вариант третий // if (LotStep == 0.01) Lot=NormalizeDouble(Lot,2); // else if (LotStep == 0.1) Lot=NormalizeDouble(Lot,1); // else if (LotStep == 1.0) Lot=NormalizeDouble(Lot,0); return(Lot); } [删除] 2010.06.14 19:16 #62 sergey1294:是的,的确,由于某些原因出现了错误,尽管应该没有。我请开发人员注意这一点,我重新这样做了,没有错误,但当使用开关 时,仍然出现错误。 switch(LotStep) { case 0.01: Lot=NormalizeDouble(Lot,2);break; case 0.1 : Lot=NormalizeDouble(Lot,1);break; case 1.0 : Lot=NormalizeDouble(Lot,0);break; } 你必须以int形式发送手数,即0.01=1000,0.10=10000...... Sergey Gritsay 2010.06.14 19:31 #63 Interesting:手数应在此以int形式发送,即0.01=1000,0.10=10000...... 根据你的说法,事实证明,函数 SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); 返回1000,而不是0.01 [删除] 2010.06.14 19:39 #64 sergey1294: 所以你是说,函数 返回值为1,000,而不是0.01。不,我的意思是,如果代码看起来像这样,错误就会消失。 switch(StepSize) { case 1000: Lot=NormalizeDouble(Lot,2);break; case 10000: Lot=NormalizeDouble(Lot,1);break; case 100000: Lot=NormalizeDouble(Lot,0);break; } Sergey Gritsay 2010.06.14 19:41 #65 现在才注意到,在 switch 不能使用双精度数字,那么在这种情况下就不能使用这个选项。 [删除] 2010.06.14 19:44 #66 sergey1294: 现在才注意到,在 不能使用双精度数字,那么在这种情况下就不能使用这个选项。 如果你事先把很多东西转换为int,你就可以。正如我上面所说的... Sergey Gritsay 2010.06.14 19:46 #67 问题是,为什么不能使用这种设计? if (LotStep == 0.01)return(NormalizeDouble(Lot,2)); if (LotStep == 0.1) return(NormalizeDouble(Lot,1)); if (LotStep == 1.0) return(NormalizeDouble(Lot,0)); FEDOR_MQL 2010.06.14 20:28 #68 Interesting: 如果你把地段转换为int,你可以这样做。我在上面所说的... 如果你不介意的话,我可以看看代码吗?我试过各种方法,但都不奏效。 我不知道以证券的百分比来增加风险是否更容易。谢谢你! [删除] 2010.06.14 20:36 #69 FEDOR_MQL: 如果你不介意的话,我可以看看代码吗?我试过各种方法,但都不奏效。 我不知道是否有其他简单的变体,只是在EA中加入存款百分比的风险。谢谢你!这取决于你需要什么结果。 例如,在这里,我给出了一些关于风险计算的有趣函数而要使这段代码工作,你只需要将手数乘以100000,并将其作为参数(int类型的 变量)送入switch(StepSize)。PS而且总的来说,说实话,我不太理解所有这些变体的目的?我的意思是,在这个函数的背景下,最后的一个....,就足够了。 FEDOR_MQL 2010.06.14 20:57 #70 Interesting: 这取决于你想在最终结果中得到什么,这里,例如,我给出了一些关于风险的有趣函数 为了使这段代码工作,你只需要将lot乘以100000,然后作为一个参数(int类型的 变量)传给switch(StepSize)。 你的文章是我认为我需要的。谢谢 1234567891011121314...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
而在这个发展阶段:参数、函数调用 和函数本身是否应该显示编译时错误。如果是这样,为什么?我有错误。
是的,它确实由于某种原因显示错误,尽管不应该有任何错误。我请开发人员注意这一点。 我这样改了,没有错误,但当我使用switch开关时,仍然显示错误。
是的,的确,由于某些原因出现了错误,尽管应该没有。我请开发人员注意这一点,我重新这样做了,没有错误,但当使用开关 时,仍然出现错误。
你必须以int形式发送手数,即0.01=1000,0.10=10000......
手数应在此以int形式发送,即0.01=1000,0.10=10000......
返回1000,而不是0.01
所以你是说,函数
返回值为1,000,而不是0.01。
不,我的意思是,如果代码看起来像这样,错误就会消失。
switch
不能使用双精度数字,那么在这种情况下就不能使用这个选项。现在才注意到,在
不能使用双精度数字,那么在这种情况下就不能使用这个选项。
如果你把地段转换为int,你可以这样做。我在上面所说的...
如果你不介意的话,我可以看看代码吗?我试过各种方法,但都不奏效。
我不知道以证券的百分比来增加风险是否更容易。谢谢你!
如果你不介意的话,我可以看看代码吗?我试过各种方法,但都不奏效。
我不知道是否有其他简单的变体,只是在EA中加入存款百分比的风险。谢谢你!
这取决于你需要什么结果。 例如,在这里,我给出了一些关于风险计算的有趣函数
而要使这段代码工作,你只需要将手数乘以100000,并将其作为参数(int类型的 变量)送入switch(StepSize)。
PS
而且总的来说,说实话,我不太理解所有这些变体的目的?我的意思是,在这个函数的背景下,最后的一个....,就足够了。
这取决于你想在最终结果中得到什么,这里,例如,我给出了一些关于风险的有趣函数
为了使这段代码工作,你只需要将lot乘以100000,然后作为一个参数(int类型的 变量)传给switch(StepSize)。