Roger:
通常情况下,我只在初始部分检查一次。
你的代码不是万无一失的,有些符号有1或2(黄金)或其他数字。
我找到了一个更好的方法(还需要用更多的经纪商来测试)。它读取历史文件夹中的 symbols.raw,找到 eurusd 的名称,然后使用 MarketInfo()。
/** * determine the pip multiplier (1 or 10) depending on how many * digits the EURUSD symbol has. This is done by first * finding the exact name of this symbol in the symbols.raw * file (it could be EURUSDm or EURUSDiam or any other stupid name * the broker comes up with only to break other people's code) * and then usig MarketInfo() for determining the digits. */ double pointsPerPip(){ int i; int digits; double ppp = 1; string symbol; int f = FileOpenHistory("symbols.raw", FILE_BIN | FILE_READ); int count = FileSize(f) / 1936; for (i=0; i<count; i++){ symbol = FileReadString(f, 12); if (StringFind(symbol, "EURUSD") != -1){ digits = MarketInfo(symbol, MODE_DIGITS); if (digits == 4){ ppp = 1; }else{ ppp = 10; } break; } FileSeek(f, 1924, SEEK_CUR); } FileClose(f); return (ppp); }
这是一个只适用于一种货币的代码。如果你想将你的EA用于多种货币,你必须为每种情况分别计算。
7bit:
我已经找到了一个更好的方法(仍然需要用更多的经纪商来测试)。它读取历史文件夹中的 symbols.raw,找到 eurusd 的名称,然后使用 MarketInfo()。
我已经找到了一个更好的方法(仍然需要用更多的经纪商来测试)。它读取历史文件夹中的 symbols.raw,找到 eurusd 的名称,然后使用 MarketInfo()。
如果他们改变了 symbols.raw 文件,这个方法就会失效(而且可能无法在旧版本的 MT4 上运行...虽然这可能不是问题)。
我使用的方法和罗杰的一样,还没有给我带来任何问题。
这在大多数情况下都是可行的。如果你将来发现它不适合,那么当你发现它时,只要过了那座桥就行了。
CB
这在大多数情况下都是可行的。如果你将来发现它不适合,那么当你发现它时,只要过了那座桥就行了。
CB
//++++ These are adjusted for 5 digit brokers. double pips2points, // slippage 3 pips 3=points 30=points pips2dbl; // Stoploss 15 pips 0.0015 0.00150 int Digits.pips; // DoubleToStr(dbl/pips2dbl, Digits.pips) int init() { if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers. pips2dbl = Point*10; pips2points = 10; Digits.pips = 1; } else { pips2dbl = Point; pips2points = 1; Digits.pips = 0; }
WHRoeder:
if (Digits == 5 || Digits == 3) { // Adjust for five (5) digit brokers.你只是在重复我已经发现的不足。单独使用数字变量对问题没有帮助(问题在第一篇帖子中被定义为我),因为它没有考虑到当前运行的是哪个符号以及这个符号应该有多少数字。在一些奇特的对子上可以有从0到5的任何数字,而不仅仅是5或3与4或2。如果这么简单,我就不会开这个话题了。因此,我现在只是使用eurusd的数字,不管它在什么货币对上运行。找到eurusd的实际名称是最大的问题,到目前为止,symbols.raw方法似乎是最简单和最可靠的方法。
cloudbreaker:
如果你将来找到一个不适合的,那么当你找到它的时候就过了这个桥。
我正试图写出万无一失的代码,使之不至于崩溃。编写(明知)有缺陷的代码,等到它坏了才去修复,这不符合我对软件开发的理念。
如果你将来找到一个不适合的,那么当你找到它的时候就过了这个桥。
这不就是一个简单(也许在数学上不那么简单)的问题,即计算出一个点相对于一个给定的价格是多少,然后决定它与价格的位数相比是哪一位?
一个简单的方法可以实现这一点,即拿一个价格加上一个点,然后与你的乘数+相同的价格进行比较,如果你的结果不一样,就循环增加你的乘数,直到它们匹配。
一个简单的方法可以实现这一点,即拿一个价格加上一个点,然后与你的乘数+相同的价格进行比较,如果你的结果不一样,就循环增加你的乘数,直到它们匹配。
有没有人有更复杂的算法来找到正确的数字?我认为这一切都归结为一个问题,即首先找到欧元兑美元的符号名称到底是什么,然后剩下的就很容易了。例如,有没有一种简单的方法来列举所有可用的符号,以便我可以搜索一个包含或以 "EURUSD "开头的名称?