Где искать прибыль и что внутри торгового робота?

Продолжим раскрывать тему CFP, начатую в предыдущем посте. Чтобы объяснить, каким образом достигается стабильная высокая прибыль при инвестировании в CFP, мы приведем пример работы и получаемых результатов одной из частей автоматизированной торговой системы(одного из торговых роботов), которую мы использовали несколько лет назад, но несмотря на её почтенный “возраст” она все еще может быть актуальной.

Начнём.

Робот предназначен для автоматической торговли на фондовых, финансовых и товарных рынках, состоит из двух частей:

  • Аналитическая
  • Исполнительная

Аналитическая часть предназначена для определения следующих показателей:

  • Направления тренда (LONG, SHORT)
  • Определения ценовых уровней (TakeProfit, StopLoss)

Исполнительная часть нацелена на выполнение следующих функций в автоматическом режиме:

  • Расчет цен покупки и продажи (BuyPrice, SellPrice)
  • Расчет риска и прибыли (Risk, Reward)
  • Расчет инвестируемого капитала (на основе полученных данных о риске и доходности)
  • Открытие позиций (выставление ордеров и контроль за их исполнением)
  • Учет остатков активов (денежные средства и количества открытых и закрытых позиций)
  • Контроль прибыли/убытков
  • Закрытие позиций

В аналитической части робота заложен алгоритм расчета, который базируется на волновом принципе Эллиотта.

При появлении новой свечи, при первичном запуске робота (в начале торгового дня) или же при преодолении ценового уровня StopLoss, робот на основании данных последних 300 свечей делает прогноз дальнейшего движения. Данный прогноз, это не единственно верный, а множество вероятных сценариев развития анализируемого инструмента, каждый из которых в свою очередь (как было написано ранее) соответствуют волновой теории. Это множество представляется в виде сигналов с указанием волнового уровня, вида волны, направления, ценой при которой был получен сигнал, ценой вероятного окончания волны (TakeProfit) и ценой пересмотра сценария (StopLoss).

Пример:

WaveLevel, WavePattern, UP, WaveTriggerPrice, WaveTarget, WaveExit

После того как массив сигналов сформирован, в работу вступает исполнительная часть. Первое, что делает робот, это сортирует параметр WaveTarget, в порядке возрастания для LONG сценариев и в обратном для SHORT.

После сортировки целевых цен, начинается мониторинг «стакана заявок». Если цена спроса или предложения меняется, то в работу вступают функции продажи и покупки соответственно. Данные функции или управляющие блоки предназначены для выполнения следующих операций:

- расчета цены покупки/продажи;

- расчета риска;

- учета и контроля объемов заявки;

- выставления заявок в торговую платформу.

Это одни из основных функций, поэтому их стоит рассмотреть на примерах. В примерах будем разбирать функцию покупки. Продажа является зеркальной аналогией.

Вводные:

Имеем направление LONG с целями 10, 13, 17, 21 и выходами 5, 7, 8. После сортировки получаем:

LongTarget_1 = 10; LongExit_1 = 8 LongTarget_2 = 13; LongExit_2 = 7 LongTarget_3 = 17; LongExit_3 = 5 Предложение (Offer) = 9.24 Спрос (Bid) = 9.23 Capital = 1 000 000

Перед тем как совершить сделку робот производит ряд вычислений:

При движении к цели (LongTarget) рынок совершает ряд колебательных движений. Поэтому, даже имея вероятность в 100%, того что прогноз сбудется, нет оснований полагать, что цена, которая в настоящий момент предлагается рынком является лучшей. Зная это, в алгоритм робота заложена функция (BuySignal) поиска наилучшей возможной на текущий момент времени цены. Лучшая цена покупки это некий расчетный минимум, который изменятся в зависимости от скорости изменения рыночной цены. Другими словами, цена, по которой мы готовы купить актив должна гибко подстраиваться под динамику рынка. Если рынок «вялый» без быстрых движений, то и цена не должна быть слишком удалена от текущих значений. И наоборот, если рынок «активный», «резкий», «быстрый», то цена должна быть удалена от текущих значений ровно настолько, что бы не открыть сделку слишком рано или же слишком поздно. Да, звучит весьма «размыто», но данный механизм внедрен в работу робота и является ноу-хау разработчика.

Итак, с помощью функции BuySignal робот определяет цену покупки. В том случаи, когда цена Offer ниже или равна расчетной, робот приступает к определению риска и объема сделки. Это важный элемент в управлении капиталом, который напрямую влияет на размер прибыли и убытков.

Для расчета объема сделки есть следующие исходные данные:

  • TakeProfit (цена при которой будет закрываться сделка с прибылью)
  • StopLoss (цена при которой будет закрываться сделка с убытком)
  • Offer (текущая цена предложения на рынке или возможная цена открытия сделки)
  • Capital (капитал с которым оперирует робот)
  • Risk (размер убытка на сделку в % соотношении)

Необходимо понимать, что все расчеты производятся при условии, что мы не знаем дальнейшего движения рынка, а лишь предполагаем с некоторой долей вероятности. На основании тестовых данных известно, что точность прогнозов, которые нам выдает аналитический блок составляет 50% - 70%. Для более прагматичных расчетов примем это значение равным 50%. Исходя из этого значения первое необходимое условие для совершение сделки должно быть соотношением вероятной прибыли к вероятному убытку, не менее 2:1. При таком соотношении, на дистанции мы гарантировано будем получать прибыль. Если этот параметр принять большим (к примеру 3:1), то мы автоматически уменьшаем вероятность того, что рынок даст нам возможность открыть сделку по нужной цене, так как диапазон нужных цен будет существенно уже. Если меньше, то прибыльные сделки будут компенсировать убыточные, но не будут генерировать прибыль. Значит, остановимся на минимальном и достаточном. Для расчета этого показателя применяется следующая формула:

RR = (TakeProfit - Offer)/(Offer - StopLoss)

Если RR >= 2, то наше условие выполнено и можно переходить к расчету объема сделки.

Риски и объем сделки

Объем сделки очень важный параметр, который напрямую влияет на величину риска. Принято считать нормальным риском величину равную 2% на сделку. Так как цена StopLoss у нас расчетная и больше предназначена для определения момента пересчета прогноза, и зачастую, при номинальном расчете, выше значения в 2%, то контролировать риск и приводить его к нормальному значению придется за счет управления размером открываемой позиции. Что под этим подразумевается? На примере вводных данных произведем расчеты. Для наглядности возьмем параметры третьей цели:

LongTarget_3 = 17; LongExit_3 = 5; Offer = 9.24 Risk = (Offer - LongExit_3) / Offer * 100; Risk = (9.24 - 5) / 9.24 * 100 = 45.89%

Номинальный рыночный риск составляет 45.89%, что в разы превышает риск, который мы приняли для себя нормальным. Однако, по отношению к капиталу (Capital), он не является таковым:

Risk = (Offer - LongExit_3) / Capital * 100 Risk = (9.24 - 5) / 1000000 * 100 = 0.000424%

Из этого следует, что с помощью управления размером позиции мы можем привести величину риска к нормальному значению:

MaxLongPos = Capital / Offer (максимально количество)

MaxRisk = (Offer - LongExit_3) * MaxLongPos (максимальный риск)

NormRisk = Capital * 0.02 (нормальный риск в размере 2%)

MaxLongPos = MaxLongPos * (NormRisk / MaxRisk) (уменьшение количества до нужного размера)

Подставим значения:

MaxLongPos = 1 000 000 / 9.24 = 108 225 MaxRisk = (9.24 - 5) * 108 225 = 458 874 NormRisk = 1 000 000 * 0.02 = 20 000 MaxLongPos = 108 225 * (20 000 / 458 874) = 4 717

Делаем проверку:

MaxRisk = (9.24 - 5) * 4 717 = 20 000

При количестве в сделке 4 717 шт и цене 9.24 наш риск не будет превышать 2% от капитала.

Максимизация прибыли

С управлением риском немного разобрались, теперь следует решить проблему управления прибылью или точнее её максимизации.

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

Примем весь путь, который проходит цена от значения StopLoss до TakeProfit равным 100%. Этот параметр необходим для определения максимального % капитала, который будет задействован в сделке. При цене равной StopLoss его значение принимаем равным 100%, при цене TakeProfit соответственно 0%. На примере уже известных значений рассмотрим какой капитал необходимо задействовать:

TE = LongTarget_3 - LongExit_3 (общий путь, который должна пройти цена)

PE = Offer - LongExit_3 (путь, который цена уже прошла или вероятный убыток)

PT = LongTarget_3 - Offer (путь, который предстоит пройти или потенциальная прибыль)

MaxLongPos = Capital / Offer * (1 - (PE / TE)) (пересчет максимального количества)

Подставим в формулы числовые значения:

TE = 17 - 5 = 11 PE = 9.24 - 5 = 4.24 PT = 17 - 9.24 = 7.76 MaxLongPos = 1 000 000 / 9.24 * (1 - (4.24 / 11)) = 66 509

Из расчета видно, что максимальное количество уменьшилось по сравнению с предыдущим. Было 108 225, стало 66 509. Что позволяет в случаи снижения цены, нарастить объем и таким образом улучшить среднюю цену открытых позиций. Что в свою очередь дает возможность получить большую прибыль. Для того, что бы у робота была возможность наращивать позицию, в алгоритм был введен «ограничитель» на максимальное количество в сделке. Его величина равна 10% от расчетной максимальной. Величина эмпирическая и является «классикой», в моделях по управлению капиталом на фондовых и финансовых рынках.

Теперь стоит соединить все эти расчеты воедино и увидеть полную картину управления рисками при открытии позиции. Так как при цене Offer = 9.24 не будет пройдена проверка на соотношении доходности к риску, то ее стоит изменить в меньшую сторону, к примеру, до значения 8.24

Приступаем к расчету:

TE = LongTarget_3 - LongExit_3 = 17 - 5 = 11 PE = Offer - LongExit_3 = 8.24 - 5 = 3.24 PT = LongTarget_3 - Offer = 17 - 8.24 = 8.76 RR = PT / PE = 8.76 / 3.24 = 2.7 (соотношение 2:1 выполнено, проверка пройдена) MaxLongPos = Capital / Offer * (1 - (PE / TE)) = 1 000 000 / 8.24 * (1 - (3.24 / 11)) = 86 165 MaxRisk = (Offer - LongExit_3) * MaxLongPos = (8.24 - 5) * 86 165 = 279 174.60 NormRisk = Capital * 0.02 = 1 000 000 * 0.02 = 20 000

MaxRisk > NormRisk, значит приводим его к нормальному за счет уменьшения количества:

MaxLongPos = MaxLongPos * (NormRisk / MaxRisk) = 86 165 * (20 000 / 279 174.60) = 6 172

Уменьшаем расчетное количество до 10%

OpenQty = MaxLongPos * 0.1 = 6 172 * 0.1 = 617

Количество в сделке на открытие LONG позиции по цене 8.24 составляет 617 шт. Данное количество будет оптимальным для риска 2% и возможности нарастить позицию в случаи, если цена будет ниже.

Для наглядности сымитируем поведение рынка с помощью генератора случайных чисел, в диапазоне от StopLoss до TakeProfit

Вводные данные:

Capital = 1 000 000 NormRisk = Capital * 2% = 20 000 StopLoss = 1 TakeProfit = 33 AmRND = (2;32) амплитуда случайных колебаний в диапазоне от 2 до 32 Offer[1… 31] = AmRND

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

https://www.cfp-trade.com/
https://www.cfp-trade.com/
https://www.cfp-trade.com/
https://www.cfp-trade.com/

Из симуляций становится понятно, что даже при абсолютно случайных колебаниях цены (Offer, синяя линия), алгоритм управления капиталом, стремится сформировать позицию по минимально возможной цене (красная линия на графиках). Что в свою очередь позволяет минимизировать потери и увеличить прибыль. Как это происходит на практике, можно увидеть с помощью еще нескольких симуляций. Только в этот раз, случайными будут не только колебания цены (Offer), но так же и уровни цен TakeProfit и StopLoss. Другими словами, мы создадим для алгоритма абсолютно не предсказуемые, случайные колебания цен в случайных диапазонах между StopLoss и TakeProfit. Симулируя рыночные ситуации таким образом, мы исключаем метод «подгонки» результата, что позволяет делать обоснованные выводы. Итак, были проведены восемь случайных симуляций, в которых 4 закончились получением прибыли, а 4 закончились убытком. Цель наших исследований доказать, что при 50-ти процентной вероятности точности сигналов и правильному управлению капитала, даже в условиях случайного «блуждания» цен, сохраняется возможность получения прибыли.

Вводные данные:

Capital = 1 000 000 NormRisk = Capital * 2% = 20 000 StopLoss = случайное число TakeProfit = случайное число AmRND = (StopLoss; TakeProdit) амплитуда случайных колебаний в диапазоне от StopLoss до TakeProfit Offer[1… 32] = AmRND

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

https://www.cfp-trade.com/
https://www.cfp-trade.com/

Из графиков отчетливо видно, что при точности сигналов в 50% и описанному выше алгоритму управления капитала, робот не только компенсирует убытки, но еще и получает значительную прибыль:

TotalLoss = 8087.83 + 11789.50 + 5876 + 4712 = 30 465.33 общий убыток от 4х убыточных сделок

TotalProfit = 100649.62 + 24246.77 + 68560.56 + 35565.03 = 229 021.98 общая прибыль от 4х прибыльных сделок

TotalPL = 229021.98 – 30465.33 = 198556.65 чистая прибыль от 8-ми сделок

Подведем итоги.

Из всего вышесказанного следует, что данный робот, не имеет особой уникальности. Все принципы, правила и теории, на которые он опирается, и которыми оперирует в своих расчетах, широко известны в кругах общения трейдеров, финансистов и управляющих активами. Однако, собранная воедино, отлаженная, проверенная временем и «отшлифованная» до совершенства, модель робота, это и есть уникальность. То самое «ноу-хау», которое с «точностью швейцарских часов», изо дня в день, из часа в час, генерирует очень не плохую прибыль!

График изменения капитала за год. Ось X – количество сделок https://www.cfp-trade.com/
График изменения капитала за год. Ось X – количество сделок https://www.cfp-trade.com/

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

На бирже, как известно, ценность информации, которая доступна всем равна нулю.

Именно для того, чтобы вам не пришлось погружаться во все тонкости биржевой торговли, набивать "шишки" и нести убытки, мы создали продукт "Контракт на Прибыль" (CFP)

В логику работы нашего проекта включены собственные инновационные разработки и проверенные решения, благодаря этому нам удается получать стабильную, постоянно растущую прибыль при торговле на фондовых, финансовых и товарных рынках. При этом риски сведены практически к нулю.

Подробную информацию о CFP и информацию о доходности вы можете изучить на нашем сайте http://cfp-trade.com/

Начать дискуссию