新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1248 1...124112421243124412451246124712481249125012511252125312541255...1953 新评论 Vladimir Pastushak 2020.09.08 10:06 #12471 jaffer wilson:@ Artyom Trishkin @ Vladimir Pastushak在我的情况下不起作用。我不是在要求一个新的职位。我知道它为一种类型的交易计算并返回保证金。但如果交易已经开始,而我想知道某一特定符号的一笔交易所消耗的保证金,那就没有用了。 你能帮助我吗?如果你不理解我的情况,请告诉我。 简单解释一下这个场景。 你在ToolBox中看到这个字段。 这是符号的保证金:AUDJPY、EURUSD和EURTRY。 我知道我可以用AccountInfoDouble(ACCOUNT_MARGIN)得到这个值。但我无法得到一个特定符号的值。例如,我想知道EURUSD消耗了多少保证金。我不能履行任何职能。因此,我想知道如何才能计算出来。 我希望这个解释足够有意义。 //+------------------------------------------------------------------+ #include <Trade\PositionInfo.mqh> CPositionInfo m_position; //+------------------------------------------------------------------+ struct str__ { string symbol; double margin; }; str__ symb[]; //+------------------------------------------------------------------+ void OnTick() { int total = PositionsTotal(), c = 0; ArrayResize(symb, total); for(int k = total - 1; k >= 0; k--) if(m_position.SelectByIndex(k)) { symb[c].symbol = m_position.Symbol(); if(m_position.PositionType() == POSITION_TYPE_BUY) symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_BUY, m_position.Volume()); if(m_position.PositionType() == POSITION_TYPE_SELL) symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_SELL, m_position.Volume()); c++; } ArrayPrint(symb,2); } //+------------------------------------------------------------------+ double SymbolMargin(string aSymbol, ENUM_ORDER_TYPE aType, double aLot = 1.0) { double margin = 0; MqlTick m_tick; if(SymbolInfoTick(aSymbol, m_tick)) { if(m_tick.ask != 0.0) if(OrderCalcMargin(aType, aSymbol, aLot, m_tick.ask, margin)) return (margin * aLot); if(m_tick.bid != 0.0) if(OrderCalcMargin(aType, aSymbol, aLot, m_tick.bid, margin)) return (margin * aLot); } return -1; } //+------------------------------------------------------------------+ jaffer wilson 2020.09.08 10:20 #12472 Vladimir Pastushak : @Vladimir Pastushak 我会试试的。但让我告诉你,这不是一个可行的解决方案。OrderCalcMargin()给出的值每次都会改变。但保证金的价值并没有改变。如果我关闭任何交易,保证金价值将与我开立交易时相同。但是当我使用OrderCalcMargin()时,我得到的数值发生了变化,与原来的数值完全不一样。 请让我知道你是否也在你那边尝试过这个方法。我知道这行不通。然而,我将按照你的坚持使用它。 jaffer wilson 2020.09.08 10:27 #12473 Vladimir Pastushak : 我在欧元兑美元中开了一笔交易,手数为50。看看我使用你的函数后得到了什么。 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589500.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589505.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589495.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589490.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589485.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589490.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589485.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589480.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589475.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589470.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589465.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589455.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589460.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589465.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589460.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589455.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589440.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589440.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589440.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589445.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589450.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589460.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589465.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589460.00 你看,保证金是不断变化的。但已经开启的交易的价值并没有改变。你能告诉我现在该怎么做吗? Vladimir Pastushak 2020.09.08 10:52 #12474 jaffer wilson:我在欧元兑美元中开了一笔交易,手数为50。看看我使用你的函数后得到了什么。 你看,保证金是不断变化的。但已经开启的交易的价值并没有改变。你能告诉我现在该怎么做吗? //+------------------------------------------------------------------+ #include <Trade\PositionInfo.mqh> CPositionInfo m_position; //+------------------------------------------------------------------+ struct str__ { string symbol; double margin; }; str__ symb[]; //+------------------------------------------------------------------+ void OnTick() { int total = PositionsTotal(), c = 0; ArrayResize(symb, total); for(int k = total - 1; k >= 0; k--) if(m_position.SelectByIndex(k)) { symb[c].symbol = m_position.Symbol(); if(m_position.PositionType() == POSITION_TYPE_BUY) symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_BUY, m_position.Volume(), m_position.PriceOpen()); if(m_position.PositionType() == POSITION_TYPE_SELL) symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_SELL, m_position.Volume(), m_position.PriceOpen()); c++; } ArrayPrint(symb, 2); } //+------------------------------------------------------------------+ double SymbolMargin(string aSymbol, ENUM_ORDER_TYPE aType, double aLot = 1.0, double aOpenPrice = 0) { double margin = 0; if(aOpenPrice != 0.0) if(OrderCalcMargin(aType, aSymbol, aLot, aOpenPrice, margin)) return (margin * aLot); if(aOpenPrice != 0.0) if(OrderCalcMargin(aType, aSymbol, aLot, aOpenPrice, margin)) return (margin * aLot); return -1; } //+------------------------------------------------------------------+ jaffer wilson 2020.09.08 11:21 #12475 Vladimir Pastushak : 我已经尝试了上述代码。 我得到了这个。 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589100.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589100.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589100.00 (EURUSD,M1) [symbol] [margin] (EURUSD,M1) [ 0 ] "EURUSD" 589100.00 但预期的价值是这样的。 jaffer wilson 2020.09.08 11:29 #12476 Vladimir Pastushak : 对于其他符号,保证金值 仍在变化。因此,OrderCalcMargin()不是解决方案。你得到了它。请先在你那边试试。 Vladimir Pastushak 2020.09.08 12:12 #12477 jaffer wilson:对于其他符号,保证金值 仍在变化。因此,OrderCalcMargin()不是解决方案。你得到了它。请先在你那边试试。 2个订单 5891 * 2 = 11782 如果你需要逐个符号处理数组...这不是一个问题... jaffer wilson 2020.09.08 13:13 #12478 Vladimir Pastushak :2个订单 5891 * 2 = 11782 如果你需要逐个处理一个数组的字符...这不是一个问题... 但我只在欧元兑美元上做了一次交易。而且这个功能在其他符号上也不能正常工作。 Roman 2020.09.08 14:10 #12479 你能告诉我是否有mql5指标的挂钩?要设置两个显示属性。 #property indicator_separate_window #property indicator_chart_window 并以某种方式绑定不同的输出,每一个都有自己的映射属性。 Artyom Trishkin 2020.09.08 14:53 #12480 Roman:你能告诉我是否有mql5指标的挂钩?要设置两个显示属性。并以某种方式绑定不同的输出,每一个都有自己的映射属性。 没有这样的钩子。不在右边,也不在左边。对MQL5来说,也不是MQL4。 在子窗口的主图上使用你自己的构造。 1...124112421243124412451246124712481249125012511252125312541255...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
@ Artyom Trishkin @ Vladimir Pastushak
在我的情况下不起作用。我不是在要求一个新的职位。我知道它为一种类型的交易计算并返回保证金。但如果交易已经开始,而我想知道某一特定符号的一笔交易所消耗的保证金,那就没有用了。
你能帮助我吗?如果你不理解我的情况,请告诉我。
简单解释一下这个场景。
你在ToolBox中看到这个字段。
这是符号的保证金:AUDJPY、EURUSD和EURTRY。
我知道我可以用AccountInfoDouble(ACCOUNT_MARGIN)得到这个值。但我无法得到一个特定符号的值。例如,我想知道EURUSD消耗了多少保证金。我不能履行任何职能。因此,我想知道如何才能计算出来。
我希望这个解释足够有意义。
@Vladimir Pastushak 我会试试的。但让我告诉你,这不是一个可行的解决方案。OrderCalcMargin()给出的值每次都会改变。但保证金的价值并没有改变。如果我关闭任何交易,保证金价值将与我开立交易时相同。但是当我使用OrderCalcMargin()时,我得到的数值发生了变化,与原来的数值完全不一样。
请让我知道你是否也在你那边尝试过这个方法。我知道这行不通。然而,我将按照你的坚持使用它。
我在欧元兑美元中开了一笔交易,手数为50。看看我使用你的函数后得到了什么。
你看,保证金是不断变化的。但已经开启的交易的价值并没有改变。你能告诉我现在该怎么做吗?
我在欧元兑美元中开了一笔交易,手数为50。看看我使用你的函数后得到了什么。
你看,保证金是不断变化的。但已经开启的交易的价值并没有改变。你能告诉我现在该怎么做吗?
我已经尝试了上述代码。
我得到了这个。
但预期的价值是这样的。
对于其他符号,保证金值 仍在变化。因此,OrderCalcMargin()不是解决方案。你得到了它。请先在你那边试试。
对于其他符号,保证金值 仍在变化。因此,OrderCalcMargin()不是解决方案。你得到了它。请先在你那边试试。
2个订单 5891 * 2 = 11782 如果你需要逐个符号处理数组...这不是一个问题...
2个订单 5891 * 2 = 11782 如果你需要逐个处理一个数组的字符...这不是一个问题...
但我只在欧元兑美元上做了一次交易。而且这个功能在其他符号上也不能正常工作。
你能告诉我是否有mql5指标的挂钩?要设置两个显示属性。
并以某种方式绑定不同的输出,每一个都有自己的映射属性。
你能告诉我是否有mql5指标的挂钩?要设置两个显示属性。
并以某种方式绑定不同的输出,每一个都有自己的映射属性。
没有这样的钩子。不在右边,也不在左边。对MQL5来说,也不是MQL4。
在子窗口的主图上使用你自己的构造。