如何以编程方式获得 "保证金的百分比"? - 页 8

 
Alexey Viktorov:

多么痛苦的事情啊...检查你是如何计算的。

黄金在metaquotes(保证金百分比-1,杠杆-300),CFD

2017.06.05 21:57:42.015 Script gold_test_vik2 GOLD,H4: removed
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: uninit reason 0
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: ******** AccountMargin = 19188.75 USD
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: ******** Процент маржи 300 Маржа ордера GOLD 0.05 = 19188.75
2017.06.05 21:57:42.000 gold_test_vik2 GOLD,H4: initialized

在十字星和锁定的位置上,计算也是错误的,但我个人并不关心,我看你的脚本只是没有处理。如果到目前为止所有的困难都与计算保证金百分比和至少一个差价合约订单的抵押品有关,我认为这不值得努力。

p.s.我也开始认为,开发商没有让人直接访问保证金百分比,这不是巧合 :D

 

您能否分享一下您的经验,如何在MetaQuote-Demo上以300的杠杆打开一个演示?我最多有100个...


黄金在MetaQuote-Demo上

2017.06.06 09:07:32.780 Data Folder: D:\MetaTrader 4\Programming
2017.06.06 09:07:32.780 Windows 7 Home Premium (x64 based PC), IE 11.00, UAC, 4 x AMD FX-4170 Quad-Core Processor , RAM: 10402 / 12255 Mb, HDD: 31535 / 244198 Mb, GMT+03:00
2017.06.06 09:07:32.780 MetaTrader 4 build 1090 started (MetaQuotes Software Corp.)

打印输出

2017.06.06 09:09:25.812 test GOLD,H1: ******** AccountMargin = 160.95 USD
2017.06.06 09:09:25.812 test GOLD,H1: ******** Процент маржи 1 Маржа ордера GOLD 0.05 = 160.9525

屏幕截图



 
Alexey Viktorov:

您能否分享一下您的经验,如何在MetaQuote-Demo上以300的杠杆打开一个演示?我最多有100个...


哎呀......。在终端对这些测试感到困惑。这个是insta,其他方面正确,GOLD,保证金百分比-1,杠杆率300,上面的截图...

对不起!

 
ir0407:
保证金百分比不是计算出来的存款。它只是计算保证金的组成部分之一。这个计算的结果(根据表中的公式)以保证金货币 返回,然后必须(如果它与存款货币不同)将其转换为存款货币。

而这一点我也不能完全说清楚。例如,我们取一个公式。

Lots*Contract_Size/Leverage

其中,手数--这是以工具的基础货币和合同的手数--也是基础货币,然后,如果有必要,将基础货币乘以报价货币的汇率。而这一切的结果是以保证金货币获得的。怎么说呢?

 
K-2SO:

而这一点我也不能完全说清楚。例如,我们取一个公式。

其中,手数 - 这是以工具的基础货币和合同的手数 - 也是以基础货币,然后,如果有必要,将基础货币乘以所报货币的汇率。而这一切的结果是以保证金货币获得的。怎么会呢?

这个公式

Lots*Contract_Size/Leverage

对美元***货币的保证金计算有效。


首先,我们确定我们需要将哪种价格转化为存款的货币

如果工具名称以存款货币开头,在这种情况下是美元,那么价格就不会被考虑在内。

如果订单是OP_BUY,我们需要Bid价格。

如果订单是OP_SELL,那么Ask

double price = stringFind == 0 ? 1 : type%2 == OP_BUY ? bid : ask;
percentage = NormalizeDouble(
                             margin          // Маржа получена в валюте депозита с учётом плеча
                           /(contractSize    // Размер контракта в базовой валюте
                            *price           // Умножаем на текущую цену и получаем в валюте депозита
                            /100)            // Это для того чтобы коэффициент перевести в проценты
                           *(calcMode == 0 ? leverage : 1) // Это получено методом научно-технического тыка.
                                    // Если способ расчёта 0 - Forex; то надо учесть плечо
                                    //                     1 - CFD; то плечо не учитывается
                                    //                     2 - Futures; 3 - CFD на индексы НЕ проверялись, их у меня нету...
                           , 0);
orderMargin = (orderLots         // правильно, в базовой валюте
              *contractSize      // и это тоже в базовой
              *orderOpenPrice    // а вот тут переводим в валюту депозита
              *percentage/100)   // у меня слов не хватает чтобы объяснить что это такое, но видимо очень нужное.
             /(calcMode == 0 ? leverage : 1);  // Это тоже получено методом научно-технического тыка.

我希望我已经把事情解释清楚了......。

 
Alexey Viktorov:

我希望我已经说得很清楚了......

嗯......我想我们又在谈论不同的事情了。我决定不是要澄清保证金的计算方法(不是计算),而是要澄清在保证金计算公式的输出处,即我们实际上不使用保证金货币 的地方,我们得到的结果正好是保证金货币。至少我从ir0407 的信息中是这样理解的 这就是为什么我给出了最简单的计算公式,其中还没有报价核算......

对于其余的(直觉法),我也都试过了,但注意到还没有找到单一的解决方案。我混淆了经纪人,但结果-没有,即在insta上你的最后一个选项与上述参数,仍然产生了宇宙的数字以及:https://www.mql5.com/ru/forum/193833/page8#comment_5243991

p.s. 但感谢你的评论!无论如何,我理解你的思维方式,你所描述的计算方法)

 
K-2SO:

嗯......我想我们又在谈论不同的事情了。我只是决定尝试澄清不是保证金的计算方法(不是计算),而是保证金计算公式的输出是怎样的,在这里我们实际上没有使用保证金货币,我们得到的结果是保证金的货币。至少我从ir0407 的信息中是这样理解的 这就是为什么我给出了最简单的计算公式,其中还没有报价核算......

对于其余的(直觉法),我也都试过了,但注意到还没有找到单一的解决方案。我混淆了经纪人,但结果-没有,即在insta上你的最后一个选项与上述参数,仍然产生了宇宙的数字以及:https://www.mql5.com/ru/forum/193833/page8#comment_5243991

p.s. 但感谢你的评论!总之,我理解你的思维方式,你所描述的计算方法)

我甚至不想在insta上打开一个演示。如果不困难的话,在调试器中可以显示得到了哪些中间值。正如我的截图所示


 
Alexey Viktorov:

我甚至不想在insta上打开一个演示。如果你不介意,在调试器中你可以显示你得到的中间值。就像我的屏幕截图一样



又是我的坏运气!显然,在解析你的代码时,我一定在其中改变了什么(我忘了返回),这就是为什么它出现了这样的错误。现在(以防万一)重新复制了原件--正确的和insta上的计数。那我就用其他经纪商测试一下。
 

向你致敬,你几乎得到了正确的答案。在之前审查的所有三个具有不同保证金百分比的经纪商中,对黄金的计算(对单向订单)是正确的。

但这个剧本在外星生物方面仍然失败。我已经在fxcm经纪人那里停了下来。黄金的保证金百分比是70000,常规货币对的保证金是130,保证金的货币似乎是美元。而且任何地方的计数都不正确!(.我自己两天来一直在寻找其中的关键,事实上,我现在正在寻找一个问题的答案,为什么作为基础货币 及其与报价货币汇率的计算结果,我们会得到一个保证金货币......也许是这个原因,也许是这个经纪商即使对普通货币对也考虑到了保证金的百分比。

在这里你可以下载终端ru.files.fm/u/xfezz883#_ ,解压后使用exe文件运行,制作一个演示。

 
K-2SO:

向你致敬,你几乎得到了正确的答案。在之前审查的所有三个具有不同保证金百分比的经纪商中,对黄金的计算(对单向订单)是正确的。

但这个剧本在外星生物方面仍然失败。我已经在fxcm经纪人那里停了下来。黄金的保证金百分比是70000,常规货币对的保证金是130,保证金的货币似乎是美元。而且任何地方的计数都不正确!(.我自己两天来一直在寻找其中的关键,事实上,我现在正在寻找一个问题的答案,为什么作为基础货币 及其与报价货币汇率的计算结果,我们会得到一个保证金货币......也许是这个原因,也许是这个经纪商即使对普通货币对也考虑到了保证金的百分比。

你可以在这里下载终端ru.files.fm/u/xfezz883#_ ,解压后使用exe文件运行,启动演示。

计算交叉点是没有问题的。你只需要取一个报价,从保证金货币转换为存款货币。

例如EURJPY的价格

double price = stringFind == 0 ? 1 : type%2 == OP_BUY ? bid : ask;

如果你的存款是美元,你应该使用欧元兑美元。如果你计算CADJPY,你应该使用USDCAD。在这里我们应该看到如何将存款货币添加到保证金货币中,我们不应该只是在列表中输入它。

有MarketInfo(symbol, MODE_MARGINHEDGED)的计数器就不那么困难了。唯一的问题是先找到反面货币,然后按反面货币分解一部分,其余的按全...

总的来说,我认为这篇文章的唯一好处是,交易者提前知道挂单激活时将占用多少保证金,如果不够及时,可以删除挂单,避免出错。我曾经在市场上放置一个EA时,对此感到很纠结。