mql5语言的特点、微妙之处以及技巧 - 页 157

 
Andrey Khatimlianskii:

你好!

MT4的离线图表的类似物是castum instruments。你可以填写任何历史记录,包括使1条=1刻度。

但是,像MT4一样,每个条形图都必须与前一个条形图在时间上至少相差一分钟,所以不会有正常的时间刻度。

ps:这里有一个现成的指标 -https://www.mql5.com/en/blogs/post/719145

在MT4中,条形图的时间只需要比前一个条形图长,然后MT4就会显示条形图,也就是说,在MT4中,你可以在离线图表上绘制精确到秒的条形图,我在QB中发布了一个秒图

但在MT5中这是 "行不通的",如果你试图向自定义符号发送2个具有相同开盘时间的条形图,而不考虑秒数,那么将只显示一个条形图,也就是说,MT5自定义图表中小于M1的精度将无法工作。

 
fxsaber:

这里有 一张图。它是有效的。

不移动TA?它每次都能发挥作用吗?没有比运气更好的了。


fxsaber:

可以/应该容忍的完美的边界在哪里?偶尔出现的回归和重新报价与测试员有什么关系?

这与再出价没有关系。

无论是在测试器中还是在实时中,限价订单都不需要以最后的已知价格 执行。在其发送过程中,价格可以去任何地方。

另一个问题是,在0-th滞后的模式下(理想的执行),测试者可以假装订单已经发送到经纪商并立即执行,但我看不到任何利润,因为我重复,如果在真实情况下会发生相反的情况,理想的测试就没有意义。

 
Igor Makanu:

在MT4中,条形图的时间只需比前一个条形图长,然后MT4就会显示条形图,也就是说,在MT4中,你可以在离线图表上绘制条形图到最接近的秒数,我在KB中发布了一个秒图。

谢谢你的编辑,我已经忘记了。从前,如果时间不是分钟的倍数,肯定会出现错误,后来似乎也是这样。

你肯定不能在5中这样做。

 
Andrey Khatimlianskii:

你好!

MT4的离线图表的类似物是castum instruments。你可以填写任何历史记录,包括使1条=1刻度。

但是,像MT4一样,每个条形图必须与前一个条形图在时间上至少相差一分钟,所以不会有一个正常的时间线。

ps:这里有一个现成的指标 -https://www.mql5.com/en/blogs/post/719145

哦,定制的符号就是这样的东西 !而滴答时间对我来说并不重要。谢谢,这是一个正确方向的冲动。)))

 
Andrey Khatimlianskii:

不移动TA?它是否每次都能正常工作?没有比运气更好的了。

不,当然不是。这就是为什么循环的原因。

关于交易、自动交易系统和策略测试的论坛

mql4语言的特点,错综复杂的问题和技巧

fxsaber, 2019.12.13 00:27

计划中的紧急平仓 是按以下方式进行的
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
当然,是在循环中。你有什么其他选择吗?

规章制度与此无关。

无论是在测试器中还是在现实生活中,限制器都不必在最后的已知价格 上被触发。在发送的过程中,价格可以去任何地方。

另一点是,在0延迟(理想执行)的模式下,测试者可以假装订单已经发送到经纪商并立即执行,但我认为这没有任何好处,因为,同样,如果在现实世界中会发生相反的情况,理想的测试就没有意义。

在现实中,它要么是以当前价格(或更好的价格)全部(或部分)执行,要么是反驳。也就是说,执行可能是完美的,也可能是不完美的。

因此,测试器对市场总是表现完美,而对限价订单总是失败。

 
fxsaber:

这意味着测试器对一个市场总是表现得很完美,但对一个限制者却不是。

我宁愿为一个市场做下一个刻度。对测试者来说,显示损失比真实损失要好。而圣杯 也不可能因此而丢失。

 
Andrey Khatimlianskii:

在这里,我宁愿为市场做执行的下一个刻度。测试器显示的暴跌比真实的暴跌要好。而圣杯也不可能因此而丢失。

下一个刻度线是不正确的,你的市场应该产生一个刻度线,并以最近的出价或要价执行,同时考虑到交易的数量
限价也应该根据成交量以保证价格来填补。
现在做的所有其他算法,只是误导,得到真正的结果。
由于这个原因,我根本不使用测试器。没有任何意义,当在最基本的问题上,有一个执行的替代。

 
Roman:

下一个"√"是不正确的,你的市场应该产生一个"√",并将在考虑到交易量的 情况下,以最近的出价或要价执行。
限价单也应根据成交量以保证价格成交。
现在做的所有其他算法,只是误导,得到真正的结果。
由于这个原因,我根本不使用测试器。没有任何意义,当在最基本的问题上,有一个执行的替代。

嗯,为此你需要杯子的历史,或者至少需要极端的买入/卖出量。而且没有任何。

而一个市场不应该在测试器中产生一个刻度,否则历史记录将取决于被测试的策略。

 
Andrey Khatimlianskii:

嗯,为此你需要杯子的历史,或者至少需要极端的买入/卖出量。而且没有任何。

而且市场不应该在测试器中产生嘀嗒声,否则历史数据将取决于被测试的策略。

正如一位主持人所说,mt5是为股票市场开发的。
但看看测试器的执行情况,它的发展已经被简化为同样的交易执行原则,甚至在真实的ticks上。

那么你是如何测试的呢?根据什么历史数据?
然后你是否相信这种历史引证上的检验?
:))

当然,你需要有蜱虫病史,并对真正的蜱虫进行测试。
从哪里得到蜱虫史是用户的问题,自己收集,购买,从拥有蜱虫史的人那里拿,等等。

是的,我同意现在不保存出价确定的数量,但有什么能阻止开发人员增加三栏呢

  1. 音量栏问
  2. 体积栏 投标
  3. 栏目 最后交易方向,买入或卖出


然后,所有关于在真实蜱虫上进行测试的正确性的问题将自动消失。
交易所订单在测试器中的执行将如常进行。

是的,生成的tick,不是这样的,我的意思是,在测试器中的市场应该在最近的Bid Asks执行,收集价格水平的流动性。
也就是说,如果我们发送一个成交量为25的BuyMarket,执行价格将聚集在两个级别,即10和15,并自动对头寸的净价格进行平均。

182.13 问1 15
182.12 问0 10
--------------------
182.11 Bid0 5
182.10 Bid1 8

对于限价单,最后一笔交易的成交量应该在限价单的保证价位上填补您的限价单的成交量。
也就是说,你的限价单应该是部分成交。如果您的限价单的成交量为25,那么最后一笔成交量为5的交易将从您的限价单中取出5。
你的限价单现在有20个成交量,下一个 最后一笔交易以10个成交量通过,你的限价单现在有10个成交量。
另一个 最后一笔交易通过,交易量为10,你的限价单被完全填满。
如果价格反转,没有执行你的限价单的全部量,这就是真实的情况,真实的执行。
而你剩余的限价订单量继续等待,直到Last再次来找它,或者你自己撤回该订单。

因此,在测试器中实现算法的方式,与现实毫无关系。
这就像一个洗眼的玩具。


 

我不是在摆弄我的POD结构来打开一种格式。在结构上有许多领域。有些结构是继承的,有些有私人字段。


总之,为了编辑所研究的格式,将这些结构归零的任务出现了。而且没有任何东西真的出来。因此,我决定使用这个变体。

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


申请。

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


欢迎提供替代方案。