Эта стратегия основана на том, что в K-линии есть однородно высокие и низкие точки. Когда в течение недели появляется двойная дно или двойная вершина K-линии, это служит в качестве триггера для торгового сигнала.
Конкретная логика сделки заключается в следующем:
Судить, что максимальная цена текущей или предыдущей линии K равна максимальной цене двух предыдущих линий K
Определить, что минимальная цена текущей или предыдущей линии K равна минимальной цене двух предыдущих линий K
Двойная основа - это когда цена выходит за пределы низкого уровня.
Двойная вершина, когда цена пересекает пик
Стоп-стоп устанавливается вблизи точки прорыва, а остановка - 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)