
Strategi ini didasarkan pada prinsip Golden Cross of Moving Averages. Secara khusus, strategi ini menggunakan Simple Moving Averages dari dua periode yang berbeda, yaitu 50 dan 200. Ini menghasilkan sinyal beli ketika 50 melintasi 200 dari bawah dan menjual ketika 50 melintasi 200 dari atas.
Strategi ini ditulis dalam bahasa Pine Script, dengan logika utama sebagai berikut:
Pentingnya menggunakan indikator SMA di sini adalah bahwa ia dapat secara efektif menghilangkan kebisingan dari data pasar, menangkap tren jangka panjang. Garis SMA cepat melewati garis SMA lambat, menunjukkan momentum kenaikan jangka pendek mengalahkan tren turun jangka panjang, dan menghasilkan sinyal beli.
Strategi ini memiliki beberapa keuntungan:
Strategi ini juga memiliki beberapa risiko:
Kemungkinan terjadi false breakout, membuat strategi menghasilkan sinyal yang salah. Dua parameter SMA dapat disesuaikan dengan tepat untuk mengurangi probabilitas false breakout.
Tidak dapat menanggapi pasar jangka pendek, hanya cocok untuk investor jangka panjang. Dapat mengurangi siklus SMA cepat dengan tepat.
Penarikan mungkin lebih besar. Anda dapat mengatur stop loss, atau menyesuaikan manajemen posisi.
Strategi ini dapat terus dioptimalkan dari beberapa dimensi:
Menambahkan filter indikator lain, menggabungkan beberapa kondisi beli/jual, mengurangi probabilitas sinyal palsu.
Meningkatkan mekanisme stop loss. Memaksakan stop loss ketika harga turun dari level tertentu.
Mengoptimalkan manajemen posisi. Misalnya, menaikkan posisi dengan tren, melacak stop loss, dll. Mengontrol penarikan dan mengejar keuntungan yang lebih tinggi.
Mengoptimalkan parameter. Mengevaluasi dampak dari berbagai parameter terhadap rasio risiko-keuntungan.
Strategi ini secara keseluruhan adalah strategi pelacakan tren yang khas. Ini memanfaatkan keuntungan dari SMA, mudah dan efisien menangkap tren garis panjang. Dapat disesuaikan sesuai dengan gaya dan parameter Anda sendiri.
/*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, "#.##"))