
Эта стратегия позволяет совершать прорывные сделки, используя в сочетании движущуюся среднюю, индикатор Laguerre RSI и индикатор ADX. Когда Laguerre RSI больше 80, ADX больше 20, когда она проходит медленную движущуюся среднюю на фоне быстрой движущейся средней; когда Laguerre RSI меньше 20, ADX больше 20, когда она проходит медленную движущуюся среднюю на фоне быстрой движущейся средней.
Стратегия основывается на следующих показателях для определения тенденций и сроков выхода на рынок:
Комбинация движущихся средних: 16-дневная EMA, 48-дневная EMA, 200-дневная SMA. При переходе на краткосрочные средние с использованием долгосрочных средних с использованием более высоких средних с использованием более низких средних с использованием более низких средних с использованием более высоких средних с использованием более низких средних с использованием более высоких средних с использованием более низких средних с использованием более низких средних с использованием более высоких средних с использованием более низких средних с использованием более высоких средних с использованием более низких средних с использованием более высоких средних с использованием более высоких средних с использованием более высоких средних с использованием более низких средних с использованием более высоких средних.
Лагуэрский RSI определяет зоны перекупа и перепродажи. RSI больше 80 - это сигнал плюс-хед, а меньше 20 - сигнал пустой-хед.
Индикатор ADX определяет состояние тренда. ADX больше 20 указывает на состояние тренда, подходящее для прорывной торговли.
Входный сигнал - это сочетание движущихся средних для определения направления тренда, Laguerre RSI для определения времени входа, ADX фильтрация не трендовых рынков. Выходный сигнал - это переход движущейся средней.
Эта стратегия имеет следующие преимущества:
Поймать динамику тренда: эта стратегия используется только тогда, когда тренд начинает развиваться, чтобы поймать индексную прибыль на последующих рынках.
Ограничение убытков: при правильном установлении стоп-лосса, можно контролировать одиночные убытки в определенном диапазоне. Даже если вы столкнетесь с ловушкой, есть возможность получить прибыль.
Достоверность в определении портфелей: подвижные средние, Laguerre RSI и ADX позволяют относительно точно определить свободность рынка и время входа.
Простая реализация: Стратегия использует только три показателя, она проста в реализации и легко овладевает.
Однако есть и риски:
Риск обратного тренда: стратегия относится к стратегии отслеживания тренда, и если не определить вовремя обратный тренд, то может произойти большой убыток.
Риск вывода: при шокирующих обстоятельствах стоп-лосс может быть преодолен, что приводит к выводу счета.
Риск оптимизации параметров: параметры показателя должны быть скорректированы в зависимости от рынка, иначе они могут быть неэффективными.
Ответ:
Строгое остановка, контроль за единичными потерями.
Оптимизация параметров показателей, коррекция количества прорывов.
Применение методов управления выводом, таких как срочная гарантия.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимальная параметровая оптимизация: тестирование циклов скользящих средних, параметров Laguerre RSI и параметров ADX для поиска оптимальной комбинации параметров.
Оптимизация прорыва: тестирование различных прорывов в скользящих средних, чтобы найти баланс между количеством сделок и прибыльностью.
Оптимизация входных условий: тестирование других показателей в сочетании с показателем Laguerre RSI, в поисках более точных условий для определения времени входа.
Оптимизация условий выхода из игры: изучение других показателей в сочетании с подвижными средними для более точного определения сигналов выхода из игры
Цели прибыли и оптимизация стоп-лосса: тестирование различных стратегий стоп-стоп-лосса для оптимизации прибыли счета.
Эта стратегия позволяет эффективно улавливать тенденции, используя три показателя: движущуюся среднюю величину, Laguerre RSI и ADX. Вовремя войти в тренд, когда он начинает развиваться, и следовать тренду, чтобы получить индексную прибыль.
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 1m
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/
// © PtGambler
//@version=5
strategy("3MA + Laguerre RSI + ADX [Pt]", shorttitle = "3MA+LaRSI+ADX[Pt]", overlay=true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills = false, max_bars_back = 500)
// ********************************** Trade Period / Strategy Setting **************************************
startY = input(title='Start Year', defval=2011, group = "Backtesting window")
startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Backtesting window")
startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Backtesting window")
finishY = input(title='Finish Year', defval=2050, group = "Backtesting window")
finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Backtesting window")
finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Backtesting window")
timestart = timestamp(startY, startM, startD, 00, 00)
timefinish = timestamp(finishY, finishM, finishD, 23, 59)
use_entry_sess = input.bool(false, 'Use Entry Session Window', group = "Trading Session")
t1_session = input("0930-1555:23456", "Entry Session", group="Trading Session", tooltip = "Entry Signal only generated within this period.")
t1 = time(timeframe.period, t1_session)
window = true
margin_req = input.float(1, title="Margin Requirement / Leverage", step=0.1, group = "Trading Options")
qty_per_trade = input.float(100, title = "% of initial capital per trade", group = "Trading Options")
reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options")
reinvest_percent = input.float(defval=100, title = "Reinvest percentage", group="Trading Options")
close_eod = input.bool(false, "All trades will close at the close of trading window", group = "Trading Options")
close_b4_open = input.bool(false, "Position must hit either SL/PT before entering new trade", group = "Trading Options")
profit = strategy.netprofit
strategy.initial_capital = 50000
float trade_amount = math.floor(strategy.initial_capital*margin_req / close)
if strategy.netprofit > 0 and reinvest
trade_amount := math.floor((strategy.initial_capital* (qty_per_trade/100)+(profit*reinvest_percent*0.01))*margin_req/ close)
else
trade_amount := math.floor(strategy.initial_capital* (qty_per_trade/100)*margin_req / close)
// ******************************************************************************************
group_ma = "Moving Average Ribbon"
group_larsi = "Laguerre RSI"
group_adx = "ADX"
group_SL = "Stop Loss / Profit Target"
// ----------------------------------------- MA Ribbon -------------------------------------
ema1_len = input.int(16, "Fast EMA Length", group = group_ma)
ema2_len = input.int(48, "Slow EMA Length ", group = group_ma)
sma1_len = input.int(200, "Slow SMA Length", group = group_ma)
ema1 = ta.ema(close, ema1_len)
ema2 = ta.ema(close, ema2_len)
sma1 = ta.sma(close, sma1_len)
plot(ema1, "EMA 1", color.white, linewidth = 2)
plot(ema2, "EMA 2", color.yellow, linewidth = 2)
plot(sma1, "SMA 1", color.purple, linewidth = 2)
ma_bull = ema1 > ema2 and ema2 > sma1
ma_bear = ema1 < ema2 and ema2 < sma1
// ------------------------------------------ Laguerre RSI ---------------------------------------
alpha = input.float(0.2, title='Alpha', minval=0, maxval=1, step=0.1, group = group_larsi)
gamma = 1 - alpha
L0 = 0.0
L0 := (1 - gamma) * close + gamma * nz(L0[1])
L1 = 0.0
L1 := -gamma * L0 + nz(L0[1]) + gamma * nz(L1[1])
L2 = 0.0
L2 := -gamma * L1 + nz(L1[1]) + gamma * nz(L2[1])
L3 = 0.0
L3 := -gamma * L2 + nz(L2[1]) + gamma * nz(L3[1])
cu = (L0 > L1 ? L0 - L1 : 0) + (L1 > L2 ? L1 - L2 : 0) + (L2 > L3 ? L2 - L3 : 0)
cd = (L0 < L1 ? L1 - L0 : 0) + (L1 < L2 ? L2 - L1 : 0) + (L2 < L3 ? L3 - L2 : 0)
temp = cu + cd == 0 ? -1 : cu + cd
LaRSI = temp == -1 ? 0 : cu / temp
LaRSI := LaRSI * 100
bull_LaRSI = LaRSI > 80
bear_LaRSI = LaRSI < 20
// --------------------------------------- ADX ------------------------
adxlen = input(14, title="ADX Smoothing", group = group_adx)
dilen = input(14, title="DI Length", group = group_adx)
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
active_adx = sig > 20 //and sig > sig[1]
// ******************************* Profit Target / Stop Loss *********************************************
use_SLPT = input.bool(false, 'Use Fixed SL / PT', group = group_SL)
SL = input.float(50, 'Stop loss in ticks', step = 1, group = group_SL) * syminfo.mintick
PT = input.float(100, "Profit target in ticks", step = 1, group = group_SL) * syminfo.mintick
var L_PT = 0.0
var S_PT = 0.0
var L_SL = 0.0
var S_SL = 0.0
if strategy.position_size > 0
L_SL := L_SL[1]
L_PT := L_PT[1]
else if strategy.position_size < 0
S_SL := S_SL[1]
S_PT := S_PT[1]
else
L_SL := close - SL
L_PT := close + PT
S_SL := close + SL
S_PT := close - PT
entry_line = plot(use_SLPT and strategy.position_size != 0 ? strategy.opentrades.entry_price(0) : na, "Entry Price", color.white, linewidth = 1, style = plot.style_linebr)
L_PT_line = plot(use_SLPT and strategy.position_size > 0 ? L_PT : na, "L PT", color.green, linewidth = 2, style = plot.style_linebr)
S_PT_line = plot(use_SLPT and strategy.position_size < 0 ? S_PT : na, "S PT", color.green, linewidth = 2, style = plot.style_linebr)
L_SL_line = plot(use_SLPT and strategy.position_size > 0 ? L_SL : na, "L SL", color.red, linewidth = 2, style = plot.style_linebr)
S_SL_line = plot(use_SLPT and strategy.position_size < 0 ? S_SL : na, "S SL", color.red, linewidth = 2, style = plot.style_linebr)
fill(L_PT_line, entry_line, color = color.new(color.green,90))
fill(S_PT_line, entry_line, color = color.new(color.green,90))
fill(L_SL_line, entry_line, color = color.new(color.red,90))
fill(S_SL_line, entry_line, color = color.new(color.red,90))
// ---------------------------------- Strategy setup ------------------------------------------------------
L_entry1 = ma_bull and bull_LaRSI and active_adx
S_entry1 = ma_bear and bear_LaRSI and active_adx
L_exit1 = ta.crossunder(ema1, ema2)
S_exit1 = ta.crossover(ema1, ema2)
// Trigger zones
bgcolor(ma_bull ? color.new(color.green ,90) : na)
bgcolor(ma_bear ? color.new(color.red,90) : na)
if L_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true)
strategy.entry("Long", strategy.long, trade_amount)
if S_entry1 and (use_entry_sess ? window : true) and (close_b4_open ? strategy.position_size == 0 : true)
strategy.entry("Short", strategy.short, trade_amount)
if use_SLPT
strategy.exit("Exit Long", "Long", limit = L_PT, stop = L_SL, comment_profit = "Exit Long, PT hit", comment_loss = "Exit Long, SL hit")
strategy.exit("Exit Short", "Short", limit = S_PT, stop = S_SL, comment_profit = "Exit Short, PT hit", comment_loss = "Exit Short, SL hit")
else
if L_exit1
strategy.close("Long", comment = "Exit Long")
if S_exit1
strategy.close("Short", comment = "Exit Short")
if use_entry_sess and not window and close_eod
strategy.close_all(comment = "EOD close")