set(LOGFILE);
LOGFILE — это флаг — что-то вроде «переключателя», который можно включить или выключить. Такие флаги «устанавливаются», т.е. включаются, с помощью функции set. Если установлен флаг LOGFILE, сохраняется журнал всех событий во время теста. Вставьте строку, нажмите на [Test], затем откройте файл Alice1a_EURUSDtest.log в папке log редактором SED или любым другим текстовым редактором. Файл представляет собой длинный список записей, похожих на эту:
[8372: Fri 21.05.10 05:00] -1220p 29/141
[EUR/USD::S4070] Reverse 1@1.2631: +60.23 at 05:00
[EUR/USD::L7271] Long 1@1.2631 Risk 13$ at 05:00
[8373: Fri 21.05.10 06:00] -381p 29/142
[8374: Fri 21.05.10 07:00] -381p 29/142
[8375: Fri 21.05.10 08:00] -381p 29/142
[EUR/USD::L7271] Reverse 1@1.2503: -9.35 at 08:00
[EUR/USD::S7572] Short 1@1.2503 Risk 14$ at 08:00
Если во время бара ничего не происходит, регистрируется только номер бара (8372), время (Fri 21.05.10 05:00), текущая прибыль или убыток в пунктах (-1220p) и количество выигранных и проигранных сделок (29/141). Что может произойти, так это закрытие или открытие позиции. Здесь сначала закрывается короткая позиция S4070, а затем открывается длинная позиция в противоположном направлении (Reverse). Другим способом закрытия позиции в скрипте является стоп-лосс, который обозначается Stop. 1 лот был продан по цене USD 1.2631 (1@1.2631). Была получена прибыль в размере 60,23 евро.
Длинная сделка, закрывшая предыдущую короткую позицию, находится в следующем ряду. Ему был присвоен номер L7271; буквы «S» или «L» в номере означают «длинный» или «короткий» соответственно. Покупается 1 лот EUR/USD по цене 1.2631 USD. Риск, то есть максимальный убыток по этой сделке, составляет 13 евро (риск 13$; знак $ в конце означает только то, что число обозначает денежную сумму; знак p в конце означает пипсы). 13 EUR — это оценка, основанная на расстоянии стоп-лосса от текущей цены. Фактический убыток по стопу может быть немного выше из-за проскальзывания.
Фактически, торговля приносит убыток. Хотя стоп не срабатывает, он закрывается через 3 часа сделкой в противоположном направлении с минусом в 9,35 евро. В журнале видно, что большинство сделок проиграно. Zorro, похоже, намеренно ведет торговлю в неправильном направлении: Если открывать сделки наугад, только чуть более 50% закончатся убытками, а не 80%. Конечно, ни один здравомыслящий человек не будет торговать таким образом! Но хотя это и безумие, в нем есть и метод. Алгоритм хочет, чтобы позиция была открыта в нужном направлении, когда начинается долгосрочный тренд. Такая позиция затем удерживается в течение длительного времени и приносит высокую прибыль. Это единственная причина, по которой такая система может быть прибыльной в долгосрочной перспективе, даже если большинство сделок проигрышные.
Чтобы немного глубже понять стратегию, Алиса теперь хочет повнимательнее рассмотреть распределение прибылей и убытков. Для этого она пишет следующую строку в начале сценария (перед функцией run):
#include <profile.c>
Это не часть программы, а лишь указание компилятору включить в этот момент другой файл скрипта. profile.c — это готовый скрипт, содержащий ряд функций для отображения статистики цен и сделок. Строка #include теперь делает эти функции доступными для сценария. Для распределения прибыли/убытков Алиса вызывает следующую функцию из файла profile.c:
plotTradeProfile(-50);
Вставьте этот вызов в конец функции run. Нажатие на [Test] (не забудьте предварительно сохранить). Теперь генерируется график прибылей и убытков с шагом в 50 пунктов в конце тестового прогона. Созданный график выглядит примерно так (рис. 21):
Рис. 21 — Гистограмма прибылей и убытков
Для построения гистограммы все сделки сортируются в соответствии с их прибылями или убытками. Высота светлых полос соответствует количеству сделок, которые приносят прибыль/убыток, показанный на горизонтальной оси. Темные столбики рядом с ним показывают суммарный результат рассматриваемых сделок. Число отображается на правой вертикальной шкале, прибыль/убыток — на левой вертикальной шкале. Мы видим, что большинство сделок, около 300, заканчиваются с убытком от 0 до 50 пунктов. Общая прибыль системы складывается из относительно небольшого количества прибыльных сделок, одна из которых (крайняя справа) даже принесла прибыль в 1000 пунктов.
Такое распределение выигрыша не нравится Алисе. Из-за немногочисленных, но высоких выигрышей система в значительной степени зависит от случайности. Каждая победа однозначно влияет на общий результат. Кроме того, постоянные потери требуют крепких нервов при торговле — даже если она происходит автоматически. Как можно улучшить такую систему?
Продолжение следует...