Sumber dimuat naik... memuat...

Trend Mengikut Strategi Jangka Panjang Berdasarkan SuperTrend dan Fisher Transform

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

img

Ringkasan

Strategi ini menggabungkan penunjuk SuperTrend dan Fisher Transform untuk melaksanakan trend yang agak stabil berikutan strategi perdagangan jangka panjang. Ia menghasilkan isyarat beli apabila penunjuk SuperTrend memberikan isyarat beli dan penunjuk Fisher Transform turun di bawah -2.5 dan naik. Strategi ini menguruskan kedudukan dengan betul dengan stop loss dan mengambil keuntungan.

Logika Strategi

  1. Indikator SuperTrend digunakan untuk menentukan arah trend harga. Apabila harga melintasi band atas, ia adalah isyarat menaik; apabila harga melintasi band bawah, ia adalah isyarat menurun. Strategi ini mengeluarkan isyarat beli apabila SuperTrend menaik.

  2. Penunjuk Transform Fisher mencerminkan kesan turun naik harga pada psikologi pengguna. Nilai Fisher antara (-2.5, 2.5) mewakili pasaran neutral, di bawah -2.5 mewakili pasaran panik, dan di atas 2.5 mewakili pasaran euforia. Strategi ini mengeluarkan isyarat beli apabila Fisher di bawah -2.5 dan meningkat, untuk menangkap titik perubahan dari panik ke neutral.

  3. Strategi ini menguruskan kedudukan dengan betul dengan stop loss dan mengambil keuntungan. Stop loss ditetapkan pada harga kemasukan dikurangkan nilai ATR dikalikan dengan pengganda ATR, dan mengambil keuntungan ditetapkan pada harga kemasukan ditambah nilai ATR dikalikan dengan pengganda ATR. Amplitudo kehilangan berhenti lebih besar daripada amplitudo mengambil keuntungan, mencerminkan idea kawalan risiko strategi trend berikut.

  4. Ia juga mempertimbangkan pengurusan jumlah risiko. Mengira saiz kedudukan berdasarkan ATR dan jumlah risiko supaya risiko setiap unit tidak melebihi jumlah risiko yang ditetapkan.

Analisis Kelebihan

  1. Menggabungkan beberapa penunjuk mengelakkan perdagangan yang kerap disebabkan oleh satu penunjuk. SuperTrend menentukan arah trend dan Fisher Transform menentukan psikologi pasaran untuk membentuk isyarat perdagangan yang stabil.

  2. Menetapkan stop loss dan mengambil keuntungan yang betul adalah kondusif untuk menangkap trend untuk pegangan jangka panjang, sambil mengawal risiko.

  3. Menggunakan pengurusan jumlah risiko dan saiz tik minimum menjadikan risiko setiap perdagangan terkawal, mengelakkan kerugian besar di luar kemampuan.

  4. Isyarat perdagangan adalah stabil dan sesuai untuk memegang jangka panjang. Fisher Transform adalah penunjuk yang lancar, yang membantu menapis bunyi bising pasaran dan mengelakkan isyarat palsu.

  5. Ruang pengoptimuman yang besar untuk parameter penunjuk. Tempoh dan pengganda ATR SuperTrend, dan kelancaran Fisher boleh diselaraskan mengikut produk dan jangka masa yang berbeza untuk mencari kombinasi parameter yang optimum.

Analisis Risiko

  1. Sebagai strategi trend, ia akan mengumpulkan kerugian kecil dalam tempoh julat.

  2. Fisher Transform tidak berkesan untuk situasi yang melampau. Apabila pasaran kekal dalam satu keadaan untuk masa yang lama, nilai Fisher akan terus menyimpang dari zon neutral, dalam kes ini strategi harus digantung.

  3. Jangka masa ATR dan pengganda ATR harus ditetapkan dengan munasabah untuk memastikan penyangga yang mencukupi untuk stop loss.

  4. Mengabaikan kos transaksi akan menyebabkan perdagangan yang menguntungkan kehilangan wang. Kos transaksi produk harus dipertimbangkan dan mengambil keuntungan yang diselaraskan.

  5. Memastikan modal yang mencukupi untuk menyokong perdagangan jangka panjang dan mengekalkan pemikiran yang stabil.

Arahan pengoptimuman

  1. Sesuaikan tempoh ATR, pengganda ATR untuk mengoptimumkan stop loss dan mengambil keuntungan.

  2. Cuba parameter Fisher yang berbeza seperti tempoh yang lancar untuk mencari isyarat perdagangan yang lebih stabil.

  3. Tambah penunjuk lain sebagai penapis untuk mengelakkan perdagangan yang salah apabila pasaran tidak pasti.

  4. Uji strategi keuntungan yang berbeza seperti bergerak, separa, ATR, dll untuk meningkatkan keuntungan.

  5. Mengoptimumkan strategi pengurusan modal seperti pecahan tetap, formula Kelly dan lain-lain untuk meningkatkan nisbah pulangan / risiko.

  6. Mengoptimumkan kos transaksi, mengekalkan keuntungan untuk kedudukan kecil.

Kesimpulan

Strategi ini mengintegrasikan kelebihan SuperTrend, Fisher Transform dan penunjuk lain untuk membentuk trend yang stabil mengikuti strategi perdagangan jangka panjang. Melalui stop loss, mengambil keuntungan dan pengurusan risiko, ia dapat mencapai nisbah ganjaran risiko yang baik. Strategi ini memerlukan pengoptimuman lebih lanjut pada parameter, penapisan isyarat, pengurusan modal dan lain-lain untuk meningkatkan prestasi praktikal.


/*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 lanjut