实时的提基 - 页 3 12345678910...26 新评论 Sergey Chalyshev 2020.01.27 00:19 #21 Aleksey Mavrin: 老实说,我不明白你想让我在这个链接中读到什么关于ECN的内容,尤其是一些以前不知道的东西) 我有吗?是你想要的东西。))) 你不了解外汇市场和交易所之间的区别,所以我给了你链接。 请不要在交流部分乱放外汇。 Aleksey Mavrin 2020.01.27 03:46 #22 Sergey Chalyshev: 我想这样做吗?你是那个想要什么的人。))) 你不明白外汇和交易所的区别,所以我给了你链接。 请不要在交流部分乱放外汇。 是的,我真的希望人们能够清楚地交流,但这是无法实现的,所以我们必须满足于我们所拥有的。 而且你可能也不明白一些事情,你想过吗?以你发布的链接为例) 还有一件事--我不是那个一开始就提到外汇的人,我正在介入已经开始的讨论。首先。 B 2 - 有人禁止在交流部分进行讨论,将不同的市场与股票市场进行比较? 还有3--让我们停止标点符号的使用,就像滑雪者与滑雪板运动员一样,或者你反对这样做? Vladimir Mikhailov 2020.01.28 08:50 #23 一个小总结,有关于抽搐分析的实验。 1.OnTick处理程序跳过了大量的ticks。 所以,如果你想通过传入的tick来分析一条条的交易,那就没有意义了。 采用这种方法,在测试器中的算法结果和真实的交易结果将是不同的。 作为一种选择,你可以通过使用CopyTicks()或CopyTicksRange()函数来获取历史上的ticks,从而分析选定时期或一定数量的最后一次交易的条形。 在这种情况下,在测试器中测试算法的结果和真实交易结果是一样的。 其缺点是算法的性能较低。 2.OnBookEvent的事件数量远远大于历史上的ticks数量,这是可以理解的,因为除了ticks之外,这个事件还处理ticks的变化。 因此,似乎所有传入的ticks都可以用这个事件进行分析。 然而,情况并非如此,并不是所有的交易都会通过滴答。 市场订单可能不会通过滑块,但它们会反映在交易反馈中。 其原因是,市场滑块实际上是一个订单簿,如果所需条件得到满足,这些订单就会等待执行。 例子 - 一个交易没有通过OnEventBook处理程序(这多达5个点)。 与第一种变体一样,解决方案也是对历史数据的分析。 这种解决方案的缺点是不可能在测试器中进行测试。测试器中的刻度线变化的事件没有产生。 3.嘀嗒标志中没有记录的8位从未得到答复。我在另一个论坛主题中也问了同样的问题。 我已经决定了分析各行业的进货方式--通过历史,尽管生产力下降。 这使我在测试器中测试算法时能够得到可靠的结果。 谢谢大家的想法和讨论。 prostotrader 2020.01.28 12:48 #24 Vladimir Mikhailov: 一个小总结,有关于抽搐分析的实验。 1.OnTick处理程序跳过了大量的ticks。 所以,如果你想通过传入的tick来分析一条条的交易,那就没有意义了。 采用这种方法,在测试器中的算法结果和真实的交易结果将是不同的。 作为一种选择,你可以通过使用CopyTicks()或CopyTicksRange()函数来获取历史上的ticks,从而分析选定时期或一定数量的最后一次交易的条形。 在这种情况下,在测试器中测试算法的结果和真实交易结果是一样的。 其缺点是算法的性能较低。 2.OnBookEvent的事件是显著的..... 但事实并非如此,并不是所有的交易都要经过这本书。 例子 - 一个交易没有经过OnEventBook处理程序(而且是5个点那么多)。 3.嘀嗒标志中没有记录的8位从未得到答复。我在另一个论坛主题中也问了同样的问题。 2.请公布你的tick builder的代码(我肯定你做错了什么)。 3.在打印机中,做EnumToString(flags)的动作 Vladimir Mikhailov 2020.01.29 06:43 #25 prostotrader:2.发布你的打钩器代码(我肯定你做错了什么)。3.在打印机中做EnumToString(flags) 代码是通常的、最小的。OnBookEvent获得最后一个已知的勾选,并将其打印出来。 //+------------------------------------------------------------------+ //| TicksCollector.mq5 | //| Copyright 2020, Vladimir Mikhailov | //| mikh.vl@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Vladimir Mikhailov" #property link "mikh.vl@gmail.com" #property version "1.00" MqlTick tick[1]; int counter=0; string type; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- MarketBookAdd(_Symbol); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- MarketBookRelease(_Symbol); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnBookEvent(const string& symbol) { CopyTicks(_Symbol,tick,COPY_TICKS_ALL,0,1); counter++; if((tick[0].flags&TICK_FLAG_BID)==TICK_FLAG_BID || (tick[0].flags&TICK_FLAG_ASK)==TICK_FLAG_ASK) { printf("Symbol: %s; tick #: %d; flags: %d; Time: %s.%03d; Ask: %s; Bid: %s", _Symbol, counter, tick[0].flags, TimeToString(tick[0].time,TIME_MINUTES|TIME_SECONDS),tick[0].time_msc%1000, DoubleToString(tick[0].ask,_Digits), DoubleToString(tick[0].bid,_Digits)); } else if((tick[0].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY || (tick[0].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL) { type=(tick[0].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY? "Buy": (tick[0].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL? "Sell": ""; printf("Symbol: %s; tick #: %d; flags: %d; Time: %s.%03d; Volume: %.0f; Type: %s; Last: %s", _Symbol, counter, tick[0].flags, TimeToString(tick[0].time,TIME_MINUTES|TIME_SECONDS),tick[0].time_msc%1000, tick[0].volume_real, type, DoubleToString(tick[0].last,_Digits)); } } //+------------------------------------------------------------------+ 关于第三点--刻度线不是一个枚举,所以EnumToString函数对它们不适用。 prostotrader 2020.01.29 08:26 #26 Vladimir Mikhailov: 代码是朴素的,最小的。OnBookEvent事件获得最后一个已知的勾选,并将其打印出来。 关于第三点--刻度线不是一个枚举,所以EnumToString函数对它们不适用。 你复制1个勾,并希望没有跳过:) OnBookEvent()是由tick中的任何变化触发的,但在一个时间点上 可能会有几个虱子。终端收到的不是一个tick,而是一包tick。 我推荐的指标(所有交易的胶带)有一个描述 在俄罗斯。不要偷懒,读一读吧。 Vladimir Mikhailov 2020.01.29 08:28 #27 prostotrader: 你复制了1个勾,并希望没有跳过:) OnBookEvent()是由玻璃的任何变化触发的,但在一个时间点上 可以有几个小点。终端收到的不是一个tick,而是一包tick。 我推荐的指标(所有交易的胶带)有一个描述 在俄罗斯。不要偷懒去读它。 观看不止一次的打勾,是对历史的颠覆。 prostotrader 2020.01.29 08:54 #28 Vladimir Mikhailov: 观看不止一次的嘀嗒声是对历史的一种呼吁。 你根本不了解终端的工作原理。 阅读指标中的评论!!!。 //+------------------------------------------------------------------+ //| Ticks_test.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" //--- bool is_book; MqlTick ticks[]; ulong last_time; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { is_book = MarketBookAdd(Symbol()); int result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1); if(result > 0) { last_time = ticks[0].time_msc; } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- if(is_book == true) MarketBookRelease(Symbol()); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(Symbol() == symbol) { int result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0); if(result > 0) { for(int i= 0; i<result; i++) { if((ticks[i].flags&TICK_FLAG_ASK)==TICK_FLAG_ASK) Print("Tick is ", "TICK_FLAG_ASK"); else if((ticks[i].flags&TICK_FLAG_BID)==TICK_FLAG_BID) Print("Tick is ", "TICK_FLAG_BID"); else if((ticks[i].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY) Print("Tick is ", "TICK_FLAG_BUY"); else if((ticks[i].flags&TICK_FLAG_LAST)==TICK_FLAG_LAST) Print("Tick is ", "TICK_FLAG_LAST"); else if((ticks[i].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL) Print("Tick is ", "TICK_FLAG_SELL"); else if((ticks[i].flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) Print("Tick is ", "TICK_FLAG_VOLUME"); else Print("Unknown flag is ", ticks[i].flags); } last_time = ticks[0].time_msc + 1; } } } //+------------------------------------------------------------------+ 2020.01.29 10:51:42.077 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_ASK 2020.01.29 10:51:42.077 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_ASK 2020.01.29 10:51:42.077 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:51:42.121 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:51:42.194 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:51:50.903 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:51:52.235 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:51:52.399 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:52:05.174 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:52:24.630 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_BID 2020.01.29 10:52:24.630 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_LAST 2020.01.29 10:52:28.027 Ticks_test (GOLD-3.20,M1) Tick is TICK_FLAG_LAST 添加 在上面的例子中,并不是所有的蜱虫都被 "捕获",因为新到的蜱虫包 可能包含有以前的时间的蜱虫。 仔细研究代码 "Ribbon of all trades"(它有注释)。 prostotrader 2020.01.29 09:43 #29 如果你觉得理解指标代码很困难(或懒惰),那么 请看更简单的代码,一个适当的实时收集器的所有刻度 的代码 //+------------------------------------------------------------------+ //| Ticks_test.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" //--- bool is_book; MqlTick ticks[]; ulong last_time, mem_time; bool is_first; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { is_first = false; is_book = MarketBookAdd(Symbol()); int result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1); if(result > 0) { last_time = ticks[0].time_msc; is_first = true; } else { Alert("No start time!"); return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- if(is_book == true) MarketBookRelease(Symbol()); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(Symbol() == symbol) { int result; if(is_first == true) { Print("First packet of ticks:"); result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0); if(result > 0) { for(int i= 0; i<result; i++) { if((ticks[i].flags&TICK_FLAG_ASK)==TICK_FLAG_ASK) Print("Tick is ", "TICK_FLAG_ASK"); else if((ticks[i].flags&TICK_FLAG_BID)==TICK_FLAG_BID) Print("Tick is ", "TICK_FLAG_BID"); else if((ticks[i].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY) Print("Tick is ", "TICK_FLAG_BUY"); else if((ticks[i].flags&TICK_FLAG_LAST)==TICK_FLAG_LAST) Print("Tick is ", "TICK_FLAG_LAST"); else if((ticks[i].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL) Print("Tick is ", "TICK_FLAG_SELL"); else if((ticks[i].flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) Print("Tick is ", "TICK_FLAG_VOLUME"); else Print("Unknown flag is ", ticks[i].flags); } is_first = false; mem_time = last_time; last_time = ticks[0].time_msc + 1; } } else { result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, mem_time, 0); if(result > 0) { for(int i= 0; i<result; i++) { if(ticks[i].time_msc == mem_time) { Print("Tick with old time:"); if((ticks[i].flags&TICK_FLAG_ASK)==TICK_FLAG_ASK) Print("Tick is ", "TICK_FLAG_ASK"); else if((ticks[i].flags&TICK_FLAG_BID)==TICK_FLAG_BID) Print("Tick is ", "TICK_FLAG_BID"); else if((ticks[i].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY) Print("Tick is ", "TICK_FLAG_BUY"); else if((ticks[i].flags&TICK_FLAG_LAST)==TICK_FLAG_LAST) Print("Tick is ", "TICK_FLAG_LAST"); else if((ticks[i].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL) Print("Tick is ", "TICK_FLAG_SELL"); else if((ticks[i].flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) Print("Tick is ", "TICK_FLAG_VOLUME"); else Print("Unknown flag is ", ticks[i].flags); } } } result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0); if(result > 0) { Print("Ticks with new time:"); for(int i= 0; i<result; i++) { if((ticks[i].flags&TICK_FLAG_ASK)==TICK_FLAG_ASK) Print("Tick is ", "TICK_FLAG_ASK"); else if((ticks[i].flags&TICK_FLAG_BID)==TICK_FLAG_BID) Print("Tick is ", "TICK_FLAG_BID"); else if((ticks[i].flags&TICK_FLAG_BUY)==TICK_FLAG_BUY) Print("Tick is ", "TICK_FLAG_BUY"); else if((ticks[i].flags&TICK_FLAG_LAST)==TICK_FLAG_LAST) Print("Tick is ", "TICK_FLAG_LAST"); else if((ticks[i].flags&TICK_FLAG_SELL)==TICK_FLAG_SELL) Print("Tick is ", "TICK_FLAG_SELL"); else if((ticks[i].flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME) Print("Tick is ", "TICK_FLAG_VOLUME"); else Print("Unknown flag is ", ticks[i].flags); } mem_time = last_time; last_time = ticks[0].time_msc + 1; } } } } //+------------------------------------------------------------------+ Andrey Khatimlianskii 2020.01.29 12:31 #30 prostotrader: 请看更简单的代码,以获得一个 适当的实时收集器来收集所有刻度。 如果无论如何都要使用CopyTicks,为什么要 "实时 "收集它们? 你可以在任何时候把刻度线复制到正确的深度。 12345678910...26 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
老实说,我不明白你想让我在这个链接中读到什么关于ECN的内容,尤其是一些以前不知道的东西)
我有吗?是你想要的东西。)))
你不了解外汇市场和交易所之间的区别,所以我给了你链接。
请不要在交流部分乱放外汇。
我想这样做吗?你是那个想要什么的人。)))
你不明白外汇和交易所的区别,所以我给了你链接。
请不要在交流部分乱放外汇。
是的,我真的希望人们能够清楚地交流,但这是无法实现的,所以我们必须满足于我们所拥有的。
而且你可能也不明白一些事情,你想过吗?以你发布的链接为例)
还有一件事--我不是那个一开始就提到外汇的人,我正在介入已经开始的讨论。首先。
B 2 - 有人禁止在交流部分进行讨论,将不同的市场与股票市场进行比较?
还有3--让我们停止标点符号的使用,就像滑雪者与滑雪板运动员一样,或者你反对这样做?
一个小总结,有关于抽搐分析的实验。
1.OnTick处理程序跳过了大量的ticks。
所以,如果你想通过传入的tick来分析一条条的交易,那就没有意义了。
采用这种方法,在测试器中的算法结果和真实的交易结果将是不同的。
作为一种选择,你可以通过使用CopyTicks()或CopyTicksRange()函数来获取历史上的ticks,从而分析选定时期或一定数量的最后一次交易的条形。
在这种情况下,在测试器中测试算法的结果和真实交易结果是一样的。
其缺点是算法的性能较低。
2.OnBookEvent的事件数量远远大于历史上的ticks数量,这是可以理解的,因为除了ticks之外,这个事件还处理ticks的变化。
因此,似乎所有传入的ticks都可以用这个事件进行分析。
然而,情况并非如此,并不是所有的交易都会通过滴答。
市场订单可能不会通过滑块,但它们会反映在交易反馈中。
其原因是,市场滑块实际上是一个订单簿,如果所需条件得到满足,这些订单就会等待执行。
例子 - 一个交易没有通过OnEventBook处理程序(这多达5个点)。
与第一种变体一样,解决方案也是对历史数据的分析。
这种解决方案的缺点是不可能在测试器中进行测试。测试器中的刻度线变化的事件没有产生。
3.嘀嗒标志中没有记录的8位从未得到答复。我在另一个论坛主题中也问了同样的问题。
我已经决定了分析各行业的进货方式--通过历史,尽管生产力下降。
这使我在测试器中测试算法时能够得到可靠的结果。
谢谢大家的想法和讨论。
一个小总结,有关于抽搐分析的实验。
1.OnTick处理程序跳过了大量的ticks。
所以,如果你想通过传入的tick来分析一条条的交易,那就没有意义了。
采用这种方法,在测试器中的算法结果和真实的交易结果将是不同的。
作为一种选择,你可以通过使用CopyTicks()或CopyTicksRange()函数来获取历史上的ticks,从而分析选定时期或一定数量的最后一次交易的条形。
在这种情况下,在测试器中测试算法的结果和真实交易结果是一样的。
其缺点是算法的性能较低。
2.OnBookEvent的事件是显著的.....
但事实并非如此,并不是所有的交易都要经过这本书。
例子 - 一个交易没有经过OnEventBook处理程序(而且是5个点那么多)。
3.嘀嗒标志中没有记录的8位从未得到答复。我在另一个论坛主题中也问了同样的问题。
2.请公布你的tick builder的代码(我肯定你做错了什么)。
3.在打印机中,做EnumToString(flags)的动作
2.发布你的打钩器代码(我肯定你做错了什么)。
3.在打印机中做EnumToString(flags)
代码是通常的、最小的。OnBookEvent获得最后一个已知的勾选,并将其打印出来。
关于第三点--刻度线不是一个枚举,所以EnumToString函数对它们不适用。
代码是朴素的,最小的。OnBookEvent事件获得最后一个已知的勾选,并将其打印出来。
关于第三点--刻度线不是一个枚举,所以EnumToString函数对它们不适用。
你复制1个勾,并希望没有跳过:)
OnBookEvent()是由tick中的任何变化触发的,但在一个时间点上
可能会有几个虱子。终端收到的不是一个tick,而是一包tick。
我推荐的指标(所有交易的胶带)有一个描述
在俄罗斯。不要偷懒,读一读吧。
你复制了1个勾,并希望没有跳过:)
OnBookEvent()是由玻璃的任何变化触发的,但在一个时间点上
可以有几个小点。终端收到的不是一个tick,而是一包tick。
我推荐的指标(所有交易的胶带)有一个描述
在俄罗斯。不要偷懒去读它。
观看不止一次的打勾,是对历史的颠覆。
观看不止一次的嘀嗒声是对历史的一种呼吁。
你根本不了解终端的工作原理。
阅读指标中的评论!!!。
添加
在上面的例子中,并不是所有的蜱虫都被 "捕获",因为新到的蜱虫包
可能包含有以前的时间的蜱虫。
仔细研究代码 "Ribbon of all trades"(它有注释)。
如果你觉得理解指标代码很困难(或懒惰),那么
请看更简单的代码,一个适当的实时收集器的所有刻度 的代码
请看更简单的代码,以获得一个 适当的实时收集器来收集所有刻度。
如果无论如何都要使用CopyTicks,为什么要 "实时 "收集它们?
你可以在任何时候把刻度线复制到正确的深度。