エラー、バグ、質問 - ページ 2010

削除済み  
Andrey Dik:
がゼロを返しますが、これは正常ですか?
ひょっとして、OHLCのM1モードや始値で テストしているのでしょうか?
 
Alexey Kozitsyn:
ひょっとして、OHLCのM1モードや始値で テストしているのでしょうか?
いいえ、「ticks」と「real ticks」の両方を試しましたが、構造体配列がゼロでいっぱいになることもあれば、部分的になることもありました。
 

どなたか、このEAをテスターで様々なテスト モードで試してみてください。

//——————————————————————————————————————————————————————————————————————————————
input  int                     AveTicksPeriod_P       = 20;

MqlTick G_Ticks [];

//——————————————————————————————————————————————————————————————————————————————
int OnInit ()
{
  // сделаем начальную синхронизацию
  GetLastRequredTicks (Symbol (), AveTicksPeriod_P, G_Ticks, true, COPY_TICKS_INFO, 0);

  return (INIT_SUCCEEDED);
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
void OnTick ()
{
  Print ("---------------------");

  if(!GetLastRequredTicks (Symbol (), AveTicksPeriod_P, G_Ticks, true, COPY_TICKS_INFO, 0))
  {
    Print ("Ошибка получения тиков " + (string)ArraySize (G_Ticks));
    return;
  }

  int errors = 0;

  for(int i = 0; i < AveTicksPeriod_P; i++)
    if(G_Ticks [i].bid <= 0.0)
    {
      Print (G_Ticks [i].bid);
      errors++;
    }
  
  if(errors > 0)
    Print ("errors: " + (string)errors);
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
// Получение последних тиков c в указанном количестве,
// попытки в течении указанного времени в мс
bool GetLastRequredTicks (string   symbol,                 //символ
                          int      count,                  //количество
                          MqlTick &ticks [],                //массив для приёма тиков
                          bool     timeseries = true,      //0-й элемент самый свежий или нет
                          uint     flag = COPY_TICKS_INFO, //COPY_TICKS_INFO или COPY_TICKS_TRADE или COPY_TICKS_ALL
                          ulong    waitMs = 0)             //отведённое время на получение в мкс (10(-6)с)
{
  //---
  bool    success = false;   // флаг успешного выполнения копирования тиков
  MqlTick tick_array [];     // массив для приема тиков
  if(timeseries)
    ArraySetAsSeries (ticks, timeseries);
  ZeroMemory (tick_array);
  ulong startTime   = GetMicrosecondCount ();
  ulong timeElapsed = 0; // мкс
  int   received    = 0;

  ResetLastError ();
  bool wait = true;

  while(wait)
  {
    //--- запросим тиковую историю последних тиков в указанном количестве
    received = CopyTicks (symbol, ticks, flag, 0, count);

    timeElapsed = GetMicrosecondCount () - startTime;

    // если указано допустимое время на синхронизацию
    if(waitMs > 0)
    {
      // если время превысило допустимое, то попыток больше не будет
      if(timeElapsed >= waitMs)
        wait = false;
    }

    if(received == count)
    {
      //--- выведем информацию о количестве тиков и затраченном времени времени
      //PrintFormat ("%s: received %d ticks in %d mcs", _Symbol, received, timeElapsed);

      return (true);
    }

    //--- пауза в 0.1 секунду в ожидании завершения синхронизации тиковой базы
    Sleep (100);
  }

  return (false);
}
//——————————————————————————————————————————————————————————————————————————————


ポイントは、各ティックで最も新鮮なティックを指定された数だけ取得することです。ゼロは、大声で出てきます。

Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
削除済み  
Andrey Dik:

どなたか、このEAをテスターで様々なテスト モードで試してみてください。


ポイントは、各ティックで最も新鮮なティックを指定された数だけ取得することです。ゼロは、大声で出てきます。


Ticks   EURUSD: ticks synchronization started
OE      0       00:31:42.376    Ticks   EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
KP      0       00:31:42.376    Ticks   EURUSD: history ticks synchronized from 2017.07.16 to 2017.09.20
DK      0       00:31:42.442    History EURUSD,M15: history cached from 2016.01.03 23:00
CK      0       00:31:42.442    Tester  EURUSD,M15 (): generating based on real ticks
MS      0       00:31:42.442    Tester  EURUSD,M15: testing of Experts\test_getTicks.ex5 from 2017.09.20 00:00 to 2017.09.21 00:00 started with inputs:
CO      0       00:31:42.442    Tester    AveTicksPeriod_P=20
HH      0       00:31:42.681    Ticks   EURUSD : real ticks begin from 2017.07.16 00:00:00
EL      3       00:31:42.681    Ticks   EURUSD : 2017.09.20 00:00 - 2017.09.21 00:00  last prices translation turned on for 1333 minute bars
PN      0       00:31:42.682    test_getTicks (EURUSD,M15)      2017.09.20 00:00:19   ---------------------
IE      0       00:31:42.763    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   ---------------------
LE      0       00:31:42.877    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   0.0
RP      0       00:31:42.877    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   errors: 1
FG      0       00:31:42.878    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   ---------------------
HG      0       00:31:42.949    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   0.0
FR      0       00:31:42.949    test_getTicks (EURUSD,M15)      2017.09.20 00:00:23   errors: 1
RI      0       00:31:42.950    test_getTicks (EURUSD,M15)      2017.09.20 00:00:24   ---------------------
削除済み  
Andrey Dik:

どなたか、このEAをテスターで様々なテスト モードで試してみてください。


ポイントは、各ティックで最も新鮮なティックを指定された数だけ取得することです。ゼロは、大声で出てきます。

FORTSでは何とかなりましたが、TRADE-flow(インジケータ使用)だけです。Expert Advisorが実際のティックで動作することを望んでいない...
 
Alexey Kozitsyn:
FORTSでは何とかなりましたが、TRADE-flow(インジケータ使用)だけです。あなたの専門家は、本物のティックで走る気もないのでは...。

しかし、どこに問題があるのか、何が問題なのか、それが問題なのです。

しかし、あるときエラーが発生した。

 
Andrey Dik:

どなたか、このEAをテスターで様々なテスト モードで試してみてください。


その本質は、各ティックで最も新鮮なティックを指定された数だけ取得することです。

まあ、一番新鮮な刻みを求めるなら、ゼロからではなく、現在の時間(ミリ秒)から取るべきでしょう。

    received = CopyTicks (symbol, ticks, flag, TimeCurrent()*1000, count);
 
Alexey Viktorov:

まあ、新鮮な刻みを求めるなら、ゼロからではなく、現在の時間(ミリ秒)から取るべきでしょう

ヘルプにはこう書いてある。

から

[in] 刻み目を要求する日付。1970年01月01日からのミリ秒単位で指定する。from=0 の 場合 最後の ティックカウントが 与えられる。

 

Metaeditorでmq5-fileを保存すると、その旧バージョンが保存される(時間差あり)。この場合、コンパイル時のex5は、私がMEで見たものに対応します。しかし、MEを閉じると、ファイル内のデータはすべて失われます。

別の名前で保存しようとすると、ファイルは作成されますが、MEで見るものとは違う、古いソースがあります。ドライブには確実に余裕があります。

 
このトピックに関係のないコメントは、「EAが機能しない理由」に移動しました。