错误、漏洞、问题 - 页 2020 1...201320142015201620172018201920202021202220232024202520262027...3184 新评论 fxsaber 2017.10.05 04:14 #20191 Kirill Belousov:在计算保证金时,OrderCalcMargin函数没有将开盘价考虑在内这是一个错误,还是应该是这样?当然是这样。写入SD。Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1)));这一行的工作是应该的,但我不得不检查,因为我必须猜测执行的顺序。关于这一点的讨论在此 进行。 Kirill Belousov 2017.10.05 04:59 #20192 fxsaber:当然,是一个错误。写入SD。这一行的工作是应该的,但我不得不检查,因为我必须猜测执行的顺序。关于这一点的讨论在这里。Print()中计算表达式的顺序是由右至左。算是吧...到目前为止...还事先检查了一下 :)当MQL4/5的参考文献中存在直接 的矛盾时,很难确定。MQL5参考语言基础 知识函数参数传递注意事项记住,参数是倒着传给函数 的,也就是说,最后一个参数先被计算和传递,然后是倒数第二个,以此类推。开头括号后的第一个参数被计算出来,最后传给函数。MQL5参考语言基础 知识操作和表达式其他操作带有参数x1, x2,..., xn的函数调用每个参数可以是一个常数、一个变量或一个相应类型的表达式。传递的参数用逗号隔开,必须用圆括号括起来,开头的圆括号必须在函数名之后。表达式的值是由函数返回的值。如果一个函数的返回值类型是无效的,函数调用不能放在赋值操作的右边。请注意,表达式x1,...,xn的顺序 是有保证的。到目前为止,我专注于以相反的顺序传递参数。 Alexey Viktorov 2017.10.05 05:01 #20193 Kirill Belousov:一个关于OrderCalcMargin的问题出现在一个相邻的主题中https://www.mql5.com/ru/forum/216697/page3测试:让我们检查一下通过替代不同的开盘价 来计算存款的2种不同方式。这里是LOGOrderCalcMargin函数在计算保证金时不考虑开盘价这似乎与所报货币的汇率有关,必须为时间和开盘价重新计算。如果报价货币是美元(而账户货币也是美元),那么计算出的保证金将根据开盘价变化。英镑兑美元的日志它是一个错误还是应该是一个错误?可能应该是这样,因为澳元兑美元和美元兑日元特别参与了计算,而且它们的报价在计算时是不变的。现在,这种想法使我想检查...在MetaQuotes-Demo账户的市场概览中,GBPUSD是存在的,但在robo账户中没有。 Kirill Belousov 2017.10.05 05:07 #20194 Alexey Viktorov:一定是这样,因为特别是澳元兑美元和美元兑日元参与了计算,而且它们的报价在计算时是没有变化的。现在,这种想法使我想检查...在MetaQuotes-Demo账户中存在GBPUSD,但在Robo账户中没有...只是想告诉你--有一个错误。我已经复制了你的情况,在OrderCalcMargin 计算中Margin=0。只是还没有发布。 fxsaber 2017.10.05 05:23 #20195 Alexey Viktorov:在MetaQuotes-Demo账户中,GBPUSD出现在Market Watch中,但在Robo账户中没有...很可能存在于市场观察(不要与一般的符号列表相混淆),但没有显示。 Kirill Belousov 2017.10.05 05:33 #20196 Alexey Viktorov:一定是这样,因为特别是澳元兑美元和美元兑日元参与了计算,而且它们的报价在计算时是不变的。现在,这种想法使我想检查...在MetaQuotes-Demo账户的市场概览中,GBPUSD是存在的,但在robo账户中没有。这里是测试。#define TOSTRING(A) #A+" = "+(string)(A) void OnStart() { double margin_1=999,price_1; Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print(TOSTRING(price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print(TOSTRING(price_1=10.0)); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print(TOSTRING(price_1=1.0)); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); Print("price_1= ",price_1," margin_1= ",NormalizeDouble(margin_1,8)," ",TOSTRING(MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1))); //выведем признак выбранности мажоров Print(TOSTRING(SymbolInfoInteger("GBPUSD",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("USDJPY",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("USDCAD",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("AUDUSD",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("NZDUSD",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("USDCHF",SYMBOL_SELECT))); Print(TOSTRING(SymbolInfoInteger("EURUSD",SYMBOL_SELECT))); for(int i=SymbolsTotal(false)-1;i>=0;i--) { //проверим для каждого символа брокера ситуацию, когда OrderCalcMargin()==true, а маржа=0 if(OrderCalcMargin(ORDER_TYPE_BUY,SymbolName(i,false),0.1,SymbolInfoDouble(SymbolName(i,false),SYMBOL_ASK),margin_1)==true && margin_1==0) { Print(TOSTRING(SymbolName(i,false))," ",TOSTRING(margin_1)," "); } } } // Альтернатива OrderCalcMargin bool MyOrderCalcMargin(const ENUM_ORDER_TYPE action,const string symbol,const double volume,const double price,double &margin) { double MarginInit,MarginMain; const bool Res=SymbolInfoMarginRate(symbol,action,MarginInit,MarginMain); margin=Res ? MarginInit*price*volume*SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE)/ (SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE)*AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0; return(Res); }1.在MarketWatch中选择十字星,隐藏所有带有美元的东西2)添加DSHBTC符号并打开其图表。3.关闭终端4) 打开终端5.让我们开始测试DSHBTC这里是LOG。JM 0 09:26:05.485 test (DSHBTC,H1) price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 0.07183 QK 0 09:26:05.487 test (DSHBTC,H1) price_1= 0.07183 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true KO 0 09:26:05.487 test (DSHBTC,H1) price_1= 0.07183 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true QN 0 09:26:05.487 test (DSHBTC,H1) price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 0.07079000000000001 NJ 0 09:26:05.487 test (DSHBTC,H1) price_1= 0.07079000000000001 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true HO 0 09:26:05.487 test (DSHBTC,H1) price_1= 0.07079000000000001 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true LL 0 09:26:05.487 test (DSHBTC,H1) price_1=10.0 = 10.0 EE 0 09:26:05.487 test (DSHBTC,H1) price_1= 10.0 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true QF 0 09:26:05.487 test (DSHBTC,H1) price_1= 10.0 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true HD 0 09:26:05.487 test (DSHBTC,H1) price_1=1.0 = 1.0 EN 0 09:26:05.487 test (DSHBTC,H1) price_1= 1.0 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true OM 0 09:26:05.487 test (DSHBTC,H1) price_1= 1.0 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true EN 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(GBPUSD,SYMBOL_SELECT) = 0 GI 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(USDJPY,SYMBOL_SELECT) = 0 DS 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(USDCAD,SYMBOL_SELECT) = 0 JL 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(AUDUSD,SYMBOL_SELECT) = 0 JF 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(NZDUSD,SYMBOL_SELECT) = 0 MQ 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(USDCHF,SYMBOL_SELECT) = 0 HK 0 09:26:05.487 test (DSHBTC,H1) SymbolInfoInteger(EURUSD,SYMBOL_SELECT) = 0 LH 0 09:26:05.488 test (DSHBTC,H1) SymbolName(i,false) = DSHBTC margin_1 = 0.0 RS 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = NZDJPY margin_1 = 0.0 FE 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = NZDCHF margin_1 = 0.0 QO 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = NZDCAD margin_1 = 0.0 RP 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = GBPNZD margin_1 = 0.0 JD 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = GBPCAD margin_1 = 0.0 CN 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = GBPJPY margin_1 = 0.0 KP 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = GBPCHF margin_1 = 0.0 JK 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = GBPAUD margin_1 = 0.0 QL 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURNZD margin_1 = 0.0 RG 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURJPY margin_1 = 0.0 RH 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURGBP margin_1 = 0.0 HS 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURCHF margin_1 = 0.0 CD 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURCAD margin_1 = 0.0 GO 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = EURAUD margin_1 = 0.0 QP 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = CHFJPY margin_1 = 0.0 JJ 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = CADJPY margin_1 = 0.0 JL 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = CADCHF margin_1 = 0.0 QF 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = AUDNZD margin_1 = 0.0 NI 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = AUDJPY margin_1 = 0.0 JS 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = AUDCHF margin_1 = 0.0 EF 0 09:26:05.489 test (DSHBTC,H1) SymbolName(i,false) = AUDCAD margin_1 = 0.0 所有的交叉点都显示margin=0,并且没有选择主要的交叉点。再次,在DSHBTC上运行该脚本LOGHF 0 09:29:07.268 test (DSHBTC,H1) price_1=SymbolInfoDouble(Symbol(),SYMBOL_ASK) = 0.07185999999999999 IQ 0 09:29:07.268 test (DSHBTC,H1) price_1= 0.07185999999999999 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true KP 0 09:29:07.268 test (DSHBTC,H1) price_1= 0.07185999999999999 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true DE 0 09:29:07.269 test (DSHBTC,H1) price_1=SymbolInfoDouble(Symbol(),SYMBOL_BID) = 0.07087 OQ 0 09:29:07.269 test (DSHBTC,H1) price_1= 0.07087 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true MQ 0 09:29:07.269 test (DSHBTC,H1) price_1= 0.07087 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true QP 0 09:29:07.269 test (DSHBTC,H1) price_1=10.0 = 10.0 HI 0 09:29:07.269 test (DSHBTC,H1) price_1= 10.0 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true LK 0 09:29:07.269 test (DSHBTC,H1) price_1= 10.0 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true MH 0 09:29:07.269 test (DSHBTC,H1) price_1=1.0 = 1.0 HR 0 09:29:07.269 test (DSHBTC,H1) price_1= 1.0 margin_1= 0.0 OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true NP 0 09:29:07.269 test (DSHBTC,H1) price_1= 1.0 margin_1= 0.0 MyOrderCalcMargin(ORDER_TYPE_BUY,_Symbol,0.1,price_1,margin_1) = true GR 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(GBPUSD,SYMBOL_SELECT) = 1 FM 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(USDJPY,SYMBOL_SELECT) = 0 JG 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(USDCAD,SYMBOL_SELECT) = 1 DP 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(AUDUSD,SYMBOL_SELECT) = 1 DJ 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(NZDUSD,SYMBOL_SELECT) = 1 OE 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(USDCHF,SYMBOL_SELECT) = 1 FO 0 09:29:07.269 test (DSHBTC,H1) SymbolInfoInteger(EURUSD,SYMBOL_SELECT) = 1 DD 0 09:29:07.269 test (DSHBTC,H1) SymbolName(i,false) = DSHBTC margin_1 = 0.0 没有主要成分,但USDJPY是唯一的 成分。所有测试都是在MetaQuotes上进行的 Alexey Viktorov 2017.10.05 05:46 #20197 fxsaber:很可能存在于市场观察(不要与一般符号列表相混淆),但没有显示。我们在某种程度上以不同的方式谈论同一件事 fxsaber 2017.10.05 05:49 #20198 Alexey Viktorov:我们在某种程度上以不同的方式谈论同一件事正是如此。市场观察》没有显示,但它是存在的。 fxsaber 2017.10.05 05:49 #20199 Kirill Belousov: for(int i=SymbolsTotal(false)-1;i>=0;i--) 调整它。 Kirill Belousov 2017.10.05 05:58 #20200 fxsaber: 修复它。完成了!P.S. 忘了删除保留意见 :) 1...201320142015201620172018201920202021202220232024202520262027...3184 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在计算保证金时,OrderCalcMargin函数没有将开盘价考虑在内
这是一个错误,还是应该是这样?
当然是这样。写入SD。
这一行的工作是应该的,但我不得不检查,因为我必须猜测执行的顺序。关于这一点的讨论在此 进行。
当然,是一个错误。写入SD。
这一行的工作是应该的,但我不得不检查,因为我必须猜测执行的顺序。关于这一点的讨论在这里。
Print()中计算表达式的顺序是由右至左。算是吧...到目前为止...还事先检查了一下 :)
当MQL4/5的参考文献中存在直接 的矛盾时,很难确定。
MQL5参考语言基础 知识函数参数传递
注意事项
记住,参数是倒着传给函数 的,也就是说,最后一个参数先被计算和传递,然后是倒数第二个,以此类推。开头括号后的第一个参数被计算出来,最后传给函数。
MQL5参考语言基础 知识操作和表达式其他操作
带有参数x1, x2,..., xn的函数调用
每个参数可以是一个常数、一个变量或一个相应类型的表达式。传递的参数用逗号隔开,必须用圆括号括起来,开头的圆括号必须在函数名之后。
表达式的值是由函数返回的值。如果一个函数的返回值类型是无效的,函数调用不能放在赋值操作的右边。请注意,表达式x1,...,xn的顺序 是有保证的。
到目前为止,我专注于以相反的顺序传递参数。
一个关于OrderCalcMargin的问题出现在一个相邻的主题中https://www.mql5.com/ru/forum/216697/page3
测试:让我们检查一下通过替代不同的开盘价 来计算存款的2种不同方式。
这里是LOG
OrderCalcMargin函数在计算保证金时不考虑开盘价
这似乎与所报货币的汇率有关,必须为时间和开盘价重新计算。
如果报价货币是美元(而账户货币也是美元),那么计算出的保证金将根据开盘价变化。
英镑兑美元的日志
它是一个错误还是应该是一个错误?
可能应该是这样,因为澳元兑美元和美元兑日元特别参与了计算,而且它们的报价在计算时是不变的。
现在,这种想法使我想检查...在MetaQuotes-Demo账户的市场概览中,GBPUSD是存在的,但在robo账户中没有。
一定是这样,因为特别是澳元兑美元和美元兑日元参与了计算,而且它们的报价在计算时是没有变化的。
现在,这种想法使我想检查...在MetaQuotes-Demo账户中存在GBPUSD,但在Robo账户中没有...
只是想告诉你--有一个错误。
我已经复制了你的情况,在OrderCalcMargin 计算中Margin=0。
只是还没有发布。
在MetaQuotes-Demo账户中,GBPUSD出现在Market Watch中,但在Robo账户中没有...
很可能存在于市场观察(不要与一般的符号列表相混淆),但没有显示。
一定是这样,因为特别是澳元兑美元和美元兑日元参与了计算,而且它们的报价在计算时是不变的。
现在,这种想法使我想检查...在MetaQuotes-Demo账户的市场概览中,GBPUSD是存在的,但在robo账户中没有。
这里是测试。
1.在MarketWatch中选择十字星,隐藏所有带有美元的东西
2)添加DSHBTC符号并打开其图表。
3.关闭终端
4) 打开终端
5.让我们开始测试DSHBTC
这里是LOG。
所有的交叉点都显示margin=0,并且没有选择主要的交叉点。
再次,在DSHBTC上运行该脚本
LOG
没有主要成分,但USDJPY是唯一的 成分。
所有测试都是在MetaQuotes上进行的
很可能存在于市场观察(不要与一般符号列表相混淆),但没有显示。
我们在某种程度上以不同的方式谈论同一件事
我们在某种程度上以不同的方式谈论同一件事
正是如此。市场观察》没有显示,但它是存在的。
修复它。
完成了!
P.S. 忘了删除保留意见 :)