构建1485之后,对CopyTicks()和CopyTicksRange()的缺陷和改进建议。 - 页 4 1234567 新评论 [删除] 2017.02.23 03:36 #31 Yury Kirillov: 尝试在你的专家顾问中使用所有可能的方式来接收ticks和OnTick以及CopyTicks,然后比较结果并使用最合适的方式。 而OnTick()与此有什么关系?它的目的不是接收所有蜱虫,而是为了处理收到蜱虫的事实。你甚至不需要在这里做任何比较,OnTick()不会在每个tick被调用,它不允许接收MqlTick结构的 所有数据。 antru 2017.03.03 07:12 #32 服务台提出在新的建筑1545上进行尝试。但是结果并没有改变,就像以前一样,为一些文件请求从上午10点到11点的刻度,返回的是零数组,然后由于某种原因,数据从11点开始进来。也许在那之后,在查询时蜱虫已经 "正常 "了,但没有任何关联性。 antru 2017.03.09 07:16 #33 这几乎是他们发出的唯一信息。已经有相当长一段时间了,服务台没有回应。无视我的信息是否正常? [删除] 2017.03.09 07:18 #34 antru: 这几乎是他们发出的唯一信息。已经有相当长一段时间了,服务台没有回应。无视我的信息是否正常? 关于无视你的信息--你有错误的分支。关于SD,有一个单独的主题。事实上,通过在申请书上写下评论来提醒他们。你是否向BOD附上了代码和其他证据? antru 2017.03.09 09:51 #35 Alexey Kozitsyn: 关于无视你的帖子--你找错了线。有一个关于SD的单独主题。事实上,通过在申请书上写下评论来提醒他们。你是否将代码和其他证据附在BOD上? 是的,当然,甚至解释了代码...沉默...谢谢你的提示,我将把它放在一个单独的主题中 antru 2017.03.16 06:23 #36 制作了调试代码来检查CopyTicksRange。虽然服务台长期处于沉默状态,但我想知道代码中 是否有错误。我的眼睛一定是瞪大了......。请用新的眼光来看待它。下面是代码,请附上结果。第一个压缩包--在交易前开始Metatrader,第二个压缩包--在美国东部时间晚上10:30开始(调试文件中的时间少了3小时)。我不明白为什么在第一轮观察中,任何纸张上都没有蜱虫回来。在所有。乡亲们,你们是如何实时获得磁带的呢?也许我在重新发明轮子,做错了什么,你能给我一个例子代码,说明如何实时获得文件上的刻度吗?//+------------------------------------------------------------------+ //| Smelchak.mq5 | //| Pavel&Antru | //| | //+------------------------------------------------------------------+ #property copyright "Pavel&Antru" #property link "" #property version "1.00" bool g_bEnterInfoSent = false; datetime g_dEndOfTheDay; datetime g_dDayBegin; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetTimer(3); MqlDateTime startTime; TimeGMT(startTime); startTime.hour = 7; startTime.min = 0; startTime.sec = 0; g_dDayBegin = StructToTime(startTime); startTime.hour = 17; startTime.min = 0; startTime.sec = 0; g_dEndOfTheDay = StructToTime(startTime); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ void OnTimer() { MqlDateTime mdt; datetime dCurrent = TimeCurrent(mdt); if (!g_bEnterInfoSent && mdt.hour + 3 == 9) { MqlDateTime startTime; TimeGMT(startTime); startTime.hour = 7; startTime.min = 0; startTime.sec = 0; g_dDayBegin = StructToTime(startTime); startTime.hour = 17; startTime.min = 0; startTime.sec = 0; g_dEndOfTheDay = StructToTime(startTime); g_bEnterInfoSent = true; } if (g_bEnterInfoSent && mdt.hour + 3 == 22) { g_bEnterInfoSent = false; } datetime lastTime = TimeCurrent(); MqlDateTime dayBegin; TimeToStruct(g_dDayBegin, dayBegin); MqlDateTime dayEnd; TimeToStruct(g_dEndOfTheDay, dayEnd); MqlDateTime curTime; TimeToStruct(lastTime, curTime); if (true) //(lastTime >= g_dDayBegin && lastTime < g_dEndOfTheDay) { MqlTick tick[]; int nResult = CopyTicksRange(Symbol(), tick, COPY_TICKS_ALL, (ulong)g_dDayBegin*1000, (ulong)g_dEndOfTheDay*1000); int nLastError = GetLastError(); string sDebugFileName = StringFormat("%s.debug.%.04d.%.02d.%.02d.csv", Symbol(), dayBegin.year, dayBegin.mon, dayBegin.day); int nDebugOutputFile = FileOpen(sDebugFileName, FILE_READ | FILE_WRITE | FILE_CSV, ','); if (nDebugOutputFile == INVALID_HANDLE) nDebugOutputFile = FileOpen(sDebugFileName, FILE_WRITE | FILE_CSV, ','); if (nDebugOutputFile != INVALID_HANDLE) { FileSeek(nDebugOutputFile, 0, SEEK_END); MqlDateTime tickTime; if (ArraySize(tick)) { TimeToStruct(tick[0].time, tickTime); FileWrite(nDebugOutputFile, StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", dayBegin.year, dayBegin.mon, dayBegin.day, dayBegin.hour, dayBegin.min, dayBegin.sec), StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", dayEnd.year, dayEnd.mon, dayEnd.day, dayEnd.hour, dayEnd.min, dayEnd.sec), StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", curTime.year, curTime.mon, curTime.day, curTime.hour, curTime.min, curTime.sec), StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", tickTime.year, tickTime.mon, tickTime.day, tickTime.hour, tickTime.min, tickTime.sec), ArraySize(tick), nResult, nLastError); ///////////////////////////////////////////////////////// string sTicksFileName = StringFormat("%s.ticks.%.04d.%.02d.%.02d.csv", Symbol(), dayBegin.year, dayBegin.mon, dayBegin.day); int nTicksOutputFile = FileOpen(sTicksFileName, FILE_READ | FILE_WRITE | FILE_CSV, ','); if (nTicksOutputFile == INVALID_HANDLE) nTicksOutputFile = FileOpen(sTicksFileName, FILE_WRITE | FILE_CSV, ','); if (nTicksOutputFile != INVALID_HANDLE) { FileSeek(nDebugOutputFile, 0, SEEK_END); MqlDateTime tickTime; for (int i = 0; i<ArraySize(tick); i++) { TimeToStruct(tick[i].time, tickTime); FileWrite(nTicksOutputFile, StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", tickTime.year, tickTime.mon, tickTime.day, tickTime.hour, tickTime.min, tickTime.sec), tick[i].bid, tick[i].ask, tick[i].last, tick[i].volume, ((tick[i].flags & TICK_FLAG_BUY) ? "Buy" : "") + ((tick[i].flags & TICK_FLAG_SELL) ? "Sell" : "")); } FileClose(nTicksOutputFile); } ///////////////////////////////////////////////////////// g_dDayBegin = dCurrent; } else { FileWrite(nDebugOutputFile, StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", dayBegin.year, dayBegin.mon, dayBegin.day, dayBegin.hour, dayBegin.min, dayBegin.sec), StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", dayEnd.year, dayEnd.mon, dayEnd.day, dayEnd.hour, dayEnd.min, dayEnd.sec), StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", curTime.year, curTime.mon, curTime.day, curTime.hour, curTime.min, curTime.sec), "No ticks", ArraySize(tick), nResult, nLastError); } FileClose(nDebugOutputFile); } } } 附加的文件: backup.01.zip 292 kb backup.02.zip 271 kb fxsaber 2017.03.16 06:30 #37 antru:朋友们,你们是如何实时获取信息的? 关于交易、自动交易系统和交易策略测试的论坛 神秘的股票指标 fxsaber, 2016.10.04 11:28 long LastTime = 0; // time_msc-время последнего тика (самого свежего), полученного из истории int Count = 0; // Количество тиков в последенем запросе, у которых time_msc == LastTime // Возвращает свежие тики, пришедшие после предыдущего вызова int GetFreshTicks( MqlTick &Ticks[], const uint flags = COPY_TICKS_TRADE, const uint count = 100000 ) { int Res = 0; MqlTick NewTicks[]; const int NewAmount = CopyTicks(Symbol(), NewTicks, flags, LastTime, count); if ((NewAmount > 0) && (Count < NewAmount)) { Res = ArrayCopy(Ticks, NewTicks, 0, Count); // Взяли крайнее время из текущей истории LastTime = NewTicks[NewAmount - 1].time_msc; Count = 1; // Находим (Count) в текущей истории количество тиков со временем LastTime for (int i = NewAmount - 2; i >= 0; i--) { if (NewTicks[i].time_msc < LastTime) break; Count++; } } return(Res); } antru 2017.03.16 07:15 #38 fxsaber: 由于某些原因,无论是根据旧的算法还是新的算法,都不再显示当前日期的刻度线......而且无论窗口中是否启用色带......。这里是我插入你的函数的代码...//+------------------------------------------------------------------+ //| Smelchak.mq5 | //| Pavel&Antru | //| | //+------------------------------------------------------------------+ #property copyright "Pavel&Antru" #property link "" #property version "1.00" bool g_bEnterInfoSent = false; datetime g_dEndOfTheDay; datetime g_dDayBegin; long LastTime = 0; // time_msc-время последнего тика (самого свежего), полученного из истории int Count = 0; // Количество тиков в последенем запросе, у которых time_msc == LastTime // Возвращает свежие тики, пришедшие после предыдущего вызова int GetFreshTicks( MqlTick &Ticks[], const uint flags = COPY_TICKS_TRADE, const uint count = 100000 ) { int Res = 0; MqlTick NewTicks[]; const int NewAmount = CopyTicks(Symbol(), NewTicks, flags, LastTime, count); if ((NewAmount > 0) && (Count < NewAmount)) { Res = ArrayCopy(Ticks, NewTicks, 0, Count); // Взяли крайнее время из текущей истории LastTime = NewTicks[NewAmount - 1].time_msc; Count = 1; // Находим (Count) в текущей истории количество тиков со временем LastTime for (int i = NewAmount - 2; i >= 0; i--) { if (NewTicks[i].time_msc < LastTime) break; Count++; } } return(Res); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetTimer(3); MqlDateTime startTime; TimeGMT(startTime); startTime.hour = 7; startTime.min = 0; startTime.sec = 0; g_dDayBegin = StructToTime(startTime); startTime.hour = 17; startTime.min = 0; startTime.sec = 0; g_dEndOfTheDay = StructToTime(startTime); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { } //+------------------------------------------------------------------+ void OnTimer() { MqlDateTime mdt; datetime dCurrent = TimeCurrent(mdt); if (!g_bEnterInfoSent && mdt.hour + 3 == 9) { MqlDateTime startTime; TimeGMT(startTime); startTime.hour = 7; startTime.min = 0; startTime.sec = 0; g_dDayBegin = StructToTime(startTime); startTime.hour = 17; startTime.min = 0; startTime.sec = 0; g_dEndOfTheDay = StructToTime(startTime); g_bEnterInfoSent = true; } if (g_bEnterInfoSent && mdt.hour + 3 == 22) { g_bEnterInfoSent = false; } datetime lastTime = TimeCurrent(); if (true) { MqlTick tick[]; int nResult = GetFreshTicks(tick); MqlDateTime tickTime; if (ArraySize(tick)) { TimeToStruct(tick[0].time, tickTime); string sTicksFileName = StringFormat("%s.ticks.%.04d.%.02d.%.02d.csv", Symbol(), tickTime.year, tickTime.mon, tickTime.day); int nTicksOutputFile = FileOpen(sTicksFileName, FILE_READ | FILE_WRITE | FILE_CSV, ','); if (nTicksOutputFile == INVALID_HANDLE) nTicksOutputFile = FileOpen(sTicksFileName, FILE_WRITE | FILE_CSV, ','); if (nTicksOutputFile != INVALID_HANDLE) { FileSeek(nTicksOutputFile, 0, SEEK_END); MqlDateTime tickTime; for (int i = 0; i<ArraySize(tick); i++) { TimeToStruct(tick[i].time, tickTime); FileWrite(nTicksOutputFile, StringFormat("%.04d.%.02d.%.02d %.02d:%.02d:%.02d.000", tickTime.year, tickTime.mon, tickTime.day, tickTime.hour, tickTime.min, tickTime.sec), tick[i].bid, tick[i].ask, tick[i].last, tick[i].volume, ((tick[i].flags & TICK_FLAG_BUY) ? "Buy" : "") + ((tick[i].flags & TICK_FLAG_SELL) ? "Sell" : "")); } FileClose(nTicksOutputFile); } g_dDayBegin = dCurrent; } } } 结果,我在ALRS和AFLT两份文件上运行了它。蜱虫只在前几天回来过。今天没有。可能是什么问题? 附加的文件: Files.zip 843 kb antru 2017.03.16 07:25 #39 antru: 由于某些原因,无论是根据旧的算法还是新的算法,都不再显示当前日期的刻度线......而且无论窗口中的色带是否打开......这里是我插入你的函数的代码...结果,我在ALRS和AFLT两份文件上运行了它。蜱虫只在前几天回来过。今天没有。会是什么呢?在功能区的窗口里有刻度,我保存了100000个最后的刻度--今天没有刻度。 附加的文件: Documents.zip 812 kb antru 2017.03.16 07:40 #40 但现在出现了抽搐。会是什么呢?这是谁的错?那个经纪人?Metatrader? 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
尝试在你的专家顾问中使用所有可能的方式来接收ticks和OnTick以及CopyTicks,然后比较结果并使用最合适的方式。
这几乎是他们发出的唯一信息。已经有相当长一段时间了,服务台没有回应。无视我的信息是否正常?
关于无视你的帖子--你找错了线。有一个关于SD的单独主题。事实上,通过在申请书上写下评论来提醒他们。你是否将代码和其他证据附在BOD上?
是的,当然,甚至解释了代码...沉默...谢谢你的提示,我将把它放在一个单独的主题中
制作了调试代码来检查CopyTicksRange。虽然服务台长期处于沉默状态,但我想知道代码中 是否有错误。我的眼睛一定是瞪大了......。请用新的眼光来看待它。
下面是代码,请附上结果。第一个压缩包--在交易前开始Metatrader,第二个压缩包--在美国东部时间晚上10:30开始(调试文件中的时间少了3小时)。
我不明白为什么在第一轮观察中,任何纸张上都没有蜱虫回来。
在所有。乡亲们,你们是如何实时获得磁带的呢?也许我在重新发明轮子,做错了什么,你能给我一个例子代码,说明如何实时获得文件上的刻度吗?
朋友们,你们是如何实时获取信息的?
关于交易、自动交易系统和交易策略测试的论坛
神秘的股票指标
fxsaber, 2016.10.04 11:28
由于某些原因,无论是根据旧的算法还是新的算法,都不再显示当前日期的刻度线......而且无论窗口中是否启用色带......。
这里是我插入你的函数的代码...
结果,我在ALRS和AFLT两份文件上运行了它。蜱虫只在前几天回来过。今天没有。可能是什么问题?
由于某些原因,无论是根据旧的算法还是新的算法,都不再显示当前日期的刻度线......而且无论窗口中的色带是否打开......
这里是我插入你的函数的代码...
结果,我在ALRS和AFLT两份文件上运行了它。蜱虫只在前几天回来过。今天没有。会是什么呢?
在功能区的窗口里有刻度,我保存了100000个最后的刻度--今天没有刻度。