新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 565 1...558559560561562563564565566567568569570571572...1953 新评论 [删除] 2018.06.10 00:35 #5641 PolarSeaman:你在代码中替换了 至 但这并没有什么帮助)。我很抱歉,你只注意到这一点) [删除] 2018.06.10 00:36 #5642 Alekseu Fedotov:带有SEEK_END标志的FileSeek()将帮助你。<谢谢你!我将试一试。 Alekseu Fedotov 2018.06.10 05:10 #5643 YanSay:晚上好!我在思考如何添加一个通用的(针对不同的工具)代码来计算基于存款百分比的交易手数。我是这样做的。价格(开盘价)和SL(止损)是分开计算的。对于报价货币为美元的货币对(如EURUSD),SPX500指数和黄金--都能正确计算,但对于报价货币为美元的货币对(如USDJPY),则无法工作。请告知我错过了什么?注意规范化 _Digits变量存储小数点后的小数点数目,它决定了当前图表符号的价格精度。 YanSay 2018.06.10 13:33 #5644 Alekseu Fedotov:注意规范化_Digits变量存储了小数点后的小数位数,这决定了当前图表符号价格的准确性。谢谢你!下面是它被重新做的过程。 input double MaximumRisk=0.02; //Риск в сделке от депозита //1ый вариант {Lots = NormalizeDouble(((AccountBalance()*MaximumRisk)/((MathAbs(Price-SL))/Point)/((MarketInfo(Symbol(),MODE_LOTSIZE)*(MarketInfo(Symbol(),MODE_ASK)+Point)) -(MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_ASK)))), int(MathAbs(log(MarketInfo(Symbol(), MODE_LOTSTEP)))));} //2ой вариант {Lots = NormalizeDouble((AccountBalance()*MaximumRisk)/((MathAbs(Price-SL))/Point)/((MarketInfo(Symbol(),MODE_TICKVALUE))), int(MathAbs(log(MarketInfo(Symbol(), MODE_LOTSTEP)))));} 在第一种变体中:EURUSD和XAUUSD - 一切正常;USDJPY - 不是2%的存款,而是0.2%的存款风险;在SPX500和BRN的情况下,产生OrderSend 错误131(手数计算错误)。 在第二种情况下:EURUSD、XAUUSD和USDJPY--一切正常;SPX500的风险是存款的20%而不是2%;对于BRN,它产生OrderSend错误131(手数计算错误)。 在其他地方有一个错误,我不明白在什么地方,请告知。 Vitaly Muzichenko 2018.06.10 20:34 #5645 YanSay:谢谢你!下面是它的重做方式。 第一个版本:EURUSD和XAUUSD - 一切正常;USDJPY - 它的风险是0.2%的存款,而不是2%的存款;另外在SPX500和BRN的情况下,它产生OrderSend错误131(手数计算错误)。在第二种情况下:EURUSD、XAUUSD和USDJPY--一切正常;SPX500的风险是存款的20%,而不是2%;对于BRN,它产生了OrderSend错误131(手数计算错误)。在其他地方有一个错误,我不知道在什么地方,请告知。用MarketInfo(Symbol(),MODE_POINT) 替换Point,。 Konstantin Nikitin 2018.06.10 21:34 #5646 Vitaly Muzichenko:用MarketInfo(Symbol(),MODE_POINT) 替换Point,。这有什么意义呢?如果一切按图表符号计算。如果有一个多变量和与当前图表不同的Symbol 被计算出来,这是有意义的。 YanSay 2018.06.10 21:48 #5647 Vitaly Muzichenko:用MarketInfo(Symbol(),MODE_POINT) 替换Point,。不幸的是,这并没有帮助( MODE_POINT信息说:"报价货币中的点尺寸。它被储存在当前符号的预定义变量 Point中"。 从描述上看,使用哪种变体并不重要。但我试了一下,并没有什么帮助。 Roman Sharanov 2018.06.11 01:53 #5648 你能告诉我是否有可能把图形工具的"选择 "放在专家顾问的按钮上,这样通过点击按钮,工具图标就会出现在光标下,并有可能伸展它? 而且该通道应该已经有了指定的属性 Alekseu Fedotov 2018.06.11 03:27 #5649 Roman Sharanov:你能告诉我,是否有可能将图形工具的"选择 "放在专家顾问的按钮上,这样,一个工具图标就会出现在光标下,并可以通过点击按钮来拉伸?此外,该通道已经可以有指定的属性。也许 Vitaly Muzichenko 2018.06.11 05:23 #5650 YanSay:不幸的是,这并没有帮助( 而在MODE_POINT信息中,写着 "以报价货币为单位的点尺寸。对于当前的符号被存储在预定义的变量 Point"。 从描述上看,使用哪种变体并不重要。但我试了一下,并没有什么帮助。试试这个功能。 //=============================================================================================== //------------------------------ Расчет лота по риску на StopLoss -------------------------------+ //=============================================================================================== double sLot(double Percent=1, double Stloss=100, string symb="0") { if(symb=="0") symb=Symbol(); double TickValue =SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_VALUE), TickSize =SymbolInfoDouble(symb,SYMBOL_TRADE_TICK_SIZE), ContractSize=SymbolInfoDouble(symb,SYMBOL_TRADE_CONTRACT_SIZE), Min_Lot =SymbolInfoDouble(symb,SYMBOL_VOLUME_MIN), Max_Lot =SymbolInfoDouble(symb,SYMBOL_VOLUME_MAX), Step =SymbolInfoDouble(symb,SYMBOL_VOLUME_STEP), Free =AccountInfoDouble(ACCOUNT_FREEMARGIN), Lots_New =0.0; int CalcMode=(int)SymbolInfoInteger(symb,SYMBOL_TRADE_CALC_MODE); if(Percent > 100) Percent = 100; if(Stloss <=0) return(0); if(Percent == 0) Lots_New = Min_Lot; else { if(CalcMode==0 || CalcMode==4) Lots_New = MathFloor((((Free*Percent/100)/Stloss)/TickValue)/Step)*Step; if(CalcMode==1||CalcMode==2||CalcMode==3) Lots_New = MathFloor(((((Free*Percent)/100)/Stloss)/((TickSize*TickValue)*ContractSize/TickValue))/Step)*Step; } if(Lots_New > Max_Lot) Lots_New = Max_Lot; if(Lots_New < Min_Lot) return(0); return(NormalizeDouble(Lots_New,/*LotDigit()*/ 2)); } 1...558559560561562563564565566567568569570571572...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你在代码中替换了
至
但这并没有什么帮助)。
我很抱歉,你只注意到这一点)
带有SEEK_END标志的FileSeek()将帮助你。
<谢谢你!我将试一试。
晚上好!
我在思考如何添加一个通用的(针对不同的工具)代码来计算基于存款百分比的交易手数。
我是这样做的。
价格(开盘价)和SL(止损)是分开计算的。
对于报价货币为美元的货币对(如EURUSD),SPX500指数和黄金--都能正确计算,但对于报价货币为美元的货币对(如USDJPY),则无法工作。
请告知我错过了什么?
注意规范化
_Digits变量存储小数点后的小数点数目,它决定了当前图表符号的价格精度。
注意规范化
_Digits变量存储了小数点后的小数位数,这决定了当前图表符号价格的准确性。
谢谢你!下面是它被重新做的过程。
在第一种变体中:EURUSD和XAUUSD - 一切正常;USDJPY - 不是2%的存款,而是0.2%的存款风险;在SPX500和BRN的情况下,产生OrderSend 错误131(手数计算错误)。
在第二种情况下:EURUSD、XAUUSD和USDJPY--一切正常;SPX500的风险是存款的20%而不是2%;对于BRN,它产生OrderSend错误131(手数计算错误)。
在其他地方有一个错误,我不明白在什么地方,请告知。
谢谢你!下面是它的重做方式。
第一个版本:EURUSD和XAUUSD - 一切正常;USDJPY - 它的风险是0.2%的存款,而不是2%的存款;另外在SPX500和BRN的情况下,它产生OrderSend错误131(手数计算错误)。
在第二种情况下:EURUSD、XAUUSD和USDJPY--一切正常;SPX500的风险是存款的20%,而不是2%;对于BRN,它产生了OrderSend错误131(手数计算错误)。
在其他地方有一个错误,我不知道在什么地方,请告知。
用MarketInfo(Symbol(),MODE_POINT) 替换Point,。
用MarketInfo(Symbol(),MODE_POINT) 替换Point,。
这有什么意义呢?如果一切按图表符号计算。如果有一个多变量和与当前图表不同的Symbol 被计算出来,这是有意义的。
用MarketInfo(Symbol(),MODE_POINT) 替换Point,。
不幸的是,这并没有帮助(
MODE_POINT信息说:"报价货币中的点尺寸。它被储存在当前符号的预定义变量 Point中"。
从描述上看,使用哪种变体并不重要。但我试了一下,并没有什么帮助。
你能告诉我是否有可能把图形工具的"选择 "放在专家顾问的按钮上,这样通过点击按钮,工具图标就会出现在光标下,并有可能伸展它?
而且该通道应该已经有了指定的属性
你能告诉我,是否有可能将图形工具的"选择 "放在专家顾问的按钮上,这样,一个工具图标就会出现在光标下,并可以通过点击按钮来拉伸?
此外,该通道已经可以有指定的属性。
也许
不幸的是,这并没有帮助(
而在MODE_POINT信息中,写着 "以报价货币为单位的点尺寸。对于当前的符号被存储在预定义的变量 Point"。
从描述上看,使用哪种变体并不重要。但我试了一下,并没有什么帮助。
试试这个功能。