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.
}
我的定义在断章取义的情况下失去了原有的意义。澄清一下--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
- 戈登,我的定义也不是太热(点=最小十进制价格的乘法系数),十六进制的比喻太蹩脚了......但我可能在这里有一个赢家...
逻辑:
经纪人需要在货币对之间建立价格关系,围绕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
终于有联系了......
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匹配)
注意:对于在美元形式中以报价货币为基础的交叉货币对(如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%自信的方法来计算每点价格。
附上我开发的一个小脚本,也许能回答你的问题。
因为脚本没有 "外部 "参数,你必须在代码中改变它们并重新编译。
只要加载到你的experts/scripts文件夹中,进行编译,然后附加到图表中。
让我知道进展如何,Helmut