Artikel ini akan memperkenalkan strategi trend mengikut berdasarkan pengiraan K-line. Strategi ini menilai pergerakan pasaran dengan mengkaji arah K-line dan memasuki pasaran selepas K-line akar tetap.
Strategi ini berdasarkan kepada prinsip-prinsip berikut:
Mengira arah garis K, menilai keadaan Bias. Apabila N akar berturut-turut arah garis K bersesuaian, penilaian trend terbentuk.
Dalam trend naik, buat lebih apabila muncul N akar sinar berturut-turut; dalam trend turun, buat kosong apabila muncul N akar sinar berturut-turut.
Nilai N yang lebih kecil membolehkan strategi menangkap trend lebih cepat; tetapi nilai N yang terlalu kecil juga lebih mudah disesatkan oleh pasaran yang bergolak.
Anda boleh menetapkan titik berhenti untuk mengunci keuntungan dan mengawal risiko.
Apabila garis K yang berbalik muncul, kedudukan rata akan berhenti.
Strategi ini mempunyai kelebihan berikut:
Menggunakan K-line statistik untuk menilai trend, mudah, mudah dikendalikan.
Ia juga boleh digunakan untuk mengesan trend yang sedang berlaku.
Titik hentian pegangan tetap, boleh mengawal risiko dengan berkesan.
Parameter kiraan K boleh disesuaikan untuk persekitaran pasaran yang berbeza.
Strategi ini mudah difahami, mudah diubah dan dioptimumkan.
Strategi ini juga mempunyai risiko:
Dalam keadaan gegaran, kiraan K boleh memberi isyarat yang salah.
Titik hentian yang ditetapkan mungkin terlalu keras dan tidak dapat memperoleh keuntungan yang mencukupi.
Keputusan yang salah mengenai isyarat putaran balik boleh menyebabkan kerosakan awal.
Parameter harus diselaraskan dengan betul dan mengawal saiz kedudukan.
Pedagang perlu berhati-hati dalam menilai kelayakan parameter pengiraan.
Strategi ini mengintegrasikan K-line statistik dan trend mengikuti falsafah. Apabila parameter ditetapkan dengan asas yang munasabah, ia boleh menghasilkan kesan yang baik. Tetapi peniaga masih perlu menilai keadaan pasaran dengan berhati-hati dan menyesuaikan parameter dengan sewajarnya untuk mendapatkan keuntungan jangka panjang.
/*backtest
start: 2023-08-16 00:00:00
end: 2023-09-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
StrategyName = "BEST Candle Meter Strategy"
ShortStrategyName = "BEST Candle Meter Strategy"
// strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true,
// pyramiding=0, default_qty_value=100, precision=7, currency=currency.USD,
// commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=10000)
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// INPUTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// TD Sequential approach would be setting bar_counter == 9
bar_counter = input(5, "Bar Counter",minval=1, step=1)
// if based on same candle
GreenCandle = close > open
RedCandle = close < open
// if based on previous candle open
GreenPrevCandle = close > open[1]
RedPrevCandle = close < open[1]
// conditons
barUP = GreenCandle
barDN = RedCandle
///////////////////////////////////////////////////////////////////////////////
////////////////////////////// COUNTERS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
var barsFromUp = 0
var barsFromDn = 0
barsFromUp := barUP ? barsFromUp + 1 : 0
barsFromDn := barDN ? barsFromDn + 1 : 0
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// PLOTS ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
plot_color = barsFromUp > 0 ? color.lime : color.red
//plot(barsFromUp, title="UP Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)
//plot(barsFromDn, title="DN Histogram", color=plot_color, style=plot.style_histogram, linewidth=4)
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// HLINE ///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//hline(9, '9 TD Sequential Line', linestyle=hline.style_solid, linewidth=2, color=color.black)
//hline(13, '12 TD Sequential Line', linestyle=hline.style_solid, linewidth=3, color=color.purple)
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// PLOTCHAR //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// var _lbl_UP = label(na)
// if barsFromUp > 0
// _lbl_UP := label.new(bar_index, close, tostring(barsFromUp, '#'), textcolor=color.green, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)
// var _lbl_DN = label(na)
// if barsFromDn > 0
// _lbl_DN := label.new(bar_index, close, tostring(barsFromDn, '#'), textcolor=color.red, style=label.style_none, yloc=yloc.price, xloc=xloc.bar_index, size=size.normal)
//plotshape(barsFromUp > 0, "", shape.arrowup, location.abovebar, color.green, text="A")
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////// ALERTS ////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// alertcondition(barsFromUp == 9, title='🔔Sell 9 Alert🔔', message="Sell 9 Alert")
// alertcondition(barsFromDn == 9, title='🔔Buy 9 Alert🔔', message='Buy 9 Alert')
// alertcondition(barsFromUp > 9, title='🔔Sell > 9 Alert🔔', message="Sell > 9 Alert")
// alertcondition(barsFromDn > 9, title='🔔Buy > 9 Alert🔔', message='Buy > 9 Alert')
///////////////////////////////////////////////
//* Backtesting Period Selector | Component *//
///////////////////////////////////////////////
StartYear = input(2017, "Backtest Start Year",minval=1980)
StartMonth = input(1, "Backtest Start Month",minval=1,maxval=12)
StartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(StartYear,StartMonth,StartDay,0,0)
StopYear = input(2020, "Backtest Stop Year",minval=1980)
StopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
StopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(StopYear,StopMonth,StopDay,0,0)
testPeriod() => true
isLong = barsFromUp == bar_counter
isShort = barsFromDn == bar_counter
long_entry_price = valuewhen(isLong, close, 0)
short_entry_price = valuewhen(isShort, close, 0)
sinceNUP = barssince(isLong)
sinceNDN = barssince(isShort)
buy_trend = sinceNDN > sinceNUP
sell_trend = sinceNDN < sinceNUP
//////////////////////////
//* Profit Component *//
//////////////////////////
//////////////////////////// MinTick ///////////////////////////
fx_pips_value = syminfo.type == "forex" ? syminfo.mintick*10 : 1
input_tp_pips = input(60, "Backtest Profit Goal (in USD)",minval=0)*fx_pips_value
input_sl_pips = input(30, "Backtest STOP Goal (in USD)",minval=0)*fx_pips_value
tp = buy_trend? long_entry_price + input_tp_pips : short_entry_price - input_tp_pips
sl = buy_trend? long_entry_price - input_sl_pips : short_entry_price + input_sl_pips
plot_tp = buy_trend and high[1] <= tp ? tp : sell_trend and low[1] <= tp ? tp : na
plot_sl = buy_trend and low[1] >= sl ? sl : sell_trend and high[1] >= sl ? sl : na
plot(plot_tp, title="TP", style=plot.style_circles, linewidth=3, color=color.blue)
plot(plot_sl, title="SL", style=plot.style_circles, linewidth=3, color=color.red)
longClose = isShort
shortClose = isLong
if testPeriod()
strategy.entry("Long", 1, when=isLong)
strategy.close("Long", when=longClose )
strategy.exit("XL","Long", limit=tp, when=buy_trend, stop=sl)
if testPeriod()
strategy.entry("Short", 0, when=isShort)
strategy.close("Short", when=shortClose )
strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)