ビルド1485以降のCopyTicks()とCopyTicksRange()の改善に関するバグと提案。 - ページ 4 1234567 新しいコメント 削除済み 2017.02.23 03:36 #31 Yury Kirillov: Expert Advisor でティック、OnTick、CopyTicks の受信方法を可能な限り使用し、その結果を比較して最も適切なものを使用してください。 それとOnTick()はどう関係があるのでしょうか?全てのテロップを受信するのではなく、テロップ受信の事実を処理するためのものです。ここでは何も比較する必要はありません。OnTick()は毎ティック呼び出されるわけではないので、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をチェックするデバッグコードを作成しました。サービスデスクが永久に沈黙する中、「コードに間違いが あるのでは?目が曇っていたのでしょう...。ぜひ、新鮮な目で見てください。以下はそのコードで、結果を添付します。1番目のzipは取引前のメタトレーダー開始、2番目のzipは米国東部時間午後10時30分開始(デバッグファイルの時間は3時間短縮されています)。最初のZIPでは、どの紙でもダニが戻ってこなかったのが理解できない。まったく。皆さん、リアルタイムでテープを手に入れるにはどうしたらいいのでしょうか?多分、私は車輪の再発明と何か間違ったことをしていると思いますが、リアルタイムで論文のティックを取得する方法について、サンプルコードを教えてください。//+------------------------------------------------------------------+ //| 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の2つの論文で実行しました。ダニが戻ってきたのは前の日だけ。本日はありません。何が問題なのでしょうか? ファイル: Files.zip 843 kb antru 2017.03.16 07:25 #39 antru: なぜか、古いアルゴリズムと新しいアルゴリズムの両方で、現在の日の目盛りがまったく表示されなくなりました...また、ウィンドウでリボンが有効になっているかどうかに関係なく...以下は、あなたの関数を挿入したコードです。結果、ALRSとAFLTの2つの論文で実行しました。ダニが戻ってきたのは前の日だけ。本日はありません。それは何でしょう?リボン内のウィンドウにティックが表示され、前回のティックを100000個保存し、本日のティックは表示されません。 ファイル: Documents.zip 812 kb antru 2017.03.16 07:40 #40 しかし、今度はチックが出てきた。それは何でしょう?誰のせい?ブローカーは?メタトレーダー? 1234567 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
Expert Advisor でティック、OnTick、CopyTicks の受信方法を可能な限り使用し、その結果を比較して最も適切なものを使用してください。
それが、彼らのメッセージの大部分です。かなり前から、サービスデスクが対応してくれない。私のメッセージを無視するのは普通なのでしょうか?
書き込みを無視することについて - スレッドを間違えていますよ。SDについては、別スレッドがあります。実際に、アプリケーションにコメントを書くことで、思い出してもらいましょう。BODにコードなどのエビデンスを添付したのか?
はい、もちろん、コードの説明まで...。黙ご指摘ありがとうございます、別スレッドにします
CopyTicksRangeをチェックするデバッグコードを作成しました。サービスデスクが永久に沈黙する中、「コードに間違いが あるのでは?目が曇っていたのでしょう...。ぜひ、新鮮な目で見てください。
以下はそのコードで、結果を添付します。1番目のzipは取引前のメタトレーダー開始、2番目のzipは米国東部時間午後10時30分開始(デバッグファイルの時間は3時間短縮されています)。
最初のZIPでは、どの紙でもダニが戻ってこなかったのが理解できない。
まったく。皆さん、リアルタイムでテープを手に入れるにはどうしたらいいのでしょうか?多分、私は車輪の再発明と何か間違ったことをしていると思いますが、リアルタイムで論文のティックを取得する方法について、サンプルコードを教えてください。
皆さん、リアルタイムで配信を受けるにはどうすればいいのでしょうか?
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
謎の株価指標
fxsaber さん 2016.10.04 11:28
なぜか、古いアルゴリズムと新しいアルゴリズムの両方で、現在の日の目盛りがまったく表示されなくなりました...また、ウィンドウでリボンが有効になっているかどうかに関係なく...
以下は、あなたの関数を挿入したコードです。
結果、ALRSとAFLTの2つの論文で実行しました。ダニが戻ってきたのは前の日だけ。本日はありません。何が問題なのでしょうか?
なぜか、古いアルゴリズムと新しいアルゴリズムの両方で、現在の日の目盛りがまったく表示されなくなりました...また、ウィンドウでリボンが有効になっているかどうかに関係なく...
以下は、あなたの関数を挿入したコードです。
結果、ALRSとAFLTの2つの論文で実行しました。ダニが戻ってきたのは前の日だけ。本日はありません。それは何でしょう?
リボン内のウィンドウにティックが表示され、前回のティックを100000個保存し、本日のティックは表示されません。