Чтобы ответить на этот вопрос, Zorro дополнительно анализирует стратегию с помощью метода Монте-Карло. По сравнению с обычным моделированием, метод Монте-Карло дает более точные и менее случайные результаты.
В анализе Монте-Карло кривая доходности, полученная в результате моделирования, разбивается на множество отдельных сегментов, которые меняются местами в случайном порядке.
— В 2000 года менеджеры отделов внутридневных операций подтвердили на слушаниях в сенате США, что от 80% до 90% их клиентов теряли свои средства и/или уходили с рынка в течение шести месяцев после начала торговли.
— Большое исследование тайваньских дейтрейдеров в 2004 года показало, что более 80% теряли деньги, и только 0,03% стабильно зарабатывали.
— Более недавнее исследование 2017 года, проведенное исследователями из Университета Беркли и Пекинского университета, показало, что 75% дневной торговой активности приходится на трейдеров с отрицательным средним доходом.
— Исследование бразильских дейтрейдеров, проведенное в 2019 году, показало, что 97% всех индивидуальных трейдеров, которые продержались более 300 дней, теряли деньги. Только 1,1% заработали больше, чем текущая минимальная заработная плата в Бразилии, и только 0,5% заработали больше, чем текущая начальная зарплата банковского кассира.
Телеграм канал: https://t.me/TradPhronesis
Некоторые из значений, отображаемых в окне Zorro, получаются непосредственно в результате моделирования, другие — такие как коэффициент Шарпа, кратко затронутый выше, — требуют более или менее сложных расчетов. Все эти значения на самом деле служат лишь для ответа на два вопроса: насколько прибыльной является стратегия? И насколько вероятно получить тот же результат при реальной торговле? Оба аспекта в совокупности дают эффективность — результативность стратегии. На первый вопрос ответить легко, но на второй и более важный вопрос, к сожалению, ответить сложно.
set(LOGFILE);
LOGFILE — это флаг — что-то вроде «переключателя», который можно включить или выключить. Такие флаги «устанавливаются», т.е. включаются, с помощью функции set. Если установлен флаг LOGFILE, сохраняется журнал всех событий во время теста. Вставьте строку, нажмите на [Test], затем откройте файл Alice1a_EURUSDtest.log в папке log редактором SED или любым другим текстовым редактором. Файл представляет собой длинный список записей, похожих на эту:
Запустите Zorro. Выберите скрипт Alice1a и актив EUR/USD (все скрипты и стратегии, описанные в книге, можно скачать с сайта financial-hacker.com/). Убедитесь, что ползунок Период установлен на 60 минут. Затем нажмите [Test]:
Продолжите выполнение сценария. Следующая строка устанавливает стоп-лосс:
Stop = 4*ATR(100);
Stop — это предопределенная переменная. Zorro уже «знает» его, поэтому его не нужно определять с помощью var. Он определяет стоп-лосс, т.е. максимально допустимый убыток. Позиция автоматически продается, если она теряет больше указанной суммы. Здесь этот предел задан 4*ATR(100). Функция ATR является традиционным индикатором — Average True Range.
function run() { vars Price = series(price()); vars Trend = series(LowPass(Price,500)); Stop = 4*ATR(100); if(valley(Trend)) enterLong(); else if(peak(Trend)) enterShort(); }
Это уже целая система. Мы видим, что главная функция теперь называется «run» вместо «main».
Боб занимается валютной торговлей с 1995 г. В некоторые годы его прибыль достигала шестизначных цифр, и единственным предметом его беспокойства была налоговая декларация. Но в последнее время дела идут не очень хорошо. Фактически, в течение последних трех лет он приносил только убытки. Резервы тают. Что-то должно измениться. Но что? Боб уже посетил все существующие семинары по трейдингу. Он уже прочитал все книги по трейдингу. Остается только один вариант. Именно поэтому Бобу сегодня назначена встреча с Алисой.
Пока я еще не стал миллионером, я должен продолжать торговать. Это был просто пример цикла «while».
В коде это будет выглядеть следующим образом:
while(Vermoegen < 1000000) trade(Vermoegen);
Оператор while имеет точно такой же синтаксис, как и оператор if. Имеется условие — в данном случае, что переменная Vermoegen меньше одного миллиона — и последующий оператор, который выполняется, если условие истинно. В этом случае программа будет просто продолжена. С другой стороны, с помощью оператора while программа «перепрыгивает» назад к условию и проверяет его снова. Если он по-прежнему применим, зависимое утверждение выполняется снова. Это повторяется до тех пор, пока либо условие не станет ложным в какой-то момент, либо пока кто-то не выдернет вилку из розетки.
Если я хочу тратить больше 3 000 евро в месяц, мне нужна новая стратегия. В противном случае подойдет моя старая стратегия.
Это пример ветви if/else. В коде это будет выглядеть следующим образом:
if(Ausgaben > 3000) neue_strategie_starten(); else alte_strategie_fortsetzen();
Операторы «if» используются, когда сценарий должен принимать решения — то есть, когда он должен вести себя по-разному в зависимости от того, истинно условие или нет. Таким условием может быть ввод данных пользователем, величина случайного числа, результат математической операции или пересечение двух индикаторов. Основная форма оператора if выглядит следующим образом: