Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
struct Mql_6_PackedRates
{
time_t time; // время начала периода 4 байта // восьмибайтный time64_t неактуален до 2038 годаfloat average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байтаfloat d_open; // поправка к цене открытия 4 байтаfloat d_high; // поправка к наивысшей цене за период 4 байтаfloat d_low; // поправка к наименьшей цене за период 4 байтаfloat d_close; // поправка к цене закрытия 4 байтаushort spread; // средний спред 2 байтаchar d_open_spread; // поправка к спреду открытия 1 байтchar d_high_spread; // поправка к спреду high 1 байтchar d_low_spread; // поправка к спреду low 1 байтchar d_close_spread;// поправка к спреду close 1 байтuint tick_volume; // тиковый объем 4 байтuint real_volume; // биржевой объем 4 байтdouble OpenBid() {return (average_price+d_open); } // функции на лету вычисляющие точные значенияdouble OpenAsk() {return (average_price+d_open+OpenSpread()); }
double HighBid() {return (average_price+d_high); }
и т.д...... // функции на лету вычисляющие точные значения
...
...
double OpenSpread() { return ((spread+d_open_spread) * _digits); }
...
и т.п ......
Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; ..../*заполняем*/..... return (Rates);}
};
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений
你不能。
别废话了,继续公关厨房吧;)
杰克特,根据你的分类,不要玷污你在这里的 "小人物和公关人员 "的形象。转到你的QQ。
P.S. 对于交易者来说,有一个扫盲的 机会,他们可以从平时的交流中补充对外汇市场现实的知识和它的各种特征。拓宽你的视野!
杰克特,根据你的分类,不要玷污你在这里的 "小人物和公关人员 "的形象。转到你的QQ。
当然,MetaQuotes对存储历史的格式(MqlRates)做得过多(过少)。 这是可以理解的。 在开发该格式时,固定点差在外汇市场占主导地位,而市场(浮动)点差仍是异类。尽管很明显,即使是固定的价差事实上也是浮动的,因为经纪公司 "在新闻和市场快速变化的时刻不保证其固定性"(这里的倒逗号代表的是那个时期几乎所有经纪公司的典型报价的引用)。
但时代变了,我们拥有的是--价差在每一个刻度上都在浮动,这没有关系。只是历史上的引文没有反映出来。 很遗憾。
在历史上,每个条形图只有一个点差值被存储。而且现在还不够,它导致了在历史上进行测试时的扭曲,因为实际交易历史和测试器中的交易没有重合,即使经纪人提供了绝对诚实的(对应于实际的tick-feed翻译)历史基础。 原因是MqlRates格式的描述能力不足。
这种结构假设了一个条形图内价差的不变性,这与当前的交易现实不相符。
我们进一步讨论 "完整 "的格式可能是什么,我有条件地把它称为 "Mql_6_Rates",以表明它目前不被支持。
下面是两种变体。 第一种是包装结构(用于磁盘),没有通过特殊算法进行压缩。它可以被压缩得小很多倍(2-3,大概),以减少传输流量。 这里不讨论压缩的格式。
包装 "格式应该是在交易者的磁盘上存储时的最佳状态。 当从磁盘加载到内存时,它可以被即时解包,解包功能被 "附加 "到结构中。
解压后的历史(用于从MQL访问)可以是,比如说,这个。
它比现在要大,但价差是在酒吧的所有固定点计算的。也就是说,如果我们必须按照传统的方案{开盘+高点+低点+收盘}以分钟为单位来写信息,那么我们应该 "完整地 "写。
在我看来,这些信息是多余的,它往往会在开盘 点上造成最大的错觉。 不同符号的开盘时刻并不一致,而恰恰在分钟开始的时刻(天文数字),符号上的买卖价格与最后的交易出价相对应,即收盘价。 因此,测试分钟的最合适格式(传统和常识之间最健康的妥协)可以是如下的
//在打包磁盘格式中,相应的节省将是另外7个字节,即SizeOf(Mql_6_PackedRates)将减少到31字节。
对于生态(最合理的)测试 "通过开盘价",应采取一分钟的天文开始时间,即上一栏的收盘价。在这种情况下,将实现精确的多币种价格同步。这种同步性对于调试交易市场订单的多币种EA至关重要。 对于限价和止损订单交易,每个条形上的极值信息至关重要。 它也完全可以用我们正在讨论的格式。
--
实际上,我现在正在为自己的目的开发这些格式。 在这里公布它们只是我开发的一个副产品。 也许有人会发现它们很有用。
在一个环保的(最合理的)"开盘价 "测试中,应该采取分钟的天文开始时间,即前一个条形图的收盘价。
忽视差距在某些情况下将是至关重要的
p.s. 如果你需要节省流量,你可以存储偏移量,而不是绝对 价格值,对于这一点,double是非常重要的。
当然,MetaQuotes对存储历史的格式(MqlRates)做得过多(过少)。 这是可以理解的。 在外汇市场上开发这种格式时,固定点差占上风,市场(浮动)点差 仍是异类。尽管很明显,即使是固定的点差事实上也是浮动的,因为经纪公司 "在市场出现新闻和快速变化的时候不保证其固定性"(这里的倒逗号代表引用了那个时期几乎所有经纪公司的一个典型报价)。
MT5最初被定位为一个交易所终端。而在交易所的ECN-价格形成法则是很久之前的事。所以,缺陷的借口是站不住脚的。他 们的团队中没有(现在也没有)一个强大的自动交易商,可以听取他们的意见。显然,只有 "成功的平台开发年限 "比健全的逻辑规则。
我不是要找借口。要找借口,你必须先指责。我真的没有时间....。:)
那么它就是一种放纵(应该对这种事情保持警惕--它比赤裸裸的批评更糟糕)。
当存储历史数据的格式(MqlRates)被开发出来时,MetaQuotes当然是做得过头了(underdid)。这是可以理解 的。 当该格式在外汇市场被开发出来时,固定点差占上风,市场(浮动)点差仍然是异类。尽管很明显,即使是固定的点差事实上也是浮动的,因为经纪公司 "在市场出现新闻和快速变化的时候不保证其固定性"(这里的倒逗号代表引用了那个时期几乎所有经纪公司的一个典型报价)。
忽视差距在某些情况下将是至关重要的
然后就是居高临下(小心这种东西--比赤裸裸的批评更糟糕)。
:-)
对我来说,现在喝borjomi或者弥补已经有点晚了。地狱里早已为我保留了一个位置。
我不认为试图不加判断地理解是我最严重的罪过。;)