Помогите разобраться с тетом на истории в MT5.
Тестирую в отладчике эксперта по XAUUSD на D1 с 01.01.2015.
В терминале история с 03.01.2011.
В OnInit() пытаюсь скопировать функцией CopyClose() 300 значений закрытия. Результат функции: -1
Кэш истории только за год и больше подгружать не хочет (Sleep и подкачки пробовал - не помогает)
МТ5:
результат прогона в журнале агента:
Владимир
Несколько замечаний:
1.Вы копируете не триста значений, а одно значение с трёхсотого элемента:
Обращение по начальной позиции и количеству требуемых элементов
int CopyClose( |
Вот этот код позволит наглядно увидеть, когда появится история с текущей даты минус 300 элементов назад:
//| Test.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
input int start_pos=300;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double close_array[];
if(CopyClose("XAUUSD",Period(),start_pos,1,close_array)==-1)
Print(__FUNCTION__,", CopyClose error #",GetLastError());
else
Print(DoubleToString(close_array[0],5));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double close_array[];
if(CopyClose("XAUUSD",Period(),start_pos,1,close_array)==-1)
Print(__FUNCTION__,", CopyClose error #",GetLastError());
else
Print(DoubleToString(close_array[0],5));
}
//+------------------------------------------------------------------+
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Slawa, 2017.02.15 09:38
815 - это общий размер буфера. Делается предварительное распределение для всей потенциальной истории, чтобы в ходе тестирования не тратить время и ресурсы на перераспределение.Написано же: history cache allocated for 815 bars and contains 258 bars
Несколько замечаний:
1.Вы копируете не триста значений, а одно значение с трёхсотого элемента:
Обращение по начальной позиции и количеству требуемых элементов
int CopyClose( |
Вот этот код позволит наглядно увидеть, когда появится история с текущей даты минус 300 элементов назад:
//| Test.mq5 |
//| Copyright © 2017, Vladimir Karputov |
//| http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link "http://wmua.ru/slesar/"
#property version "1.00"
//---
input int start_pos=300;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
double close_array[];
if(CopyClose("XAUUSD",Period(),start_pos,1,close_array)==-1)
Print(__FUNCTION__,", CopyClose error #",GetLastError());
else
Print(DoubleToString(close_array[0],5));
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double close_array[];
if(CopyClose("XAUUSD",Period(),start_pos,1,close_array)==-1)
Print(__FUNCTION__,", CopyClose error #",GetLastError());
else
Print(DoubleToString(close_array[0],5));
}
//+------------------------------------------------------------------+
Спасибо за ответ и за код.
Запустил ваш код. Ничего не поменялось (скрин ниже). Мне нужно значение "300 дней назад" на первый бар тестирования. Их нет и на четвертый бар.
Спасибо за ответ и за код.
Запустил ваш код. Ничего не поменялось (скрин ниже). Мне нужно значение "300 дней назад" на первый бар тестирования. Их нет и на четвертый бар.
Абсолютно всё правильно. И не нужно вырубать программму - дождитесь когда история будет копироваться без ошибки. Затем сравните даты, начальные значения тестера (когда тестер сообщает сколько баров есть и глубина истории). В общем немного подумайте :)
Абсолютно всё правильно. И не нужно вырубать программму - дождитесь когда история будет копироваться без ошибки. Затем сравните даты, начальные значения тестера (когда тестер сообщает сколько баров есть и глубина истории). В общем немного подумайте :)
Особенно вот на эти строки тестера:
XAUUSD,Daily: history begins from 2015.01.02 00:00
И это при периоде тестирования с 2016.01.01 - по сегодня.
Смотрите на первые строки тестера в визуальном режиме - он пишет с КАКОЙ даты есть бар. Это означает, что ранее ЭТОЙ ДАТЫ вакуум - ничего нет. И так как Вы запрашиваете цену бара, который от текущего времени уходит вдаль истории на 300 баров, то сами подумайте: когда Вы сможете получить первый раз цену вместо ошибки? Наверное это будет так: ДАТА с которой есть бары (дату пишет тестер) + 300 баров.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования