Tren Mengikuti Strategi Jangka Panjang Berdasarkan SuperTrend dan Fisher Transform

Penulis:ChaoZhang, Tanggal: 2023-11-03 15:42:16
Tag:

img

Gambaran umum

Strategi ini menggabungkan indikator SuperTrend dan Fisher Transform untuk menerapkan tren yang relatif stabil setelah strategi perdagangan jangka panjang. Ini menghasilkan sinyal beli ketika indikator SuperTrend memberikan sinyal beli dan indikator Fisher Transform turun di bawah -2,5 dan naik. Strategi ini mengelola posisi dengan benar dengan stop loss dan take profit.

Logika Strategi

  1. Indikator SuperTrend digunakan untuk menentukan arah tren harga. Ketika harga melintasi band atas, itu adalah sinyal bullish; ketika harga melintasi band bawah, itu adalah sinyal bearish. Strategi ini mengeluarkan sinyal beli ketika SuperTrend bullish.

  2. Indikator Fisher Transform mencerminkan dampak fluktuasi harga pada psikologi konsumen. Nilai Fisher antara (-2.5, 2.5) mewakili pasar netral, di bawah -2.5 mewakili pasar panik, dan di atas 2.5 mewakili pasar euforia. Strategi ini mengeluarkan sinyal beli ketika Fisher berada di bawah -2.5 dan naik, untuk menangkap titik balik dari panik menjadi netral.

  3. Strategi ini mengelola posisi dengan benar dengan stop loss dan take profit. Stop loss ditetapkan pada harga masuk dikurangi nilai ATR dikalikan dengan pengganda ATR, dan take profit ditetapkan pada harga masuk ditambah nilai ATR dikalikan dengan pengganda ATR. Amplitudo stop loss lebih besar dari amplitudo take profit, mencerminkan gagasan pengendalian risiko dari strategi tren berikut.

  4. Menghitung ukuran posisi berdasarkan ATR dan jumlah risiko sehingga risiko per unit tidak melebihi jumlah risiko yang ditetapkan.

Analisis Keuntungan

  1. Menggabungkan beberapa indikator menghindari perdagangan yang sering disebabkan oleh satu indikator. SuperTrend menentukan arah tren dan Fisher Transform menentukan psikologi pasar untuk membentuk sinyal perdagangan yang stabil.

  2. Menetapkan stop loss dan take profit yang tepat dapat membantu menangkap tren kepemilikan jangka panjang, sekaligus mengendalikan risiko.

  3. Menggunakan manajemen jumlah risiko dan ukuran tik minimum membuat risiko setiap perdagangan terkendali, menghindari kerugian besar di luar kemampuan.

  4. Sinyal perdagangan stabil dan cocok untuk memegang jangka panjang. Fisher Transform adalah indikator yang mulus, yang membantu menyaring kebisingan pasar dan menghindari sinyal palsu.

  5. Ruang pengoptimalan yang besar untuk parameter indikator. Periode ATR dan pengganda SuperTrend, dan kelancaran Fisher dapat disesuaikan sesuai dengan produk dan kerangka waktu yang berbeda untuk menemukan kombinasi parameter yang optimal.

Analisis Risiko

  1. Sebagai strategi yang mengikuti tren, ia akan mengumpulkan kerugian kecil selama periode yang terbatas pada kisaran.

  2. Fisher Transform tidak efektif untuk situasi ekstrem. Ketika pasar tetap dalam satu keadaan untuk waktu yang lama, nilai Fisher akan terus menyimpang dari zona netral, dalam hal ini strategi harus ditangguhkan.

  3. Periode ATR dan pengganda ATR harus diatur secara wajar untuk memastikan penyangga yang cukup untuk stop loss.

  4. Mengabaikan biaya transaksi akan menyebabkan perdagangan yang menguntungkan kehilangan uang. Biaya transaksi produk harus dipertimbangkan dan mengambil keuntungan yang disesuaikan.

  5. Ini membutuhkan partisipasi pasar jangka panjang untuk strategi untuk mewujudkan keuntungannya.

Arahan Optimasi

  1. Sesuaikan periode ATR, multiplier ATR untuk mengoptimalkan stop loss dan take profit.

  2. Cobalah parameter Fisher yang berbeda seperti periode halus untuk menemukan sinyal perdagangan yang lebih stabil.

  3. Tambahkan indikator lain sebagai filter untuk menghindari perdagangan yang salah ketika pasar tidak pasti.

  4. Uji strategi mengambil keuntungan yang berbeda seperti bergerak, parsial, ATR trailing, dll untuk meningkatkan profitabilitas.

  5. Mengoptimalkan strategi manajemen modal seperti pecahan tetap, rumus Kelly dll untuk meningkatkan rasio pengembalian / risiko.

  6. Optimalkan biaya transaksi, tetap menguntungkan untuk posisi kecil.

Kesimpulan

Strategi ini mengintegrasikan keuntungan dari SuperTrend, Fisher Transform dan indikator lain untuk membentuk tren yang stabil setelah strategi perdagangan jangka panjang. Melalui stop loss, take profit dan manajemen risiko, dapat mencapai rasio imbalan risiko yang baik. Strategi ini membutuhkan optimasi lebih lanjut pada parameter, penyaringan sinyal, manajemen modal dll untuk meningkatkan kinerja praktis. Tetapi logika keseluruhan kuat dan layak verifikasi praktis dan optimasi terus-menerus. Jika mengelola mengambil keuntungan dan pola pikir risiko dengan benar, strategi memiliki potensi untuk mencapai pengembalian jangka panjang yang stabil.


/*backtest
start: 2023-10-26 00:00:00
end: 2023-11-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend and Fisher_LONG", overlay=true)

//This block is for  Fisher Transformation Calculation.
len = input.int(10, minval=1, title="Length") // Length is optional. 10 is good but is up to you.
high_ = ta.highest(hl2, len)
low_ = ta.lowest(hl2, len)
round_(val) => val > .99 ? .999 : val < -.99 ? -.999 : val
value = 0.0
value := round_(.66 * ((hl2 - low_) / (high_ - low_) - .5) + .67 * nz(value[1]))
fish1 = 0.0
fish1 := .5 * math.log((1 + value) / (1 - value)) + .5 * nz(fish1[1])
fish2 = fish1[1]

// Buy condition for Fisher transformation.
buy_signal = (fish1 < -2.5) and (fish1 > fish2)
durum = 0 //just for the situation.

if (buy_signal)
    durum := 1 // now it changes from 0 to 1.

// Supertrend indicator inputs and calculations (same as in the indicator)
Periods = input(title='ATR Period', defval=10) // period is 10, but you can change it
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=2) //atr multiplier is important. it is 2 for this strategy but you can find another for best performance 
RiskAmount = input.float(title='Risk Amount ($)', defval=10.0, minval=0.0, step=1.0) // ıf you use risk-reward method, risk is 10$ for each position. you can also change it
changeATR = input(title='Change ATR Calculation Method ?', defval=true)

atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Calculate position size based on risk amount
riskPerContract = atr * Multiplier
contracts = RiskAmount / (riskPerContract * syminfo.mintick)

//short signal condition
buySignal = trend == 1 and trend[1] == -1 and durum == 1

plotshape(buySignal, title='Buy Signal', location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)

// variables
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float atr1 = na
var float takeProfit2 = na
var float takeProfit3 = na

//it calculates the stop level and reward profit levels using atr.
if (buySignal)
    entryPrice := close
    atr1 := atr
    stopLoss := entryPrice - atr1 * Multiplier
    contracts := entryPrice / (entryPrice - stopLoss) * RiskAmount / entryPrice
    takeProfit := entryPrice + atr1 * Multiplier
    takeProfit2 := entryPrice + 2 * atr1 * Multiplier
    takeProfit3 := entryPrice + 3 * atr1 * Multiplier

if (buySignal)
    strategy.entry("Buy", strategy.long, qty=contracts)

// 
if (close <= stopLoss)
    strategy.close("Buy", comment="Stop Loss Hit")
else if (close >= takeProfit)
    strategy.close("Buy", comment="Take Profit Hit")

// draw the stop, entry and profit levels
plot(stopLoss, title="Stop Loss", color=color.red, linewidth=1, style=plot.style_linebr)
plot(entryPrice, title="Entry Price", color=color.orange, linewidth=1, style=plot.style_linebr)
plot(takeProfit, title="Take Profit", color=color.green, linewidth=1, style=plot.style_linebr)
plot(takeProfit2, title="Take Profit 2", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(takeProfit3, title="Take Profit 3", color=color.purple, linewidth=1, style=plot.style_linebr)


Lebih banyak