初学者的问题 MQL4 MT4 MetaTrader 4 - 页 16

 

好的。

我现在要为自己澄清的最重要的事情可能是,我认为在计算某一特定交易的保证金时,应使用开仓时的基础货币对存款货币 的固定价值,这样做是否正确。这是否正确?这笔交易的保证金保持不变,直到订单被关闭?这是否正确?

 
Babu Bonappan:

.....

对我来说,最重要的事情可能是,我假设在开仓交易时采取的基础货币对存款货币 的固定价值应被用于计算某项交易的保证金,这是否正确。这是否正确?这笔交易的保证金保持不变,直到订单被关闭?这是否正确?

是的,你是正确的。

因此,计算保证金的价格在开立订单时很重要

 
雷纳特,非常感谢你的帮助!
 
Babu Bonappan:
雷纳特,非常感谢你的帮助!
不客气
 
Renat Akhtyamov:

这个问题是关于代码的,所以没有代码你就不能做。

你是在问修改器还是订单处理?

我不知道你需要什么。但代码中的错误是100%。

你什么都不知道,但你却自信地做出了结论。

我在问关于OrderSelect的 问题

 
Babu Bonappan:

请告知如何使用MQL4来获取终端中每个未结头寸的保证金值?

我以前是这样做的。

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

在交易欧元/美元时,这种结构运行良好,我确信其逻辑是正确的。

但现在我想对欧元/日元(或欧元/瑞士法郎)得到同样的结果。很明显,我需要将标准手的价值乘以基础货币与入金货币 的汇率(在我的例子中,乘以欧元/美元),而不是OrderOpenPrice()。但这个比率是多少呢?是开仓时的汇率,还是我们现在的汇率(在我们想知道这个头寸的存款额时)?

OrderOpenPrice - 是所选订单的开盘价 - 它显示的货币没有任何区别。我们也许应该检查点和数字。或者你应该检查一下四舍五入的情况。某处有一个四舍五入的问题。

将Double归一化为小数点后5位,而我们需要日元的小数点后3位。而绑定本身应该以同样的方式对所有货币进行操作。

 
Babu Bonappan:
如果在开单的时候,欧元/美元的汇率被写入评论栏,然后再从那里读取,会怎么样?
写 "USDJPY "而不是OrderSymbol()更容易。
 
A1exPit:
写 "USDJPY "而不是OrderSymbol()更容易。

为什么是美元/日元?毕竟,我们是在交易欧元/日元,所以1手是100000欧元,而入金货币 是美元。在我看来,在这种情况下,我们需要在开启交易时的欧元/美元汇率。

此外,如果你在代码中设置了一个强制符号,那么这个代码将不适合在另一个货币对上交易,比如说新西兰元/加元。但我希望得到一个通用的变体。到目前为止,我只能想到一种方法来存储每个订单在开张时计算的存款金额。也许我们可以为此目的创建一个数组,将订单票和它的存款存放在那里。但也许有一个更微不足道的解决方案。

 
A1exPit:

OrderOpenPrice - 所选订单的开盘价 - 它不关心使用什么货币,它给出的是价格。最有可能的是,应该检查点和数字。或者你应该检查一下 "圆周率"。我们应该检查四舍五入的情况。

NormalizeDouble是5位小数,而JPY需要3位小数。而且粘合剂本身应该对所有货币都有相同的作用。

而你为什么要在数字上撒谎?不要误导人们。

 
A1exPit:

OrderOpenPrice - 所选订单的开盘价 - 它不关心使用什么货币,它给出的是价格。

根据我的理解,OrderOpenPrice给出的正是我需要的东西。但前提是存款货币 是美元,交易货币对是欧元/美元。在这种情况下,就好像OrderOpenPrice存储了开单时基础货币对存款货币的汇率,知道这个汇率就可以轻松计算出存款。

但是,如果这些条件中至少有一个没有得到满足,我们如何才能获得单个订单的押金价值?我们在哪里可以找到报价的基础货币相对于存款的货币在开盘时的汇率?

是的,我们有订单开放的时间到最近的一秒。但我们能得到什么呢?最多是--所需符号的分钟蜡烛的参数。但绝不是用于计算存款的利率的确切数值。但是,AccountMargin函数却以某种方式得到了它!如果能了解究竟是如何做到的,那将是非常有趣的。

原因: