每点的价格 - 页 9

 
gordon:

我的定义在断章取义的情况下失去了原有的意义。澄清一下--MODE_TICKSIZE定义中的 "价格 "是指实际可能的 报价,而在Point的定义中是指任何价格。

- 戈登,我的定义也不是太热(点=最小十进制价格的乘法系数),十六进制的比喻太蹩脚了......但我可能在这里有一个赢家...

逻辑:
经纪人需要在货币对之间建立价格关系,围绕MODE_LOTSIZE是100,000单位的报价 货币和MODE_TICKVALUE是10单位的报价货币。只有在这种平等的相互关系条件下,价格才能在彼此之间报价。我认为这就是外汇价格构建的基础。

点 = MODE_LOTSIZE / 报价货币的Tickvalue。
GBPUSD 0.0001 = 100,000 / 10 USD
USDJPY 0.01 = 100,000 / 1,000 JPY <-- MathRound( MODE_TICKVALUE * 报价货币的最新 Bid )
CHFJPY .... 等。如果你或任何人能确认,那就太好了。

如果我们要开始谈论期货合约,那么所有的赌注都会消失。例如,FXPro有接近正常格式的期货合约#AAmy,其中 "my "是一个标准的到期代码,如M0。EUR_JPY_fut听起来像是一些奇怪的合成合约。

- 好的,Jjc...我假设未来也有不同的价格和TICK_VALUE建筑。所以这肯定会排除所有非外汇工具。前缀和中间固定被认为不太可能。

- CB 我很想听听你对上述计算的看法。谢谢你到目前为止的意见。

最好的问候
cameo

 
cameofx:

- 戈登,我的定义也不是太热(点=最小十进制价格的乘法系数),十六进制的比喻太蹩脚了......但我可能在这里有一个赢家...

逻辑:
经纪人需要在货币对之间建立价格关系,围绕MODE_LOTSIZE是100,000单位的报价 货币和MODE_TICKVALUE是10单位的报价货币。只有在这种平等的相互关系条件下,价格才能在彼此之间报价。我认为这就是外汇价格构建的基础。

点 = MODE_LOTSIZE / 报价货币的Tickvalue。
GBPUSD 0.0001 = 100,000 / 10 USD
USDJPY 0.01 = 100,000 / 1,000 JPY <-- MathRound( MODE_TICKVALUE * 报价货币的最新 Bid )
CHFJPY .... 等。如果你或任何人能确认,那就太好了。

- 好的,Jjc...我假设未来也有不同的价格和TICK_VALUE建筑。所以这肯定会排除所有非外汇工具。前缀和介于两者之间的固定被认为不太可能。

- CB 我很想听听你对上述计算的看法。谢谢你到目前为止的意见。

最好的问候
cameo

如果Digits=5或Digits=3,逻辑是否会改变?
 

终于有联系了......

Would the logic change if Digits = 5 or Digits = 3?

没有engcomp,逻辑是不应该改变的。至少这是我想弄清楚的。

我想弄清楚几件事情,目前的情况是::点、MODE_TICKVALUE、MODE_TICKSIZE、价格。我可能最终只是以一种新的方式呈现它们,但如果我能够从中得到利用,那么这将是值得的。

IMO,MODE_TICKVALUE转换 为报价货币非常重要的 。所以为了讨论起见,我将它称为QUOTE_TICKVALUE。顺便说一下,前面的方程式是逆向的。

要计算出Point是否确实是:QUOTE_TICKVALUE (TickValue in quoted currency) / MODE_LOTSIZE,我有这个。(Calc_Point应该与Point匹配)

string Sym = Symbol();
double Calc_Point = QUOTE_TICKVALUE(Sym) / MarketInfo(Sym, MODE_LOTSIZE);
int QUOTE_TICKVALUE(string Sym)
{
   string quoted_currency_name = StringSubstr(Sym,3,3); double TV, QTV = 0.0;
   if (MarketInfo(StringConcatenate("USD", quoted_currency_name), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
   else if ((MarketInfo(StringConcatenate(quoted_currency_name, "USD"), MODE_LOTSIZE)) > 0)
   {
     TV = MarketInfo(Sym, MODE_TICKVALUE);
     QTV = MathRound(TV * MarketInfo(Sym, MODE_BID));
     return(QTV);
   }
}
注意:对于在美元形式中以报价货币为基础的交叉货币对(如EURGBP),上述内容需要做一些修改。

因此, 任何给定的时间,任何给定的价格:

USDJPY, GBPJPY, AUDJPY, XXXJPY............. 的QUOTE_TICKVALUE为 --> 1000 [JPY]
EURUSD, AUDUSD, GBPUSD, XXXUSD ........ 的QUOTE_TICKVALUE为 --> 10 [USD]
EURCHF, USDCHF, XXXCHF....................... 的QUOTE_TICKVALUE为 --> MathPow(10, x)[CHF]

我需要强调的是,我正在从浮动的TICK_VALUE中 "提取 "QUOTE_TICKVALUE。所以我认为这意味着QUOTE_TICKVALUE是由经纪商预先确定的,更重要的是:它们在作为报价货币的每种货币之间将是一致的。因此,只要MODE_LOTSIZE = 100,000,美元的QUOTE_TICKVALUE = 10,我们就可以确定作为报价货币的其他符号成分也将是一致的(也就是说,如果不把其他QUOTE_TICKVALUE-s也除以10,你就不能把10美元改为1美元--我相信这就是我们可以确定我的Valid_Point大的地方)。我希望这很清楚...

我现在不能(因为我的生活)同时使用net和MT4(这很复杂...)。所以,如果有人能帮助或验证,那就太好了。

凸显

 

我已经找到了我需要的东西,Valid_Point,甚至更多。对Point、TickValue、Ticksize、Symbol()以及一般的价格有了更深入的了解。感谢所有从LEHayes开始分享他们的见解和评论的人。

最好的问候
凸显

 

伙计,看看我引起的所有头脑风暴。 我希望它是有用的。 我没有时间跟上这个主题,但我希望能有机会回顾一下。

在所有这些讨论和出色的工作之后,我们是否已经到了有某种标准函数 来产生我们所寻找的东西的程度? 这个问题是为了让我们做一个总结。

 

有没有人对上述金属或其他符号的计算技巧有经验,而不是交叉货币?

我发现了这个话题,因为我对符号中一个点的变动在账户货币中的价格变化计算感兴趣。

我的基本理论是这样的。

每点价格=合约大小*点

账户货币中的每点价格=每点价格*账户柜台交叉汇率。

其中

合约大小 = MarketInfo(Symbol(), MODE_LOTSIZE)

点 = Point = MarketInfo(Symbol(), MODE_POINT)

帐户交叉汇率是以帐户货币表示的符号对应货币的价格(CCCAAA买入率,其中AAA是帐户货币,CCC是符号的对应货币)。

我已经用不同经纪商的模拟账户(icm, insta, fxopen, fxopen ecn)对照账户历史中的实际1.0手交易检查了上述情况。我还检查了cloudbreaker的tickvalue计算方法。

我发现了以下情况。

- 在不同的经纪商那里,一个符号的一个点的移动价格是不容易计算的,在金属的情况下也是如此。

- 甚至Cloudbreaker的tickvalue * point / ticksize公式也可能导致错误的结果(insta - 银,icm - eurusd,fxopen - 银和金)

- 在icm - gold的情况下,即使是Contract size * Point也会导致错误的结果(0.5而不是实际的5.0,这是一个经纪人的数据错误吗?)

你可以在这里找到详细的结果。每点价格

因此,我的结论是,没有100%自信的方法来计算每点价格。

 
谢谢你分享你写的这个小程序。我无法相信它是如此简单!!你为我节省了大量的时间 :-)
engcomp:

附上我开发的一个小脚本,也许能回答你的问题。

因为脚本没有 "外部 "参数,你必须在代码中改变它们并重新编译。

只要加载到你的experts/scripts文件夹中,进行编译,然后附加到图表中。

让我知道进展如何,Helmut

 
关于DE30的备注评论
double  PointValuePerLot(string pair=""){
    /* Value in account currency of a Point of Symbol.
     * In tester I had a sale: open=1.35883 close=1.35736 (0.0147)
     * gain$=97.32/6.62 lots/147 points=$0.10/point or $1.00/pip.
     * IBFX demo/mini       EURUSD TICKVALUE=0.1 MAXLOT=50 LOTSIZE=10,000
     * IBFX demo/standard   EURUSD TICKVALUE=1.0 MAXLOT=50 LOTSIZE=100,000
     *                                  $1.00/point or $10.0/pip.
     *
     * https://forum.mql4.com/33975 CB: MODE_TICKSIZE will usually return the
     * same value as MODE_POINT (or Point for the current symbol), however, an
     * example of where to use MODE_TICKSIZE would be as part of a ratio with
     * MODE_TICKVALUE when performing money management calculations which need
     * to take account of the pair and the account currency. The reason I use
     * this ratio is that although TV and TS may constantly be returned as
     * something like 7.00 and 0.0001 respectively, I've seen this
     * (intermittently) change to 14.00 and 0.0002 respectively (just example
     * tick values to illustrate).
     * https://forum.mql4.com/43064#515262 zzuegg reports for non-currency DE30:
     * MarketInfo(Symbol(),MODE_TICKSIZE) returns 0.5
     * MarketInfo(Symbol(),MODE_DIGITS) return 1
     * Point = 0.1
     * Prices to open must be a multiple of ticksize */
    if (pair == "") pair = Symbol();
    return(  MarketInfo(pair, MODE_TICKVALUE)
           / MarketInfo(pair, MODE_TICKSIZE) ); // Not Point.
}
 
我一直在尝试计算非外汇符号的风险百分比,但是我一直想不出任何可靠的方法,因为大多数非外汇符号的行为非常不同。有谁能指出如何计算非外汇符号的正确点值,以便计算出正确的风险百分比?
 
上述情况如何不能正确工作?