Golden Cross Uptrend Tracking Strategi

Penulis:ChaoZhang, Tanggal: 2024-01-03 11:46:44
Tag:

img

Gambaran umum

Strategi ini dirancang berdasarkan prinsip golden cross of moving averages. Secara khusus, ia menggunakan dua moving average sederhana dari periode yang berbeda, yaitu garis 50 periode dan garis 200 periode. Ketika garis 50 periode menembus garis 200 periode dari bawah, sinyal beli dihasilkan. Ketika garis 50 periode menembus garis 200 periode dari atas, sinyal jual dihasilkan.

Logika Strategi

Strategi ini ditulis dalam bahasa Pine Script, dengan logika utama sebagai berikut:

  1. Menghitung dua SMA: SMA 50 periode dan SMA 200 periode
  2. Tentukan golden cross: ketika SMA 50 periode melintasi SMA 200 periode, pergi panjang
  3. Tentukan cross-death: ketika SMA 50 periode melintasi SMA 200 periode, posisi close

Pentingnya menggunakan indikator SMA di sini adalah karena dapat secara efektif menyaring kebisingan pasar dan menangkap tren jangka panjang. Ketika garis SMA yang lebih cepat melintasi di atas garis SMA yang lebih lambat, ini menunjukkan momentum tren naik jangka pendek mengalahkan tren penurunan jangka panjang, menghasilkan sinyal beli.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Prinsip yang sederhana dan mudah dimengerti, mudah diterapkan.
  2. Pengaturan PARAMETER yang wajar, dua periode SMA yang dapat disesuaikan, dapat disesuaikan dengan pasar yang berbeda.
  3. Ditulis dalam versi bahasa Pine yang stabil, berjalan dengan efisien.
  4. Pengaturan visual yang kaya, mudah digunakan.

Risiko dan Solusi

Strategi ini juga memiliki beberapa risiko:

  1. Bisa menyesuaikan dua parameter SMA untuk mengurangi probabilitas kepalsuan.

  2. Tidak dapat merespons pasar jangka pendek, hanya cocok untuk investor jangka panjang.

  3. Drawdown bisa besar, bisa mengatur stop loss, atau menyesuaikan manajemen posisi dengan benar.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam hal berikut:

  1. Tambahkan indikator lain untuk penyaringan, menggabungkan beberapa kondisi pembelian/penjualan untuk mengurangi sinyal palsu.

  2. Menambahkan mekanisme stop loss. Stop loss wajib ketika harga melanggar level tertentu.

  3. Mengoptimalkan manajemen posisi. Seperti piramida sepanjang tren, trailing stop loss dll. Untuk mengendalikan penarikan dan mengejar pengembalian yang lebih tinggi.

  4. Optimasi parameter: Evaluasi dampak dari parameter yang berbeda pada rasio pengembalian/risiko.

Kesimpulan

Secara umum, ini adalah strategi pelacakan tren yang khas. Ini memanfaatkan keuntungan SMA untuk menangkap tren jangka panjang secara sederhana dan efisien. Dapat menyesuaikan berdasarkan gaya dan ruang penyetelan seseorang. Juga perlu memperhatikan kekurangan yang ada untuk optimasi dan perbaikan lebih lanjut.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// www.tradingview.com/u/TradeFab/
// www.tradefab.com
// ___  __        __   __  __       __
//  |  |__)  /\  |  \ |__ |__  /\  |__)
//  |  |  \ /~~\ |__/ |__ |   /~~\ |__)
//
// DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss 
// and is not suitable for every investor. You are responsible for all the risks and 
// financial resources you use and for the chosen trading system.
// Past performance is not indicative for future results. In making an investment decision,
// traders must rely on their own examination of the entity making the trading decisions!
//
// TradeFab's Golden Cross Strategy.
// The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses
// above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short.
//
VERSION = "1.2"
// 1.2 FB 2020-02-09 converted to Pine version 4
// 1.1 FB 2017-01-15 added short trading
// 1.0 FB 2017-01-13 basic version using SMAs
//
strategy(
   title        = "TFs Golden Cross " + VERSION, 
   shorttitle   = "TFs Golden Cross " + VERSION, 
   overlay      = true
   )


///////////////////////////////////////////////////////////
// === INPUTS ===
///////////////////////////////////////////////////////////
inFastSmaPeriod     = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1)
inSlowSmaPeriod     = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1)

// backtest period
testStartYear       = input(title="Backtest Start Year",    type=input.integer, defval=2019, minval=2000)
testStartMonth      = input(title="Backtest Start Month",   type=input.integer, defval=1, minval=1, maxval=12)
testStartDay        = input(title="Backtest Start Day",     type=input.integer, defval=1, minval=1, maxval=31)
testStopYear        = input(title="Backtest Stop Year",     type=input.integer, defval=2099, minval=2000)
testStopMonth       = input(title="Backtest Stop Month",    type=input.integer, defval=12, minval=1, maxval=12)
testStopDay         = input(title="Backtest Stop Day",      type=input.integer, defval=31, minval=1, maxval=31)


///////////////////////////////////////////////////////////
// === LOGIC ===
///////////////////////////////////////////////////////////
smaFast = sma(close, inFastSmaPeriod)
smaSlow = sma(close, inSlowSmaPeriod)

bullishCross = crossover (smaFast, smaSlow)
bearishCross = crossunder(smaFast, smaSlow)

// detect valid backtest period
isTestPeriod() => true


///////////////////////////////////////////////////////////
// === POSITION EXECUTION ===
///////////////////////////////////////////////////////////
strategy.entry("long",  strategy.long,  when=bullishCross)
strategy.entry("short", strategy.short, when=bearishCross)


///////////////////////////////////////////////////////////
// === PLOTTING ===
///////////////////////////////////////////////////////////
// background color
nopColor = color.new(color.gray, 50)
bgcolor(not isTestPeriod() ? nopColor : na)

bartrendcolor = 
   close > smaFast and 
   close > smaSlow and 
   change(smaSlow) > 0 
       ? color.green 
       : close < smaFast and 
         close < smaSlow and 
         change(smaSlow) < 0 
             ? color.red 
             : color.blue
barcolor(bartrendcolor)
plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2)
plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2)

// label
posColor = color.new(color.green, 75)
negColor = color.new(color.red, 75)
dftColor = color.new(color.blue, 75)
posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor

var label lb = na
label.delete(lb)
lb := label.new(bar_index, max(high, highest(5)[1]),
   color=posCol,
   text="Pos: "+ posDir +
      "\nPnL: "+tostring(posProfit, "#.##")+"%" +
      "\nClose: "+tostring(close, "#.##"))
  

Lebih banyak