5位数检测 - 页 2

 
7bit:
我试图写出万无一失的代码,不至于崩溃。

如果万无一失是你要找的,那么我不会把赌注押在 symbols.raw 文件结构上。这是一个 "内部 "和无记录的文件结构。不能保证它在未来的版本中不会改变。

 

嗨,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位数,所以即使这种情况也被很好地覆盖了。

我建议把你发现的任何例外情况简单地处理一下,也许对这个特定的问题进行硬编码,而不是试图找到一个万能的解决方案。

 
kennyhubbard:


就黄金而言,它一直是2位数的报价,而新的1/10点券商的报价是3位数,所以即使是这种情况,也是很好的覆盖。

我曾在一个4位数的经纪商那里看到黄金的报价为1位数。我不知道这个经纪商的名字,因为那是我们在某个IRC频道测试我的IRC信号发生器的时候,但是我的一个测试者在GOLD上做交易,报价是1位数。我问他,他说他的经纪人是4位数的。

这正是我决定 "3或5 "的方法必须有根本性的缺陷并开始寻找更好的东西的时刻。
 
7bit:
我曾在一个4位数的经纪人身上看到过1位数的黄金报价。[......]这正是我决定 "3或5 "的方法必须有根本性的缺陷并开始寻找更好的东西的时刻。

在Alpari UK,一般是3/5位数的经纪人,黄金的报价是2DP,tick size是0.05。我在这个论坛上的某个地方看到有人在交易美国国债,其报价为3DP。然而,在这种情况下,刻度线的大小不会是0.001。

一个可能的途径是检查一个符号的精度是否为3/5位,以及刻度线的大小是否为0.001/0.00001。另外,根据你想要实现的具体目标,你可以尝试通过检查前六个字符是否由两个已知的货币符号组成来检测外汇货币对(即使用一个硬编码的认可货币列表)。你也可以使用MODE_PROFITCALCMODE作为检测外汇符号的方法,而不是期货/股票/等,但我怀疑这在不同的经纪商中可能并不可靠。

 
在LotSize、TickSize、TickValue、Point、Margin等之间......可能有一个比例来解决这个问题。
我现在太多心了,想不出来:)),但如果有人感兴趣,这里有一些我参考的链接

- 从Ais :LotSize
- fbj:杠杆,保证金等
 
解决方案的理论在第一页的底部,除非你们都认为它很愚蠢,懒得评论。
 
Ruptor:
解决方案的理论在第一页的底部,除非你们都认为它很愚蠢,懒得评论。

就个人而言,我没有理解你之前的帖子。我认为7bit最初的问题是问如何处理如下情况:"有一个外部参数,用户在其中输入一个点值。在某些情况下,用户心目中的点值与经纪商报告的MODE_TICKSIZE不同--例如,经纪商的点值是0.00001,但用户调用的是0.0001点。有没有一种可靠的方法来解读用户的想法,并计算出他们输入的点值何时需要调整,以及调整多少?" 按照你所建议的思路,这个问题没有一个纯数学的答案。这是一个半任意约定的问题,例如,欧元兑美元的一个点通常被认为是0.0001,尽管大多数经纪商将符号报为5DP。

编辑:......这就是为什么黄金等如此棘手,因为没有那么多商定的惯例。在Alpari UK,黄金以0.05为单位移动。如果你对交易员进行民意调查,问他们这代表多少个点,我想你会得到以下四个答案中每一个的合理数量的投票。5、1、0.5和0.05。

 
Ruptor:
这不就是一个简单(也许在数学上不那么简单)的问题,即计算出一个点相对于一个给定的价格是多少,然后决定它与价格的位数相比是哪一位?
一个简单的方法可以实现这一点,即拿一个价格加上一个点,然后与你的乘数+相同的价格进行比较,如果你的结果不一样,就循环增加你的乘数,直到它们匹配。

鲁托尔。

你说得很微妙,我想我第一次读的时候并没有理解它。我还是不明白:))。能否请你详细说明一下?

一些经纪商如GCI也列出了未来的符号,如标准普尔500,IBM,英特尔甚至迪斯尼......那么这将如何适用?

 
嗨,cameofx
在这种情况下,一幅图画描绘了千言万语,或者说是代码。 pipx是你必须用Point乘以1/10000th来得到一个点,这是交易的通常价值。
   double tmpx=MathCeil((Ask/10000)/Point);
   double pipx=1;
   while (tmpx>=10.0){
      pipx*=10;
      tmpx/=10;
   }
如果货币对的价值上升或下降10倍,它仍然不是万无一失的,但我认为它不受外汇经纪人数字的影响。
 
Ruptor:
[......]如果货币对的价值上升或下降10倍,它仍然不是万无一失的,但我认为它对外汇中的经纪人数字没有影响。

坦率地说,我对此感到困惑。例如,如果USDJPY价格跌到90以下,那么这段代码将开始在3/5DP经纪商上报告不同的pipx值。

目前,USDJPY在92.5左右,在3/5DP经纪商那里,Point=0.001,那么tmpx/pipx的评估结果如下。

  • 92.5 / 10000 = 0.00925
  • 0.00925 / 0.001 = 9.25
  • MathCeil()将tmpx取整为10
  • pipx被设置为10

如果美元兑日元价格跌至90以下(例如89.5),那么评估将如下:

  • 89.5 / 10000 = 0.00895
  • 0.00895 / 0.001 = 8.95
  • MathCeil()将tmpx取整到9
  • pipx仍然设置为1,而不是10

换句话说,由于我完全不明白的原因,这段代码对点的定义对价格变化 很敏感,它的乘数根据价格从一个数量级翻转到另一个数量级,而不是(仅仅)根据经纪人设置。它在过去一周的不同时间会给出不同的结果。在一个2/4DP的经纪商,pipx会一直保持在1,而不是在1和10之间变化。