
Strategi ini dinamakan “Lightning Trimmer” dan merupakan strategi trend-following berdasarkan tiga purata bergerak. Ia menilai trend harga dengan mengira persilangan garis cepat, tengah dan lambat, dan menetapkan harga sasaran dan harga berhenti dengan nilai ATR.
Strategi ini menggunakan tiga purata bergerak berikut:
Apabila garis cepat melintasi garis tengah, garis tengah melintasi garis perlahan, dinilai sebagai melihat banyak trend; apabila garis cepat melintasi garis tengah, garis tengah melintasi garis perlahan, dinilai sebagai tren kosong.
Untuk menyaring sebahagian daripada urus niaga bising, strategi ini juga menetapkan beberapa syarat tambahan:
Apabila syarat-syarat ini dipenuhi, isyarat untuk melakukan lebih banyak atau lebih pendek akan dikeluarkan. Setiap kali hanya memegang satu kedudukan, anda boleh membuka kedudukan lagi setelah menetas atau berhenti.
Harga sasaran dan harga hentian ditetapkan berdasarkan nilai ATR.
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai risiko:
Untuk mengawal risiko, adalah disyorkan untuk menyesuaikan parameter purata bergerak dengan betul, mengoptimumkan kelipatan ATR, dan menetapkan masa memegang maksimum untuk mengelakkan kerugian tunggal yang terlalu besar.
Strategi ini boleh dioptimumkan dengan:
Strategi ini secara keseluruhan adalah strategi mengikuti trend yang stabil. Ia terutamanya bergantung kepada arah trend yang ditentukan oleh purata bergerak, dan ada sekumpulan indikator teknikal yang bekerjasama sebagai bantuan, yang dapat menyaring sebahagian daripada kebisingan. Walaupun masih ada ruang untuk pengoptimuman lebih lanjut, risiko keseluruhan boleh dikawal, sesuai untuk mengikuti trend garis panjang.
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
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/
// © greenmask9
//@version=4
strategy("Dazzling Bolts", overlay=true)
//max_bars_back=3000
// 13 SMMA
len = input(10, minval=1, title="SMMA Period")
src = input(close, title="Source")
smma = 0.0
smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len
// 55 EMA
emalength = input(55, title="EMA Period")
ema = ema(close, emalength)
// 100 SMA
smalength = input(110, title="SMA Period")
sma = sma(close, smalength)
emaforce = input(title="Force trend with medium EMA", type=input.bool, defval=true)
offsetemavalue = input(defval = 6)
bullbounce = smma>ema and ema>sma and low[5]>ema and low[2]<ema and close[1]>ema and (ema[offsetemavalue]>sma or (not emaforce))
bearbounce = smma<ema and ema<sma and high[5]<ema and high[2]>ema and close[1]<ema and (ema[offsetemavalue]<sma or (not emaforce))
plotshape(bullbounce, title= "Purple", location=location.belowbar, color=#ff33cc, transp=0, style=shape.triangleup, size=size.tiny, text="Bolts")
plotshape(bearbounce, title= "Purple", location=location.abovebar, color=#ff33cc, transp=0, style=shape.triangledown, size=size.tiny, text="Bolts")
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
longs = input(title="Test longs", type=input.bool, defval=true)
shorts = input(title="Test shorts", type=input.bool, defval=true)
atrlength = input(title="ATR length", defval=12)
atrm = input(title="ATR muliplier",type=input.float, defval=2)
atr = atr(atrlength)
target = close + atr*atrm
antitarget = close - (atr*atrm)
//limits and stop do not move, no need to count bars from since
bullbuy = bullbounce and longs and strategy.opentrades==0
bb = barssince(bullbuy)
bearsell = bearbounce and shorts and strategy.opentrades==0
bs = barssince(bearsell)
if (bullbuy)
strategy.entry("Boltsup", strategy.long, ordersize)
strategy.exit ("Bolts.close", from_entry="Boltsup", limit=target, stop=antitarget)
if (crossover(smma, sma))
strategy.close("Boltsup", qty_percent = 100, comment = "Bolts.crossover")
if (bearsell)
strategy.entry("Boltsdown", strategy.short, ordersize)
strategy.exit("Bolts.close", from_entry="Boltsdown", limit=antitarget, stop=target)
if (crossunder(smma, sma))
strategy.close("Boltsdown", qty_percent = 100, comment = "Bolts.crossover")
// if (bb<5)
// bulltarget = line.new(bar_index[bb], target[bb], bar_index[0], target[bb], color=color.blue, width=2)
// bullclose = line.new(bar_index[bb], close[bb], bar_index[0], close[bb], color=color.blue, width=2)
// bullstop = line.new(bar_index[bb], antitarget[bb], bar_index[0], antitarget[bb], color=color.blue, width=2)
// if (bs<5)
// bulltarget = line.new(bar_index[bs], antitarget[bs], bar_index[0], antitarget[bs], color=color.purple, width=2)
// bullclose = line.new(bar_index[bs], close[bs], bar_index[0], close[bs], color=color.purple, width=2)
// bullstop = line.new(bar_index[bs], target[bs], bar_index[0], target[bs], color=color.purple, width=2)