Использование 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

Вывод

Итак, как вы можете это улучшить? Как использовать эту программу, чтобы помочь вам со своей торговой стратегией.

В основном у вас есть три варианта:

  • увеличить соотношение прибыльных и убыточных сделок
  • увеличить среднее количество пунктов на прибыльную сделку
  • уменьшить количество пунктов на убыточную сделку

Например, если у вас есть стратегия, которая соответствует цифрам, указанным в начале этой статьи, вы знаете, что эта стратегия может быть прибыльной, если вы будете торговать как робот, без просадок, проскальзываний и плохих дней. Но в (смоделированной) реальности, скорее всего, вы не получите прибыли.

Используйте моделирование методом Монте-Карло, чтобы сопоставить бумажные торгуемые данные, чтобы получить (или потерять) уверенность в своей торговой системе.

Полный код здесь.