Использование Go в качестве языка программирования
Если вы торгуете на Форексе (или вообще чем-то торгуете), скорее всего, вы слышали о чем-то под названием Моделирование Монте-Карло.
Короче говоря, моделирование Монте-Карло - это программа, которая дает вам некоторый псевдослучайный результат (количество пунктов, в данном случае) для заданного входа (количество выигрышных / проигрышных сделок, количество пунктов,…).
Но ты знаешь…. пример был бы лучше.
Пример
Допустим, вы совершили 100 сделок на бумаге. Вы сделали это очень хорошо и были абсолютно честны с собой.
Вы точно знаете, что если вы торговали этими 100 сделками на самом деле, результат будет именно таким, каков ваш бумажный трейдинг.
Допустим, это результат вашей бумажной торговли:
- Количество сделок: 100
- Общее количество пунктов для комиссии и спреда: 100 * 1,1 = 110 пунктов
- Количество прибыльных сделок: 60
- Среднее количество пунктов для прибыльной сделки: 28,3
- Количество убыточных сделок: 40
- Среднее количество пунктов для убыточной сделки: 26,5
Расчет
Теперь вы можете сделать простой расчет, чтобы увидеть, прибыльна ваша система или нет.
Суммируйте все: (60 * 28,3) - (40 * 26,5) - 110 = 528 пунктов.
Чистый результат - 528 пунктов, включая комиссию и спред. Вы знаете, ваша система прибыльна. Если у вас есть сила воли, чтобы постоянно ее зажигать.
Может быть, вы прямо сейчас спрашиваете: что это за Монте-Карло? Потому что это довольно простая математика, не так ли? Моделирование Монте-Карло может быть таким же простым, как этот расчет, но вы можете и должны добавить к нему немного больше сока.
Потому что ... будьте честны с собой: вы никогда не будете на 100% так же хороши, как вы, торгуя на бумаге. Так что было бы разумно добавить случайные просадки и другие неожиданные вещи. Чтобы сделать ваш окончательный результат в 528 пунктов более реалистичным.
Простое моделирование Монте-Карло
Мы начнем с создания простой версии моделирования Монте-Карло, чтобы соответствовать нашим данным, как описано выше. Go будет нашим предпочтительным языком программирования.
Если вы спрашиваете, зачем идти, здесь у вас есть семь причин от Петра Ягоды
У нас будет только один файл Go, а именно main.go
. Откройте этот файл и объявите свои переменные. Для этих переменных мы будем использовать те же данные, которые мы использовали выше в нашем простом вычислении.
Теперь добавим логики. Один цикл - это одна симуляция.
Каждая симуляция будет псевдослучайно генерировать число от 1 до numberOfTrades
. Если сгенерированное число находится в диапазоне от 1 до profitPercentage
(в данном случае 60), мы увеличим нашу сумму пунктов. В противном случае мы его уменьшим.
В конце мы вычтем спред и комиссию и распечатаем результат.
Если запустить программу, вот и результат. Конечно, у вас цифры будут другими.
Плюсы и минусы - это прибыли и убытки.
Monte Carlo Simulation No. 1 +-++++++-+--++-+++-+-++++-+++-++++++--+-----+-++-+-+--++++-+++-+++-+-+-----+++---+-+-+-+--+++++-++++ Number of profits 61 Number of losses 39 Total sum of pips 582.8 pips Average trade will give you 5.8 pips Monte Carlo Simulation No. 2 ++-+-++++-+-+-+-+++++++-+----+++-++-+-+++-+++---++----+-+-++-+-++-+++-+-+--+--+-+--+-+---------++-+- Number of profits 52 Number of losses 48 Total sum of pips 89.6 pips Average trade will give you 0.9 pips Monte Carlo Simulation No. 3 +-+--++-++--+-----+-+++-+-+-+++-+--+--+-+--++-++--+-+-+-++++++-++-++-+--+-+--+---+-+-+-++-+-+--+--++ Number of profits 51 Number of losses 49 Total sum of pips 34.8 pips Average trade will give you 0.3 pips Monte Carlo Simulation No. 4 +-++----++-+-++-++++-+++-+---+++-++++++++--+-++-++--+-+--+-++++-+--+-++++-+---+++++-++--+++-++++++++ Number of profits 64 Number of losses 36 Total sum of pips 747.2 pips Average trade will give you 7.5 pips Monte Carlo Simulation No. 5 +++++---++--+-+-+-++-+++---+++--++-++-++-+-++-++-----+-+-++-+-+--+-+++-++++++++-+++-+-+++--+++-+-+++ Number of profits 61 Number of losses 39 Total sum of pips 582.8 pips Average trade will give you 5.8 pips Monte Carlo Simulation No. 6 ++++-+++++++----++++-+++-++-+-----+++---+--++---+--+-++-++-++++++++++--+-+-++-+-+--++-++-+++-++++-++ Number of profits 62 Number of losses 38 Total sum of pips 637.6 pips Average trade will give you 6.4 pips Monte Carlo Simulation No. 7 --+----+++--++--++++--+++--+--+-+--++++-+++--------+++--+-+++++--++--+--++++++-++-+-+--++++----+-+-+ Number of profits 52 Number of losses 48 Total sum of pips 89.6 pips Average trade will give you 0.9 pips Monte Carlo Simulation No. 8 +++---++---+++++---++++-++++-++-------+-+----++++-+--++++-----+-+-++--+-+--+++++++-+++++---++++++--+ Number of profits 56 Number of losses 44 Total sum of pips 308.8 pips Average trade will give you 3.1 pips Monte Carlo Simulation No. 9 -+---+--++-++++++-++-+-++-+-+-+++++++++-+++-++++++--+++++---+++-++-+-------++-+++----+---+++--+-+-++ Number of profits 59 Number of losses 41 Total sum of pips 473.2 pips Average trade will give you 4.7 pips Monte Carlo Simulation No. 10 +-++-+--+-++++-+++--+-+-+-+--+++++++++++----+++---++---+----+-+-++++---+-+---+--+----++-+-+--++-+--+ Number of profits 51 Number of losses 49 Total sum of pips 34.8 pips Average trade will give you 0.3 pips
Как видите, каждый раз вы получали прибыль. Но диапазон составляет от 34,8 до 747,2 пункта. Это огромная разница.
Попробуйте увеличить numberOfSimulations
. Измените что-нибудь другое. Поиграйте с программой, чтобы увидеть, что и как больше всего меняет результат, чтобы иметь более узкий диапазон и стабильные результаты.
Расширенное моделирование Монте-Карло
Теперь давайте добавим в нашу программу немного псевдореализма:
- случайные просадки (например, вы забыли установить стоп-лосс, и через 1 секунду произошло что-то неожиданное)
- случайное расширение спреда (например, ... приходят какие-то новости, и каким-то образом спред расширяется в 3 раза от стандартного значения, и ваш стоп-лосс был достигнут)
- случайные перепады настроения (например, вы поспорили со своим партнером, и вы чувствуете себя как в аду, но все равно торгуете)
И мы также добавим простую статистику, усредняющую все симуляции.
Вот обновленное объявление переменных.
И вот обновленный шлейф. Мы добавляем несколько случайных просадок (!), Проскальзывания (S) и плохих дней (B). В конце мы проведем простое суммирование и распечатаем результаты.
Если вы сейчас запустите программу, вы увидите что-то вроде
Monte Carlo Simulation No. 1 --+-+++-++++++---++-+++--+--++++++++-+-+-+++-++-+-+-+++----------+++++-+++--++++---++-++++-++-+-+++- Number of profits 60 Number of losses 40 Total sum of pips 528.0 pips Average trade will give you 5.3 pips Monte Carlo Simulation No. 2 ++--+--+--S+-++++++--+---+++-++++++++++++----+-+-++---+++--++++-+++++-++-++++-+++--+-++++++---++---+- Number of profits 62 Number of losses 38 Total sum of pips 623.4 pips Average trade will give you 6.2 pips Monte Carlo Simulation No. 3 +------+--+++++++--+++++-+--+--+-+-++-++++++--S+-++-+++++++-+++--++-+-+-+++++----+++--+-+-+-+++++++-- Number of profits 61 Number of losses 39 Total sum of pips 568.6 pips Average trade will give you 5.7 pips Monte Carlo Simulation No. 4 +++-++++-+++++++-++-+-+++++----+-++-+++++-++-+++--S+-+++-+-++-+----++++--+++----+---++-+++++-+-++-+-- Number of profits 62 Number of losses 38 Total sum of pips 623.4 pips Average trade will give you 6.2 pips Monte Carlo Simulation No. 5 -++++++-+++++++--+-++++-----+---+-+-+---+---+++-+---+-++++++++++-+++++++++----+-++++--++++++---+-+-- Number of profits 60 Number of losses 40 Total sum of pips 528.0 pips Average trade will give you 5.3 pips Monte Carlo Simulation No. 6 +-+-+++-+++-+-+--+--+--++++--+-S+-++-+++++----++-+++-+++-+-+--+-+-++--+-++-+-+----++--++-++--++---+-+ Number of profits 54 Number of losses 46 Total sum of pips 185.1 pips Average trade will give you 1.9 pips Monte Carlo Simulation No. 7 --++---++++-+++-+--+---+-++--++++-+--+--++--+-+-++++++--+-+-++-+--+++-+-++++-+-+++-+-++-+++----+-+-+ Number of profits 56 Number of losses 44 Total sum of pips 308.8 pips Average trade will give you 3.1 pips Monte Carlo Simulation No. 8 -+-+-++--+++++++-S++++---S-+-+++-+++--++-+++---+-+--++----+++-+-+-+---++-+-+-+--+-++-++-+-+--++---++-- Number of profits 53 Number of losses 47 Total sum of pips 116.1 pips Average trade will give you 1.2 pips Monte Carlo Simulation No. 9 -++++--+++++--+++-+++++++-++-+++-+-+++++-+--++-+++-+++++-+---S--+++-+++++++--S+---S-+--++-+--+---++---+ Number of profits 61 Number of losses 39 Total sum of pips 540.3 pips Average trade will give you 5.4 pips Monte Carlo Simulation No. 10 +--++-+----++--+++-+++++-+++++-++++-+-++-+-+-S-++--++-+--++++--+++++--+++++----+-+-++--S++-++++-+-++++ Number of profits 62 Number of losses 38 Total sum of pips 609.3 pips Average trade will give you 6.1 pips Average sum 463.1 pips Min sum 116.1 pips Max sum 623.4 pips
Хорошо, у нас здесь есть проскальзывания, но нет плохих дней или просадок. Причина в том, что мы делаем только 10 симуляций.
Попробуйте увеличить numberOfSimulations
до 100 или 1000, и вы начнете видеть просадки и плохие дни. Но вы также начнете видеть результаты, которые не столь приятны.
Что-то вроде этого…
Average sum -23.9 pips Min sum -1322.9 pips Max sum 1116.6 pips
Вывод
Итак, как вы можете это улучшить? Как использовать эту программу, чтобы помочь вам со своей торговой стратегией.
В основном у вас есть три варианта:
- увеличить соотношение прибыльных и убыточных сделок
- увеличить среднее количество пунктов на прибыльную сделку
- уменьшить количество пунктов на убыточную сделку
Например, если у вас есть стратегия, которая соответствует цифрам, указанным в начале этой статьи, вы знаете, что эта стратегия может быть прибыльной, если вы будете торговать как робот, без просадок, проскальзываний и плохих дней. Но в (смоделированной) реальности, скорее всего, вы не получите прибыли.
Используйте моделирование методом Монте-Карло, чтобы сопоставить бумажные торгуемые данные, чтобы получить (или потерять) уверенность в своей торговой системе.
Полный код здесь.