Что за котировки в тестере?

 

Установлен терминал v.5 build 687 от 03.08.2012 г.

Открыт счёт для чемпионата (та же проблема и для других брокеров и других типов счетов, в том числе и реальных).

Берём пару EURUSD и таймфрейм M1, открываем график, бросаем на него скрипт:

datetime            date_time[];
double              price_high[];
double              price_low[];
ENUM_TIMEFRAMES     time_frame;
string              symbol;

void OnStart()
{
// Инициализируем переменные окружения
        symbol="EURUSD";
        time_frame=PERIOD_M1;
// Выводим вспомагательную информацию
        Print("Брокер        ",AccountInfoString(ACCOUNT_COMPANY));
        Print("Сервер        ",AccountInfoString(ACCOUNT_SERVER));
        Print("Клиент        ",AccountInfoString(ACCOUNT_NAME));
        Print("Валюта депо   ",AccountInfoString(ACCOUNT_CURRENCY));
        Print("Счёт №        ",AccountInfoInteger(ACCOUNT_LOGIN));
        Print("Тип счёта     ",AccountInfoInteger(ACCOUNT_TRADE_MODE));
        Print("Плечо         ",AccountInfoInteger(ACCOUNT_LEVERAGE));
        Print("Макс. ордеров ",AccountInfoInteger(ACCOUNT_LIMIT_ORDERS));
        Print("Режим SO      ",AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE));
        Print("Возм. торг.?  ",AccountInfoInteger(ACCOUNT_TRADE_ALLOWED));
        Print("Возм. эксп.?  ",AccountInfoInteger(ACCOUNT_TRADE_EXPERT));
        Print("-------------------------------------------------------");
// ...заполняем массивы и выводим в лог
        for(int i=10000;i>=0;i--)
        {
                CopyTime(symbol,time_frame,i,1,date_time);
                CopyHigh(symbol,time_frame,i,1,price_high);
                CopyLow(symbol,time_frame,i,1,price_low);
                Print(date_time[0],", ",price_high[0],", ",price_low[0]);
        }
}

и имеем в логе (последние десять записей):

RD 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:51:00, 1.2512, 1.2511

LM 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:52:00, 1.25112, 1.25107

OR 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:53:00, 1.25111, 1.25102

NH 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:54:00, 1.25114, 1.2511

NP 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:55:00, 1.25131, 1.25107

IJ 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:56:00, 1.25139, 1.2513

CN 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:57:00, 1.25136, 1.25129

OD 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:58:00, 1.25127, 1.25106

PM 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 22:59:00, 1.25117, 1.25107

KR 0 trouble (EURUSD,M1) 16:37:10 2012.08.24 23:00:00, 1.25117, 1.25109

Потом на той-же паре у того-же брокера запускаем в Тестере эксперт, аналогичный скрипту:

datetime            date_time[];
double              price_high[];
double              price_low[];
ENUM_TIMEFRAMES     time_frame;
datetime            prev_bar_time_dig[1];
datetime            cur_bar_time_dig[1];
MqlDateTime         prev_bar_time_struct;
MqlDateTime         cur_bar_time_struct;
string              symbol;

int OnInit()
{
// Инициализируем переменные окружения
        symbol="EURUSD";
        time_frame=PERIOD_M1;
        prev_bar_time_dig[0]=D'2001.01.01';
        TimeToStruct(prev_bar_time_dig[0],prev_bar_time_struct);
// Выводим вспомагательную информацию
        Print("Брокер        ",AccountInfoString(ACCOUNT_COMPANY));
        Print("Сервер        ",AccountInfoString(ACCOUNT_SERVER));
        Print("Клиент        ",AccountInfoString(ACCOUNT_NAME));
        Print("Валюта депо   ",AccountInfoString(ACCOUNT_CURRENCY));
        Print("Счёт №        ",AccountInfoInteger(ACCOUNT_LOGIN));
        Print("Тип счёта     ",AccountInfoInteger(ACCOUNT_TRADE_MODE));
        Print("Плечо         ",AccountInfoInteger(ACCOUNT_LEVERAGE));
        Print("Макс. ордеров ",AccountInfoInteger(ACCOUNT_LIMIT_ORDERS));
        Print("Режим SO      ",AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE));
        Print("Возм. торг.?  ",AccountInfoInteger(ACCOUNT_TRADE_ALLOWED));
        Print("Возм. эксп.?  ",AccountInfoInteger(ACCOUNT_TRADE_EXPERT));
        Print("-------------------------------------------------------");
        return(0);
}

void OnDeinit(const int reason)
{
}

void OnTrade()
{
}

void OnTick()
{
// Если новый бар...
        if(IsNewBars()==true)
        {
// ...заполняем массивы и выводим в лог
                CopyTime(symbol,time_frame,0,1,date_time);
                CopyHigh(symbol,time_frame,0,1,price_high);
                CopyLow(symbol,time_frame,0,1,price_low);
                Print(date_time[0],", ",price_high[0],", ",price_low[0]);
        };
}

// Определяем, не наступил ли новый бар
bool IsNewBars()
{
        CopyTime(symbol,time_frame,0,1,cur_bar_time_dig);
        TimeToStruct(cur_bar_time_dig[0],cur_bar_time_struct);
        if(time_frame==PERIOD_M1||
           time_frame==PERIOD_M2||
           time_frame==PERIOD_M3||
           time_frame==PERIOD_M4||
           time_frame==PERIOD_M5||
           time_frame==PERIOD_M6||
           time_frame==PERIOD_M10||
           time_frame==PERIOD_M12||
           time_frame==PERIOD_M15||
           time_frame==PERIOD_M20||
           time_frame==PERIOD_M30)
                if(cur_bar_time_struct.min!=prev_bar_time_struct.min)
                {
                        prev_bar_time_dig[0]=cur_bar_time_dig[0];
                        TimeToStruct(prev_bar_time_dig[0],prev_bar_time_struct);
                        return(true);
                };
        if(time_frame==PERIOD_H1||
           time_frame==PERIOD_H2||
           time_frame==PERIOD_H3||
           time_frame==PERIOD_H4||
           time_frame==PERIOD_H6||
           time_frame==PERIOD_H8||
           time_frame==PERIOD_H12)
                if(cur_bar_time_struct.hour!=prev_bar_time_struct.hour)
                {
                        prev_bar_time_dig[0]=cur_bar_time_dig[0];
                        TimeToStruct(prev_bar_time_dig[0],prev_bar_time_struct);
                        return(true);
                };
        if(time_frame==PERIOD_D1||
           time_frame==PERIOD_W1)
                if(cur_bar_time_struct.day!=prev_bar_time_struct.day)
                {
                        prev_bar_time_dig[0]=cur_bar_time_dig[0];
                        TimeToStruct(prev_bar_time_dig[0],prev_bar_time_struct);
                        return(true);
                };
        if(time_frame==PERIOD_MN1)
                if(cur_bar_time_struct.mon!=prev_bar_time_struct.mon)
                {
                        prev_bar_time_dig[0]=cur_bar_time_dig[0];
                        TimeToStruct(prev_bar_time_dig[0],prev_bar_time_struct);
                        return(true);
                };
        return(false);
}

и имеем в логе (последние десять записей):

KG 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:51:00   2012.08.24 22:51:00, 1.25119, 1.25119

MK 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:52:00   2012.08.24 22:52:00, 1.25108, 1.25108

OO 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:53:00   2012.08.24 22:53:00, 1.25107, 1.25107

QS 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:54:00   2012.08.24 22:54:00, 1.25111, 1.25111

CG 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:55:00   2012.08.24 22:55:00, 1.25111, 1.25111

EK 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:56:00   2012.08.24 22:56:00, 1.25132, 1.25132

GO 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:57:00   2012.08.24 22:57:00, 1.25135, 1.25135

IS 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:58:00   2012.08.24 22:58:00, 1.25127, 1.25127

KF 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 22:59:00   2012.08.24 22:59:00, 1.25108, 1.25108

MJ 0 trouble (EURUSD,M1) 16:37:39 2012.08.24 23:00:00   2012.08.24 23:00:00, 1.25116, 1.25116

Вопрос: почему скрипт в лог выводит то, что отображается на графике, а эксперт, загнанный в тестер - только цены открытия? У всех ли так (прошу прогнать скрипт и эксперт), если не так и эксперт в лог выводит аналогично скрипту - что я в терминале мог сделать не так?

Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
Операции с графиками / ChartOpen - Документация по MQL5
Файлы:
 
Rich:



Вопрос: почему скрипт в лог выводит то, что отображается на графике, а эксперт, загнанный в тестер - только цены открытия? У всех ли так (прошу прогнать скрипт и эксперт), если не так и эксперт в лог выводит аналогично скрипту - что я в терминале мог сделать не так?

При открытии бара хай и лоу равны цене открытия бара.
 
marketeer:
При открытии бара хай и лоу равны цене открытия бара.
Млин, точно, спасибо.
Причина обращения: