27 октября 2021
Круиз контроль или адаптивный трейл
После очеред неудачных трейдов я уже давно в боте сделал тейк-профит и стоп-лосс. Использовать просто, одна команда и 4 параметра: TAKE Тикер Кол-во акций (если шорт, то отрицательное) тейк лосс, например для текущей ситуации:
take oxy 100 33.39 33.52
Иногда я выставлял тейки при активной торговли на случай отвлекли, важный звонок или просто интернет куда-то пропал. И даже есть авто-тейк, который по atr считает и выставляет сразу тейк и лосс на любую акцию при покупке-продаже. В ОС это более-менее еще работает, но в остальное время большой спред и велика вероятность купить акцию по биду и сразу же ее продать по аску.
В связи с чем я его перестал использовать, но тейк по-прежнему использую в волотильном мусоре, который в течении дня может смело выйти из зоны убытка в небольшой плюс и вернуться несколько раз обратно. Поэтому я опробовав разные вариации фиксирования убытков-прибыли сделал адаптивный трейл.
Как это работает изнутри 1 - тейк и лосс
У ТКС, как у любого брокера можно по API подписаться на стаканы и свечи. На текущий момент в боте существует подписка только на те инструменты, которые однажды пользователь добавил в список wait-list.
В момент каждого тика японской свечи расчитаются показатели для свечей Heiken Ashi (можно почиитать тут - https://academyfx.ru/grafik-heiken-ashi)
Вместе с ними считается простой атр, который у меня выступает индикатором волотильности:
get_ha {
my ($new, $old) = @_;
my $haopen = 0.0;
my $haclose = (($new->{open} + $new->{high} + $new->{low} + $new->{close})/4);
$haopen = ($new->{open} + $new->{close})/2 if (!$old || !$old->{haopen});
$haopen = ($old->{haopen} + $old->{haclose})/2 if ($old && $old->{haopen});
my $hahigh = max($new->{high}, max($haopen, $haclose));
my $halow = min($new->{low}, min($haopen, $haclose));
$new->{haopen} = $haopen;
$new->{haclose} = $haclose;
$new->{hahigh} = $hahigh;
$new->{halow} = $halow;
$new->{hacolor} = 'green' if $haclose > $haopen;
$new->{hacolor} = 'red' if $haopen >= $haclose;
$new->{'atr'} = max($new->{high}, $old->{close}) - min($new->{low}, $old->{close});
return $new;
}
В момент сохранения свечи расчитывается мой внутренний показатель изменения цены по последним двум свечам:
$data->{price_change} = ((abs($data->{open}-$data->{close})*100) + (100*abs($p->{open}-$p->{close})) + (100*abs($p1->{open}-$p1->{close})))/100;
В трейлинг-стопе и в тейках используется один из этих показателей.
take = current_price +- max(atr, change_price)
loss = current_price -= min(atr, change_price) * 3
На примере с oxy для лонг-позиции можно посчитать:
OXY - Occidental Petroleum, PROFIT: 0.02, ATR: 0.01,
🟥 BIDS|ASKS 🟩
13876 33.54|33.60 49
take = 33.54+0.02=33.56
loss = 33.54-0.03=33.51
**Как это работает 2 - трейлинг-стоп**
С тейками вроде бы все хорошо, их можно создать несколько и при резком движении акции в нужном направлении можно разбить шаблонно один тейк на несколько, фиксируясь частями.
Вроде бы все хорошо, но вслучае если акция полетит не туда - выполниться один тейк, а остальные будут висеть в ордерах.
Поэтому захотелось автоматический трейлинг-стоп и не особо думать о том какой тейк поставить.
Во-первых при резком росте цена быстро убегает. Во-вторых трейлинг можно использовать не имея позиций в портфеле.
В ткс бот подписан на приход стаканов 2го уровня с bid/ask, в момент каждого тика цены происходит поиск тейков-трейлов у пользователя.
В случае с OXY пример:
Вариант 1: цена растет
BID/ASK 33.86/33.92
Срабатывает трейл и меняет тейк по позиции:
take oxy 100 33.88 33.85
BID/ASK 33.99/34.01
take oxy 100 34.01 33.96
BID/ASK 34.04/34.05
take oxy 100 34.06 34.01
//цена меняется в обратную сторону
BID/ASK 33.95/34.01
цена < стоп-лосса, акции продаются по цене bid 33.95
Вариант 2: цена падает
bid/ask 33.50 33.52
ничего не происходит
bid/ask 33.49 33.50
акция продается по цене bid 33.49
OXY SLB TSLA