Stanislav Gribanov
Stanislav Gribanov личный блог
06 марта 2024, 12:16

Перевод книги "Хакер фондового рынка". Распределение прибыли.

Перевод книги "Хакер фондового рынка". Распределение прибыли.
Ранее:
1. Предисловие.
2. Торговля деньгами.
3. Биржевая цена.
4. Золотоискатели и ломбарды.
5. Тики, бары, свечи.
6. Как работают торговые системы?
7. Технический анализ — смысл и бессмыслица.
8. Трехчасовой курс программирования.
9. Первый урок: Переменные.
10. Разновидность калькулятора.
11. Второй час: Функции. 
12. Функции с возвращаемым значением.
13. Третий час: ветвление.
14. Циклы.
15. Следуйте за тенденцией.
16. Торговля с помощью фильтра низких частот.
17. Покупка и продажа.
18. Тестирование стратегии.

 

Распределение прибыли.

Теперь давайте рассмотрим смоделированные сделки более подробно. Алиса добавила следующую строку в функцию run:

 

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 пунктов.

Такое распределение выигрыша не нравится Алисе. Из-за немногочисленных, но высоких выигрышей система в значительной степени зависит от случайности. Каждая победа однозначно влияет на общий результат. Кроме того, постоянные потери требуют крепких нервов при торговле — даже если она происходит автоматически. Как можно улучшить такую систему?

Продолжение следует...

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн