[quote="Shinigami"]Повторяю [b]для особо доходчивых[/b]. [b]тики, которые тоже имеют OHLCV, ПО НИМ ГЕНЕРИРУЮТСЯ ТИКИ ТЕСТЕРА.[/b]
...[b]Формат файла "FXT" знаете???[/b] именно этот файл собирается из тиковой истории для тестера. В файле тиковой истории формата CSV, который вы показали, действительно нет OHLC[b]V[/b], но когда он преобразуется для тестера и используется в готовом варианте то используется именно [b]OHLCV[/b]. Где V это Volume = 1. так как всего один тик.[/quote]Что-то Вы, коллега, весьма эмоционально стараетесь доказать мне, что я "[b]особо доходчивый[/b]"... Зачем?
Мы с Вами - в одной "лодке" - в МТ4, который создан "заботливыми" разработчиками так, чтобы лишить трейдеров тестировать советники на реальной истории.
В чем-то я не разобрался? Давайте разберемся вместе, чтобы любой начинающий смог опираясь на наши рекомендации легко и просто обойти ограничения штатного режима тестирования, который не учитывает реальных тиков.
В этом самом штатном режиме после нажатия кнопки [Старт] в тестере начинает формироваться файл FXT на основе минутной (если она имеется, или более старшего ТФ, если её нет) истории (файлы HST, формат TOHLCV), т.е. реальными тиками там и не пахнет.
Мало того, что там нет тиков, вдобавок к этому, принудительно будет установлен фиксированный спред, равный действующему на этот момент спреду в онлайне или последнему на момент отключения от сети или прекращению торговли в пятницу, если мы занялись тестированием в выходные. И это ещё не всё... Уровни стопов тоже будут зафиксированы, хотя в реальности они имеют обыкновение изменяться, и у нас нет штатной возможности как-то изменить эту ситуацию в нашу пользу...
Что приходится делать, чтобы хоть как-то приблизить тестирование к реальной торговле?
1. запастись историей реальных тиковых котировок (формат Time Bid Ask - файлы могут быть CSV, TXT, XLS...), это не всегда решаемая задача для подавляющего большинства ДЦ, поэтому приходится довольствоваться тем, что более менее доступно - Дукаскопи, Альпари, кротенькие кусочки раздобытые правдами и неправдами родных (в которых открыты реальные счета))) ДЦ... Весьма трудоемкая задача, требующая кроме желания и настойчивости, свободного времени и хорошего интернета.
2. сформировать из этих тиковых котировок файлы HST и FXT, причем не с помощью МТ4 (он непригоден для этого - сразу же вместо реальных тиков сгенерирует свои), а с помощью скрипта Dukascopy2FXT
3. разложить полученные файлы по папочкам: HST в .../history/, а FXT в .../tester/history/
4. открыть терминал и не забыть запустить скрипт birt’s patch перед началом тестирования - иначе все наши труды насмарку, тестер просто сформирует свой FXT с генерированными тиками не обращая внимания на "подсунутый" нами...
Разве не так?
Теперь немного о [b]формате файлов FXT[/b]...
[b]Имя файла[/b] должно быть в определенном формате [b]SymbolPeriod_Type.fxt[/b], где Symbol - название символа, Period - период графика в минутах, Type - тип выбранного моделирования ([b]0 - по всем тикам[/b], 1 - по контрольным точкам, 2 - по ценам открытия).
[b]Структура заголовка файла[/b]:[code]struct TestHistoryHeader
{
int version;
char copyright[64]; // копирайт
char symbol[12];
int period;
int model; // для какого режима тестирования сгенерирована последовательность
int bars; // количество баров в истории
time_t fromdate;
time_t todate;
double modelquality; // качество генерации
//---- общие параметры
char currency[12]; // валютная база
int spread;
int digits;
double point;
int lot_min; // минимальный размер лота
int lot_max; // максимальный размер лота
int lot_step;
int stops_level; // величина отступа стопов
int gtc_pendings; // указание закрывать отложенные ордера в конце дня
//---- параметры расчёта профитов
double contract_size; // величина контракта
double tick_value; // цена одного пункта
double tick_size; // размер одного пункта
int profit_mode; // тип расчёта профитов { PROFIT_CALC_FOREX, PROFIT_CALC_CFD, PROFIT_CALC_FUTURES }
//---- расчёты свопов
int swap_enable; // разрешение взятия свопа
int swap_type; // тип свопа { SWAP_BY_POINTS, SWAP_BY_DOLLARS, SWAP_BY_INTEREST }
double swap_long;
double swap_short; // величина овернайт свопа
int swap_rollover3days; // день тройных свопов
//---- расчёт маржи
int leverage; // плечо
int free_margin_mode; // тип расчетов свободной маржи { MARGIN_DONT_USE, MARGIN_USE_ALL, MARGIN_USE_PROFIT, MARGIN_USE_LOSS }
int margin_mode; // тип расчетов маржи { MARGIN_CALC_FOREX,MARGIN_CALC_CFD,MARGIN_CALC_FUTURES,MARGIN_CALC_CFDINDEX };
int margin_stopout; // уровень стопаута
double margin_initial; // маржевые требования
double margin_maintenance; // обязательные маржевые требования
double margin_hedged; // маржевые требования на хеджируемых позициях
double margin_divider; // делитель маржи
char margin_currency[12];// валюта маржевых требований
//---- расчёт комиссии
double comm_base; // базовая комиссия
int comm_type; // тип базовой комиссии { COMM_TYPE_MONEY, COMM_TYPE_PIPS, COMM_TYPE_PERCENT }
int comm_lots; // за лот или сделку { COMMISSION_PER_LOT, COMMISSION_PER_DEAL }
//----
int from_bar; // номер бара fromdate
int to_bar; // номер бара todate
int start_period[6]; // номер бара с которого началось моделирование меньшего периода
//----
int reserved[64];
};
[/code]
[b]Массив сгенерированных баров[/b]:[code]#pragma pack(push,1)
struct TestHistory
{
time_t otm; // время бара
double open; // значения OHLCV
double low;
double high;
double close;
double volume;
time_t ctm; // текущее рабочее время внутри бара
int flag; // флаг запуска эксперта (0-бар модифицируем, а эксперта не запускаем)
};
#pragma pack(pop)[/code]
Сформированные в FXT бары имеют такой вид:[attachment=0]бары в режиме все тики.png[/attachment]
- Вложения
-