I use below functions now, and it's usable across different brokers & instruments.
double vPoint;
if(Digits == 2 || Digits == 4) vPoint = Point; elseif(Digits == 3 || Digits == 5) vPoint = Point*10; // I use this for my indies; call once on init() & use where Point supposed to be used in start() double Poin()
{
int d = Digits;
switch(d){
case2 : {return(Point); break;}
case4 : {return(Point); break; }
case3 : {return(Point*10); break;}
case5 : {return(Point*10); break:}
default : return;
} // I just come up with this. Untested but should be ok/robust. To be used to replace Point for trade parameters calculations.
I use below functions now, and it's usable across different brokers & instruments.
cheers, ~ cameo
下面是我使用的另一种解决问题的方法...
那么就用SymPoint变量来代替Point变量吧。与Cameo非常相似
为了使事情更加混乱,BrocoTrader的各种证券都有0到5位数字的证券...
嗨,7bit,
,我认为你试图创建防弹代码是正确的,.......,但总是会有限制。
你只需看看The Collective FX的演示饲料,他们正在测试不同流动性供应商的独立组合饲料(而不是来自多个来源的单一协议饲料),每个都有自己的货币对后缀(我们终于找到后缀的用途了吗?),以实现问题的范围。这意味着,在一个平台上,你可以选择EURUSD_fx或EURUSDm或EURUSD_dbfx,只要你愿意。这本身就会给你的策略带来巨大的漏洞,因为其中一些是4位数的定价,而其他是5位数。
if (Digits == 3 || Digits == 5) "是你能找到的最全面的方法,因为它是在一个简单的前提下工作的,即你只有2种经纪商,即有整点的经纪商和有十分之一点的经纪商。这种情况涵盖了2/3/4/5种货币对和经纪商。
对于我自己的信息,你有没有见过任何例外的情况?就黄金而言,它一直是2位数的报价,而新的1/10点券商的报价是3位数,所以即使这种情况也被很好地覆盖了。
我建议简单地把你发现的任何例外情况当作例外情况来处理,也许对这个特定的问题进行硬编码,而不是试图找到一个万能的解决方案。
我注意到,当这种对话出现时,人们谈论的是后缀,而不是前缀。有可能也有一个前缀。我曾遇到过一个有前缀的经纪人。
我对这个问题的想法与原来的发帖人一致,我希望产品 对我的客户来说尽可能的稳固,我不在乎冒更多的编码风险来解决以后。我的整个代码可能被包裹在这一变化中,并且可能花费我几个开发人员的时间去修改成千上万行的代码。所以,第一次就把它改好,可以减少回头再修改的风险和费用。我也同意这是一个错误,但不是我们代码中的错误,而是MQL中的一个弱点。
然而,我也一直在思考一个解决方案。我的解决方案之一是通过符号列表,使用子串找到欧元兑美元来获得它。然后得到它的出价值。一旦我有了出价值,我就可以做一个doubletostr,然后想出一个办法来计算字符串中的字符,比如strlen或类似的东西。这很麻烦,但它可能会给我一个4或5位数的判断,这将是相当可靠的。由此,我可以为像Gold这样的怪异现象建立基础。
这只是一个理论,我还没有尝试过。我太忙了,只想把目前的项目处理好。
在我的EA中,我使用这个代码来计算Pip - 这个Pip在我处理外部bool输入的任何地方都使用,比如SL,TP,TS或者我想看到利润的Pip ...在3个不同的经纪公司测试 - 在不同的货币对,DAX 1/2小数上没有问题...我知道它看起来和之前的帖子相似,但它的功能 是真实的...
在我的其他指数中,我也尝试寻找日元符号... :-)
在我的EA中,我使用这个代码来计算Pip - 这个Pip在我处理外部bool输入的任何地方都使用,比如SL,TP,TS或者我想看到利润的Pip ...在3个不同的经纪公司测试 - 在不同的货币对,DAX 1/2小数上没有问题...我知道它看起来和之前的帖子相似,但它的功能 是真实的...
在我的其他指数中,我也尝试寻找日元符号... :-)
我想找到每种货币的 "点",而不是寻找日元。这就是我所尝试的。
因此,预期会给出存储在Pair01中的货币对的相应数值。 然而,这只返回0。为什么呢?在我的例子中,Pair01是 "AUDCAD",该指标连接到一个欧元兑美元的图表。
通过进一步的实验,我现在看到它对一些货币有效,但对其他货币无效。这是相当令人困惑的。MODE_DIGITS似乎效果更好。这怎么可能呢?
pi
在我的EA中,我使用这个代码来计算Pip - 这个Pip我在任何地方都使用,我处理外部bool输入的点,如SL,TP,TS或我想看到利润的点...在3个不同的经纪公司测试 - 在不同的货币对,DAX 1/2小数上没有问题...我知道它看起来类似于之前的帖子,但其功能 实际...
只是因为你是在一个5位数的经纪人。在4位数的经纪商,PIP和Point是一样的。
什么是TICK?-MQL4和MetaTrader 4 - MQL4编程论坛
而InstaForex公司对USDSEK和USDNOK有4位数字,而对EURUSD有5位数字。
因此,我认为你需要有一个数组,为每一种报价货币进行设置,以获得点数而不是点。