Стратегия «высокий-низкий»


Дата создания: 2023-09-14 17:53:17 Последнее изменение: 2023-09-14 17:53:17
Копировать: 0 Количество просмотров: 612
1
Подписаться
1617
Подписчики

Стратегический принцип

Эта стратегия основана на том, что в K-линии есть однородно высокие и низкие точки. Когда в течение недели появляется двойная дно или двойная вершина K-линии, это служит в качестве триггера для торгового сигнала.

Конкретная логика сделки заключается в следующем:

  1. Судить, что максимальная цена текущей или предыдущей линии K равна максимальной цене двух предыдущих линий K

  2. Определить, что минимальная цена текущей или предыдущей линии K равна минимальной цене двух предыдущих линий K

  3. Двойная основа - это когда цена выходит за пределы низкого уровня.

  4. Двойная вершина, когда цена пересекает пик

  5. Стоп-стоп устанавливается вблизи точки прорыва, а остановка - ATR, умноженная на коэффициент

Эта стратегия пытается использовать возможность для запуска тренда после того, как цена прорвет высокие и низкие точки своего уровня. Риск контролируется с помощью стратегии остановки убытка.

Стратегические преимущества

  • Сигнал прорыва ясен.

  • ATR-остановка динамически отслеживает тенденции

  • Правила просты, понятны, риски контролируемы

Стратегический риск

  • Относительно редкие образования

  • Стоп-пойнт слишком близко, есть риск быть остановленным

  • Необходимо обратить внимание на параметры ATR

Подвести итог

Эта стратегия используется для торговли трендами, используя возможности для прорыва на уровне более высоких или более низких уровней. Однако следует обратить внимание на установку стратегии стоп-стоп и частоту торгов.

Исходный код стратегии
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cherepanovvsb

//@version=5
strategy("SHL", overlay=true, margin_long=100, margin_short=100,initial_capital=100,default_qty_type = strategy.cash,default_qty_value =40,commission_type = strategy.commission.percent,commission_value =0.04,currency="EUR", process_orders_on_close=true)
atr = input.int(title="ATR length for abnormal candles", defval=5)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(high==high[1], style=shape.triangledown, location=location.abovebar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")
plotshape(low==high[1] or low==high[2] or low==high[3] or low==high[4] or low==high[5] or low==high[6], style=shape.triangleup, location=location.belowbar, color=color.green, title="Mirror Setup")
plotshape(high==low[1] or high==low[2] or high==low[3] or high==low[4] or high==low[5] or high==low[6], style=shape.triangledown, location=location.abovebar, color=color.green, title="Mirror Setup")
barcolor(high-low>2*ta.atr(atr)? color.yellow:na)


ATRlenght   = input.int(title="ATR length for take profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")

// Get ATR
atr1 = ta.atr(ATRlenght)

validlow =  low[1] == low[2] and not na(atr1)
validhigh = high[1]==high[2] and not na(atr1)

validlong = validlow and strategy.position_size == 0 and low[1]<low 
validshort = validhigh and strategy.position_size == 0 and high[1]>high

// Calculate Entrance, SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
shortStopPrice = high[1]+syminfo.mintick
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rewardMultiplier)
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
if validlong 
    tradeStopPrice := longStopPrice
    tradeTargetPrice := longTargetPrice
if validshort 
    tradeStopPrice := shortStopPrice
    tradeTargetPrice := shortTargetPrice
strategy.entry ("Long", strategy.long,1, when=validlong)
strategy.entry ("Short", strategy.short,1, when=validshort)

strategy.exit(id="Long Exit", from_entry="Long", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size < 0)

plot(strategy.position_size != 0 or validlong or validshort ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0 or validlong or validshort ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, transp=0)