比方说,点=0.00001。如果MODE_TICKSIZE是以点为单位,那么例如我们会让MarketInfo(Symbol(),MODE_TICKSIZE)返回1,这将被解释为1*Point=1*0.00001=0.00001。但是MarketInfo(Symbol(),MODE_TICKSIZE)返回的不是这个,它返回的是(例如)0.00001,所以它返回的是一个代表价格而不是 点数的值。文档中声称"Tick size in points",这显然是不准确的(可能是俄语翻译中的一个错误)。
switch(CalculatedSymbolType) // Determine the tickvalue for the financial instrument based on the instrument's SymbolType (major, cross, etc)
{
case1 : Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(Symbol(),MODE_BID),6)," (Tick value in the deposit currency - base)"); break;
case2 : Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - counter)"); break;
case3 : Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
case4 : Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE)/MarketInfo(CalculatedCounterPairForCross,MODE_BID),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Base to Counter)"); break;
case5 : Print("Calculated TICKVALUE = ",DoubleToStr(MarketInfo(CalculatedCounterPairForCross,MODE_BID)*MarketInfo(Symbol(),MODE_POINT)*MarketInfo(Symbol(),MODE_LOTSIZE),6)," (Tick value in the deposit currency - ",AccountCurrency()," is Counter to Counter)"); break;
default : Print("Error encountered in the SWITCH routine for calculating tickvalue of financial instrument ",Symbol()); // The expression did not generate a case value
}
对戈登的 "几乎总是 "做一个澄清,我无法立即想到哪种外汇工具不是这样的,但当经纪商提供金属、指数等时,这很少是真的。例如,在Alpari的黄金合约上,TICKSIZE是0.05(而Point是0.01)。据我所知,MarketInfo(Symbol(),MODE_POINT) = MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS)
jjc, 谢谢你的回答。
我认为这是因为我们在计算和感知数字时使用十进制作为我们的数学惯例。例如,如果我们使用十六进制,我们就不会有 "点 "的便利。举个例子,5厘米是多少米,我们只需乘以百分之一的转换系数。( 5 cm * 0.01 --> 0.05 m ) -- 遍历10[cm单位]的整数 -- 10次。但如果我们使用十六进制。我们将需要遍历6-16次,模数为4。
因此,一个点是一个十进制的转换系数。如果市场惯例表明,例如,英镑兑美元的当前价格 比率为1.3535,这只是因为我们/他们认为用1.3535美元购买1英镑的小数点后第五位转换值对贸易经济来说是不重要的。但是,如果交易量更大(也许是码值),而且频繁。那么我们/他们会追到价格比应该是最不重要的一分钱。比如说1.3535665。
所以我同意,点将永远是=MathPow(10, -MarketInfo(Symbol(), MODE_DIGITS)),因为你把它等同起来。
EDIT : 对不起各位,第一稿已经通过了。过去和现在都太多,无法发布。我希望这个更好...
包括在所附的rar文件中。我相信你会有使用方面的问题,请提出来吧。
菲利普,我对你感激不尽!这实在是太了不起了!我需要一些时间来解决这个问题。但是第一眼看去,评论都很清楚,而且我也不难理解EXCEL文件。这对我的武器库来说是一个宝贵的补充。你非常慷慨地与社区的菲利普分享这块工作。再次感谢!
这是对的。但误差百分比只是点差除以要价(~0.02%-0.05%,取决于货币对)......只有在你想计算每一分钱的时候才有意义。
这非常有趣!
按照你的问题目前的写法,简单的答案是肯定的--每个没有美元的交叉盘都符合你的标准。但我认为你的意思是问一个不同的问题--即我是否遇到过一个经纪人提供交叉货币对,同时不提供必要的货币对,包含交叉货币对的对应货币和账户面值的货币?
这个问题的答案是否定的,而且有充分的理由,因为经纪人根本无法做到。经纪人不能这样做的原因是,他们受到这里详述的方程式的相同基本价格联系的约束......换句话说,他们需要获得相同的价格信息,以便计算和报告你的交叉货币头寸估值。
例如,假设你有一个以欧元计价的账户,你买了1手英镑兑美元。英镑兑美元的对应货币是美元。因此,为了计算你在英镑兑美元头寸上的利润/亏损,你的经纪人(和你)也需要知道欧元兑美元的价格。(欧元是您的账户货币,美元是您开仓的交叉货币对的对应货币)
如果经纪商没有将欧元兑美元作为提供的货币对,那么MT4终端就无法逐点计算您的头寸的浮动利润/损失。因此,你永远不会发现一个经纪人为你提供交易交叉货币对(相对于你的账户面值)的能力,而不提供包含你账户货币的主要货币对。
是的,你对我问题的后一种解释是正确的。我的措辞不好。这将为货币对 的特点增加一些启迪。谢谢你...
凸显
"一个'点'(MODE_POINT)是最小 的可能的价格变化",因此显然它必须以1结尾。
是的,这是一个有点愚蠢的解释。但我只是想强调,点的特征与TICK_SIZE不同,因为TICK_SIZE不会总是以1结束。
"正如我之前所说,虽然文件中声称"以点为单位的打勾尺寸",这显然是不准确的。它也是以价格计算 的。"
我不明白黑体字的部分,戈登...如果你愿意解释的话...
"MODE_TICKVALUE : 对应货币的当前价值,转换为其基本比率。"
这个定义不清楚...(也许英语不是你的母语?)。
是的,这是我的第二语言。虽然这并不妨碍我在过去或未来产生一连串无意义的胡言乱语 :))))
我将在下一篇文章中尝试解释一下。抱歉,因为我的时间很短。谢谢你,戈登!我不明白黑体字的部分,戈登...如果你愿意解释的话...
我以前读过那条线,它充满了矛盾的信息。
BarrowBoy- 买入和/或卖出的变化
Rosh- 一个 "新价格 "事件
kminler- 每一个刻度代表一个已关闭的交易
打孔机--一个刻度就是一个点
在阅读了其他关于刻度线的主题和讨论后,我得出结论,一个刻度线没有具体的价值,因为它所包含的只是一个新的出价和一个新的要价,它可能与上一个刻度线相差1个点,没有点差或有几个点差,所以刻度线本身没有价格差异,只有一个新价格。
但现在我一直在研究如何计算一个点的价值,我遇到了MarketInfo MODE_TICKVALUE,它似乎是一个静态的设定值,这本身就与大多数人对点的说法相矛盾,即它只是传达了价格的变化,没有具体的数额,所以怎么会有MODE_TICKVALUE这样的东西,这没有任何意义,除非大多数人是错的,1个点实际上有一个具体的价值,等于1个点。我的问题是缺乏适当的文件,一个人应该如何找出什么是正确的,什么是错误的,论坛线程包含一些信息,其中大部分是基于意见或假设,而不是事实,这在大多数情况下并不重要,但当一个人试图根据这种粗略和矛盾的信息编写一个程序时,这使得生活非常困难。
是的,这也是我的担忧。
我只是回来跟进我的研究,我明天还得再读一遍这个。 由于睡眠太少,在电脑前呆的时间太长,我已经出现了阅读障碍。
哇,我刚刚赶上了这里的所有阅读。 我真的很累了,仍然不知道如何解决这个问题。
所以,我只想说,现在我们似乎已经理解了我的顾虑,我的提议仍然有效,我希望有一种方法,根据EA可能使用的任何符号,准确地计算出价格从一个最小值到下一个最小值(又称从x.0001到x.0002)的移动值,它也应该计算出所涉及的杠杆。(例如,如果合约为100,000,杠杆为400:1,我可能希望欧元兑美元的成本为10或其他。
作为回报,我有2个手动交易大师的资金管理公式,我可以应用你的函数 来获得点值,并创建2套资金管理函数。 我也在研究其他方法。 我心中的想法是创建一个资金管理包,包含基于各种大师的选择,用户可以选择适合他们的。
因此,如果有人能想出一个函数,让我得到点值,我将非常感激。 说实话,我很惊讶,这不是MT4的标准功能。
如果点是1.1234-1.1233的值,并且你能得出这个结果的货币价值,那么这就是我在寻找的。 对我来说,这里的point一词和pip一词一样好。
我希望能够改变杠杆值,所以这应该是一个参数。
好了,我现在已经睡了53个小时了,所以我需要休息一下了。 我们一直在忙着为我们的新版本做准备,我已经完全疲惫了。
所以,我只想说,现在我们似乎已经理解了我的顾虑,我的提议仍然有效,我希望有一种方法能够根据EA可能使用的任何符号,准确地计算出从一个最小值到下一个最小值(又称从x.0001到x.0002)的价格波动值。
好吧,部分地总结了6页中所说的内容,价格的最小可能波动由MODE_TICKSIZE给出,其每手的现金价值由MODE_TICKVALUE给出。有三个注意点。
比方说,Point=0.00001。如果MODE_TICKSIZE的单位是点,那么例如我们可以让MarketInfo(Symbol(),MODE_TICKSIZE)返回1,这将被解释为1*Point=1*0.00001=0.00001。但这不是MarketInfo(Symbol(),MODE_TICKSIZE)的返回值,它的返回值(例如)是0.00001,所以它返回的是一个代表价格而不是 点数的值,。这显然是文档中的一个错误(可能是从俄语翻译过来的错误)。
在这个问题上,数字将代表点的整数。
所以,我只想说,现在我们似乎已经理解了我的顾虑,我的提议仍然有效,我希望有一种方法,根据EA可能使用的任何符号,准确地计算出价格从一个最小值到下一个最小值(又称从x.0001到x.0002)的移动值,它也应该计算出所涉及的杠杆。(例如,如果合约为100,000,杠杆为400:1,我可能希望欧元兑美元的成本为10或其他。
看看我在第5页所附的rar文件中包含的include文件......除非我对你的问题有误解,否则它能做到这两点。
编辑: 特别是下面的代码剪辑。
对于 使用名为 "分析货币符号2010.06.07.mqh "的包含文件的tickvalue,你将。
1.调用intSymbolType()函数
int CalculatedSymbolType=SymbolType();
2.调用CounterPairForCross()函数
string CalculatedCounterPairForCross=CounterPairForCross();
然后你会计算出符号在当前市场价格下的tickvalue。
对于 使用题为 "分析货币符号2010.06.07.mqh "的include文件的杠杆作用,你将。
1.调用int SymbolType()函数
int CalculatedSymbolType=SymbolType();
2.调用BasePairForCross()函数
string CalculatedBasePairForCross=BasePairForCross();
然后通过调用SymbolLeverage()来计算该符号在当前市场价格下的特定杠杆。
我不同意,Gordon,MODE_TICKSIZE是 以点为单位的--准确地说,是以点为单位。MODE_TICKSIZE永远是Point的X倍。无论是1、2、5、35等等。[...]