
この戦略は,移動平均線,ラグエルRSI指標,およびADX指標を組み合わせて,突破取引を実現します. Laguerre RSIが80以上で,ADXが20以上で,Laguerre RSIが20未満で,ADXが20以上で,Laguerre RSIが20未満で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,ADXは20以上で,Laguerre RSIが20以上で,ADXは20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,Laguerre RSIが20以上で,ADXは20以上で,Laguerre RSIが20以上で,ADXは20以上で,Laguerre RSIが20以上で,ADXは20以上で,Laguerre RSIは20以上で,Laguerre RSIは20以上で,ADXは20以上で,
この戦略は,トレンドと上場タイミングを以下の指標で判断します.
移動平均の組み合わせ:16日 EMA,48日 EMA,200日 SMA. 短期平均線上を長期平均線上を走る時は多頭市場と判断し,下を走る時は空頭市場と判断する.
ラグエールRSIは,超買超売の領域を判断する.RSIは,80以上は多頭シグナルで,20未満は空頭シグナルである.
ADX指標はトレンド状態を判断する。ADXは20以上でトレンド状態を示し,突破取引に適している。
入場信号は移動平均線の組み合わせでトレンドの方向を判断し,ラゲルRSIは入場タイミングを判断し,ADXフィルタは非トレンド市場である.出場信号は移動平均線が逆転したものである.全戦略判断枠は比較的合理的で,各指標は多空と入場退場を判断するために相互に配合されている.
この戦略は以下の利点があります.
トレンドの動力をキャプチャする:この戦略は,トレンドが始まるときにのみ入場し,後期市場の指数レベルの利益をキャプチャすることができます.
損失を制限する:適切なストップ・ロースを設定すれば,単一の損失を一定範囲で制御することができる.
指数组合判断の正確さ: 移動平均,ラグエルRSIおよびADX指標は,市場の空白と入場タイミングを比較的正確に判断できる.
この戦略は3つの指標のみを使って,簡単に実行し,簡単に習得できます.
この戦略にはいくつかのリスクがあります.
トレンド反転リスク:戦略はトレンドフォロー戦略に属し,トレンド反転を早期に判断しなければ大きな損失が生じます.
撤回リスク: 震動の状況では,ストップダストが突破され,口座に撤回をもたらす可能性があります.
パラメータ最適化リスク:指標のパラメータは,異なる市場に応じて調整する必要があるか否か,失効が発生する.
対策として
厳格な停止,単一損失を制御する.
指数パラメータを最適化し,突破口数を調整する.
期貨セット期間の保值などの方法による回収管理.
この戦略は以下の点で最適化できます.
最適なパラメータ最適化:移動平均周期,ラグエルRSIパラメータ,ADXパラメータをテストして,最適なパラメータの組み合わせを探します.
ブレイクスルー最適化:異なる移動平均のブレイクスルーをテストし,取引回数と利益率の間のバランスを探す.
入場条件の最適化:他の指標とラグエルRSI指標を組み合わせてテストし,入場タイミングをより正確に判断する条件を探す.
出場条件の最適化:他の指標を移動平均と組み合わせてより正確な出場信号判断として研究する.
利益の目標とストップ・ロスの最適化:異なるストップ・ストップ・ロスの戦略をテストし,アカウントの収益を最適化する.
この戦略は,移動平均,ラグエルRSIおよびADXの3つの指標の判断を使用して,トレンドの状況を効果的に捕捉します.トレンドが発達するときに間に合って入場し,トレンドの動きに合わせてインデックスレベルの利益を捕捉します.単一損失を制御するためにストップ・ローズ戦略を設定します.この戦略は,トレンドの状況を判断する積極的な投資家に適しています.また,パラメータ最適化後にプログラム取引を通じて自動実行するにも適しています.全体的に,この戦略は,強力な実用性を持っています.
/*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")