Artikel ini memperkenalkan strategi mengikuti tren berdasarkan jumlah lilin.
Strategi ini didasarkan pada:
Menghitung arah lilin untuk menentukan bias pasar Ketika N lilin berturut-turut pergi ke satu arah, sebuah tren diidentifikasi.
Dalam tren naik, pergi panjang setelah N lilin bearish berturut-turut. dalam tren turun, pergi pendek setelah N lilin bullish berturut-turut.
Nilai N yang lebih kecil menangkap tren lebih cepat tetapi lebih rentan terhadap whipsaws.
Fixed take profit dan stop loss point mengunci keuntungan dan mengontrol risiko.
Tutup posisi saat lilin pembalikan muncul.
Keuntungan dari strategi ini:
Penghitungan lilin sederhana untuk penilaian tren langsung.
Dengan entri tren menangkap tren bergerak dengan baik.
Stop tetap secara efektif mengelola risiko.
Parameter yang dapat disesuaikan sesuai dengan lingkungan pasar yang berbeda.
Logika sederhana membuat optimasi mudah.
Ada juga risiko yang perlu dipertimbangkan:
Penghitungan dapat menyesatkan di berbagai pasar.
Stop tetap dapat membatasi potensi keuntungan.
Stop out prematur dari penilaian pembalikan yang buruk.
Sesuaikan parameter dan ukuran dengan tepat.
Parameter penghitungan harus dievaluasi dengan hati-hati.
Strategi ini menggabungkan penghitungan lilin dan mengikuti tren. Dengan penyesuaian yang tepat, itu dapat menghasilkan hasil yang layak. Tetapi pedagang harus mengevaluasi pasar dengan hati-hati dan menyesuaikan parameter untuk 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)