Mengikuti tren strategi jangka panjang berdasarkan SuperTrend dan transformasi Fisher


Tanggal Pembuatan: 2023-11-03 15:42:16 Akhirnya memodifikasi: 2023-11-03 15:42:16
menyalin: 0 Jumlah klik: 729
1
fokus pada
1617
Pengikut

Mengikuti tren strategi jangka panjang berdasarkan SuperTrend dan transformasi Fisher

Ringkasan

Strategi ini menggabungkan dua indikator SuperTrend dan Fisher Conversion, untuk mencapai strategi perdagangan yang lebih stabil mengikuti tren panjang. Strategi ini menghasilkan sinyal beli ketika indikator SuperTrend mengeluarkan sinyal beli, sementara indikator Fisher Conversion lebih kecil dari -2.5 dan naik. Strategi ini melakukan manajemen posisi dengan cara stop loss dan stop loss yang masuk akal.

Prinsip Strategi

  1. Indikator SuperTrend digunakan untuk menentukan arah tren harga. Ketika harga naik, sinyal bullish; Ketika harga turun, sinyal bearish. Strategi ini mengirim sinyal beli ketika SuperTrend adalah bullish.

  2. Indeks Fisher Conversion mencerminkan tingkat dampak dari fluktuasi harga terhadap psikologis konsumen. Nilai Fisher di kisaran [−2,5, 2,5] mewakili pasar netral, kurang dari 2,5 mewakili pasar panik, lebih besar dari 2,5 mewakili pasar euforia. Strategi ini mengirimkan sinyal beli ketika Fisher lebih kecil dari -2,5 dan naik untuk menangkap titik balik panik ke netral.

  3. Strategi untuk mengelola posisi dengan stop loss yang masuk akal. Stop loss ditetapkan sebagai harga masuk dikurangi ATR dengan perkalian ATR, stop loss ditetapkan sebagai harga masuk ditambah ATR dengan perkalian ATR. Stop loss lebih besar dari stop loss, yang mencerminkan pemikiran kontrol risiko tren mengikuti strategi.

  4. Juga mempertimbangkan pengelolaan jumlah risiko. Ukuran posisi dihitung berdasarkan ATR dan jumlah risiko, sehingga setiap unit risiko tidak melebihi jumlah risiko yang ditetapkan.

Analisis Keunggulan

  1. Kombinasi beberapa indikator, menghindari satu indikator menyebabkan perdagangan sering. SuperTrend menilai arah tren, Fisher transformasi menilai sisi psikologis pasar, keduanya digabungkan untuk membentuk sinyal perdagangan yang stabil.

  2. Pengaturan Stop Loss yang masuk akal membantu untuk menangkap tren untuk memegang garis panjang, sambil mengendalikan risiko.

  3. Menggunakan manajemen jumlah risiko dan unit transaksi minimum, membuat risiko setiap transaksi terkendali, menghindari kerugian besar melebihi kemampuan menanggung.

  4. Sinyal perdagangan stabil, cocok untuk memegang garis panjang. Transformasi Fisher adalah indikator yang halus, yang membantu menyaring kebisingan pasar dan menghindari sinyal palsu.

  5. Ada banyak ruang untuk mengoptimalkan parameter indikator. Anda dapat menyesuaikan siklus ATR dan parameter perkalian SuperTrend sesuai dengan siklus yang berbeda dari varietas yang berbeda, serta parameter perataan transformasi Fisher, untuk mencari kombinasi parameter terbaik.

Analisis risiko

  1. Sebagai strategi mengikuti tren, Anda akan mengakumulasi kerugian kecil pada tahap pemulihan yang bergoyang. Anda harus memilih varietas dan strategi operasi siklus yang jelas tren.

  2. Transformasi Fisher tidak bekerja dengan baik untuk situasi ekstrem. Jika pasar mempertahankan kondisi tertentu dalam jangka panjang, nilai Fisher akan terus menyimpang dari kisaran netral, dan pada saat ini strategi harus dihentikan.

  3. Terlalu dekat dengan titik stop dapat menyebabkan terlalu sering keluar. Periode ATR dan parameter ATR harus diatur secara masuk akal untuk memastikan jarak stop memiliki jarak penyangga tertentu.

  4. Mengabaikan biaya transaksi dapat menyebabkan kerugian transaksi kecil. Tingkat biaya transaksi varietas harus dipertimbangkan, dan stop loss harus disesuaikan.

  5. Perlu waktu yang lama untuk berpartisipasi dalam pasar untuk menunjukkan keunggulan strategi. Pastikan Anda memiliki cukup dana untuk mendukung perdagangan jangka panjang, dan tetap tenang.

Arah optimasi

  1. Mengatur ATR siklus dan ATR faktor parameter, mengoptimalkan stop-loss stop-loss amplitudo. Parameter dapat dioptimalkan melalui pengukuran data kembali, juga dapat dioptimalkan secara dinamis.

  2. Mencoba parameter perubahan Fisher yang berbeda, seperti siklus smoothing, untuk mencari sinyal perdagangan yang lebih stabil.

  3. Dalam kombinasi dengan indikator lain sebagai filter, menghindari perdagangan yang salah ketika pasar besar tidak pasti. Anda dapat menggunakan garis rata-rata, tingkat fluktuasi dan lain-lain untuk menentukan pergerakan pasar besar.

  4. Uji coba berbagai strategi penutupan, seperti penutupan bergerak, penutupan batch, penutupan ATR, dan lain-lain, untuk meningkatkan profitabilitas.

  5. Strategi pengelolaan dana yang dioptimalkan, seperti pengelolaan dana proporsi tetap, rumus Kelly, dan lain-lain, membuat keuntungan lebih tinggi daripada kerugian.

  6. Optimalkan biaya transaksi untuk memastikan bahwa posisi kecil tetap menguntungkan setelah transaksi

Meringkaskan

Strategi ini mengintegrasikan keunggulan indikator seperti SuperTrend dan Fisher Conversion, membentuk tren yang stabil mengikuti strategi perdagangan panjang. Dengan pengelolaan stop loss dan pengendalian risiko, dapat memperoleh tingkat pengembalian risiko yang lebih baik. Strategi ini harus dioptimalkan lebih lanjut dalam hal parameter, sinyal filter, dan pengelolaan dana, untuk mendapatkan kinerja saham yang lebih kuat.

Kode Sumber Strategi
/*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)