Trend mengikut strategi jangka panjang berdasarkan transformasi SuperTrend dan Fisher


Tarikh penciptaan: 2023-11-03 15:42:16 Akhirnya diubah suai: 2023-11-03 15:42:16
Salin: 0 Bilangan klik: 729
1
fokus pada
1617
Pengikut

Trend mengikut strategi jangka panjang berdasarkan transformasi SuperTrend dan Fisher

Gambaran keseluruhan

Strategi ini menggabungkan kedua-dua indikator SuperTrend dan Fisher Conversion, untuk mencapai strategi perdagangan yang lebih stabil. Apabila indikator SuperTrend mengeluarkan isyarat beli, dan apabila indikator Fisher Conversion lebih kecil daripada 2.5 dan naik, menghasilkan isyarat beli. Strategi ini menjalankan pengurusan kedudukan dengan cara berhenti dan berhenti yang munasabah.

Prinsip Strategi

  1. Indikator SuperTrend digunakan untuk menentukan arah trend harga. Apabila harga naik ke atas, ia memberi isyarat bullish; apabila harga turun ke bawah, ia memberi isyarat bearish. Strategi ini menghantar isyarat beli apabila SuperTrend memberi isyarat bullish.

  2. Indeks perubahan Fisher mencerminkan tahap kesan perubahan harga terhadap psikologi pengguna. Nilai Fisher dalam julat ((-2.5, 2.5) mewakili pasaran neutral, kurang daripada 2.5 mewakili panik pasaran, lebih besar daripada 2.5 mewakili euforia pasaran. Strategi ini menghantar isyarat beli apabila Fisher lebih kecil daripada 2.5 dan naik untuk menangkap titik peralihan panik ke neutral.

  3. Strategi untuk menguruskan kedudukan dengan hentian kerugian yang munasabah. Hentian kerugian ditetapkan sebagai harga masuk tolak ATR dan kali ganda ATR, hentian kerugian ditetapkan sebagai harga masuk ditambah ATR dan kali ganda ATR.

  4. Pengurusan jumlah risiko juga dipertimbangkan. Saiz kedudukan dikira berdasarkan ATR dan jumlah risiko, supaya setiap unit risiko tidak melebihi jumlah risiko yang ditetapkan.

Analisis kelebihan

  1. Gabungan pelbagai petunjuk, mengelakkan satu petunjuk menyebabkan perdagangan sering. SuperTrend menilai arah trend, Fisher mengubah menilai aspek psikologi pasaran, kedua-duanya digabungkan untuk membentuk isyarat perdagangan yang stabil.

  2. Menetapkan penangguhan kerugian yang munasabah untuk memegang garis panjang dan mengawal risiko.

  3. Pengurusan jumlah risiko dan unit perdagangan minimum digunakan untuk mengawal risiko setiap perdagangan dan mengelakkan kerugian yang lebih besar daripada yang dapat ditanggung.

  4. Isyarat dagangan stabil, sesuai untuk memegang garis panjang. Pertukaran Fisher adalah penunjuk yang halus, membantu menapis bunyi pasaran dan mengelakkan isyarat palsu.

  5. Ruang untuk mengoptimumkan parameter penunjuk adalah luas. Anda boleh menyesuaikan parameter ATR kitaran dan pengganda SuperTrend mengikut kitaran yang berbeza, dan parameter kelancaran perubahan Fisher, untuk mencari kombinasi parameter terbaik.

Analisis risiko

  1. Sebagai strategi mengikuti trend, kerugian kecil akan terkumpul pada tahap pemulihan gegaran. Jenis dan strategi operasi kitaran yang jelas trend harus dipilih.

  2. Perubahan Fisher tidak berkesan untuk keadaan yang melampau. Apabila pasaran mengekalkan keadaan tertentu untuk jangka masa yang lama, nilai Fisher akan terus menyimpang dari julat neutral, dan ketika ini strategi harus ditangguhkan.

  3. Terlalu dekat dengan titik hentian boleh menyebabkan terlalu kerap keluar. Periode ATR dan parameter ATR harus ditetapkan dengan munasabah untuk memastikan jarak hentian mempunyai jarak perlindungan tertentu.

  4. Mengabaikan kos urus niaga boleh menyebabkan kerugian urus niaga keuntungan kecil. Tingkat kos urus niaga untuk varieti harus dipertimbangkan, penyesuaian yang sesuai untuk menghentikan kenaikan.

  5. Perlu masa yang lama untuk terlibat dalam pasaran untuk menunjukkan kelebihan strategi. Anda harus memastikan bahawa anda mempunyai cukup wang untuk menyokong perdagangan jangka panjang, dan anda harus stabil dalam fikiran.

Arah pengoptimuman

  1. Sesuaikan parameter kitaran ATR dan perkalian ATR untuk mengoptimumkan stop loss stop loss. Parameter boleh dioptimumkan melalui pengesanan semula data, juga boleh dioptimumkan secara dinamik.

  2. Cuba parameter perubahan Fisher yang berbeza, seperti kitaran lancar, untuk mencari isyarat perdagangan yang lebih stabil. Ia boleh digabungkan dengan parameter penyesuaian dinamik kadar turun naik pasaran.

  3. Gabungan dengan penunjuk lain sebagai penapis, mengelakkan perdagangan yang salah ketika pasaran utama tidak pasti. Anda boleh menggunakan garis rata-rata, kadar turun naik dan lain-lain untuk menentukan pergerakan pasaran utama.

  4. Uji strategi penangguhan yang berbeza, seperti penangguhan bergerak, penangguhan kumpulan, penangguhan ATR, dan sebagainya, untuk meningkatkan keuntungan.

  5. Strategi pengurusan wang yang dioptimumkan, seperti pengurusan wang peratusan tetap, formula Kelly, dan sebagainya, menjadikan keuntungan lebih tinggi daripada kerugian.

  6. Mengoptimumkan kos dagangan untuk memastikan keuntungan selepas dagangan pegangan kecil.

ringkaskan

Strategi ini mengintegrasikan kelebihan indikator seperti SuperTrend dan Fisher transformasi, membentuk trend yang stabil mengikuti strategi perdagangan panjang. Dengan menghentikan pengurusan dan kawalan risiko, anda boleh mendapatkan kadar pulangan risiko yang lebih baik. Strategi ini perlu dioptimumkan lebih lanjut dalam parameter, penapis isyarat, dan pengurusan wang untuk mendapatkan prestasi saham yang lebih kuat.

Kod 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)