Strategi Perdagangan Purata Pergerakan Berganda


Tarikh penciptaan: 2023-10-13 15:45:58 Akhirnya diubah suai: 2023-10-13 15:45:58
Salin: 1 Bilangan klik: 642
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan sistem rata-rata bergerak dua kali ganda sebagai isyarat dagangan utama, sambil memfilter isyarat dagangan dalam kombinasi dengan indikator pengesahan jumlah dagangan TDFI untuk memanfaatkan kelebihan rata-rata bergerak yang lancar dan mengurangkan kesilapan perdagangan dalam persekitaran pasaran bukan utama.

Prinsip Strategi

Strategi ini menggunakan dua set set parameter yang berbeza untuk satu set rata-rata bergerak yang selaras bekerjasama sebagai isyarat perdagangan utama. Pertama, menggunakan set cepat 8 kitaran rata-rata bergerak yang selaras bekerjasama sebagai isyarat pengesahan pertama, dan kemudian menggunakan 16 kitaran rata-rata bergerak yang lebih perlahan sebagai isyarat pengesahan kedua. Apabila rata-rata bergerak cepat mengeluarkan isyarat membeli, jika rata-rata bergerak yang lebih perlahan juga mengeluarkan isyarat dalam arah yang sama, dan dalam 1 hingga 2 garis K yang paling baru, maka lebih banyak perdagangan akan dilakukan; apabila rata-rata bergerak cepat mengeluarkan isyarat menjual, jika rata-rata bergerak yang lebih perlahan juga mengeluarkan isyarat dalam arah yang sama, dan dalam 1 hingga 2 garis K yang paling baru, maka kedudukan akan kosong.

Kelebihan Strategik

  • Rata-rata bergerak yang lancar dapat menjejaki trend dengan berkesan, mengelakkan daripada terjejas oleh bunyi pasaran, dan membantu menangkap trend garis tengah dan panjang
  • Kombinasi purata bergerak dua hala yang dapat meningkatkan kebolehpercayaan isyarat dan mengelakkan perdagangan yang salah di pasaran bukan utama
  • Pengenalan penunjuk jumlah dagangan yang dapat menyaring isyarat yang menyesatkan yang disebabkan oleh jumlah rendah dan mengelakkan kerugian yang tidak perlu
  • Luas untuk mengoptimumkan parameter strategi, boleh disesuaikan mengikut pelbagai jenis dan kitaran, beradaptasi kuat

Risiko Strategik

  • Sistem purata bergerak yang lancar mudah mengenali isyarat terlambat pada titik perubahan trend, yang mungkin menyebabkan kerugian tertentu
  • Dalam keadaan yang tidak dominan, purata bergerak berganda masih boleh menghantar isyarat yang salah pada masa yang sama
  • Indeks jumlah dagangan terhad, tidak dapat mengelakkan semua isyarat yang salah

Untuk mengurangkan risiko di atas, arah pengoptimuman berikut boleh dipertimbangkan:

  • Menambah Indeks Trend Force untuk Membantu Menentukan Titik Peralihan Trend
  • Mengoptimumkan parameter purata bergerak licin, menjadikan konfigurasi perlahan lebih munasabah
  • Mencuba pelbagai petunjuk jumlah dagangan untuk penapisan yang lebih baik terhadap isyarat palsu yang rendah

Arah pengoptimuman strategi

  • Penambahan penunjuk tambahan seperti MACD untuk menentukan titik perubahan trend
  • Menyesuaikan parameter ATR stop-loss untuk menyesuaikan dengan ciri-ciri pelbagai jenis
  • Cuba untuk meningkatkan peratusan pembinaan gudang untuk meningkatkan kadar pulangan strategi
  • Parameter pengoptimuman berdasarkan hasil tinjauan semula untuk meningkatkan kestabilan strategi

ringkaskan

Strategi ini secara keseluruhannya adalah strategi pengesanan trend yang tipikal. Sistem rata-rata bergerak dua kali ganda yang digabungkan dengan penapis jumlah perdagangan TDFI, dapat memainkan fungsi pengesanan trend dengan lebih baik, sambil mengurangkan kadar isyarat yang salah dalam keadaan yang tidak utama. Melalui pengoptimuman parameter, dapat disesuaikan dengan ciri-ciri pasaran yang berbeza dalam tempoh dan varieti. Tetapi strategi ini lebih bergantung pada penyesuaian parameter, dan bukan secara mekanikal.

Kod sumber strategi
/*backtest
start: 2022-10-06 00:00:00
end: 2023-10-12 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Designed per No Nonsense Forex VP rules
//Made to be as modular as possible, so we can swap the indicators in and out.
//Originated from causecelebre
//Tried to put in as much VP rules as possible

///////////////////////////////////////////////////
//Rules Implemented:
///////////////////////////////////////////////////
// - SL 1.5 x ATR
// - TP 1 x ATR
//
// - Entry conditions
//// - Entry within first confirmation cross over and 1 candle of second confirmation + volume
// - Exit conditions
//// - Exit on exit indicator or when baseline or confirmation flip 

///////////////////////////////////////////////////
//Trades entries
///////////////////////////////////////////////////
// - First entry L1 or S1 with standard SL and TP

///////////////////////////////////////////////////
//Included Indicators and settings
///////////////////////////////////////////////////
// - Confirmtion = SSL 8, 16
// - Volume = TDFI 6

///////////////////////////////////////////////////
//Credits
// Strategy causecelebre https://www.tradingview.com/u/causecelebre/
// TDFI causecelebre https://www.tradingview.com/u/causecelebre/
// SSL Channel ErwinBeckers https://www.tradingview.com/u/ErwinBeckers/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// strategy(title="NNFX Strategy 3 Indicator Template | jh", overlay = true, pyramiding=0, initial_capital=20000, currency=currency.USD, calc_on_order_fills=0,default_qty_type=strategy.fixed, default_qty_value=10000)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  **** Set the main stuff  ****
///////////////////////////////////////////////////

//Price
price = close

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ATR stuff
///////////////////////////////////////////////////

slMultiplier = input(1.5, "SL")
tpMultiplier = input(1, "TP")

atrlength = input(title="ATR Length", defval=14, minval=1)
atrsmoothing = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"])

ma_function(source, atrlength) => 
    if atrsmoothing == "RMA"
        rma(source, atrlength)
    else
        if atrsmoothing == "SMA"
            sma(source, atrlength)
        else
            if atrsmoothing == "EMA"
                ema(source, atrlength)
            else
                wma(source, atrlength)

//plot(ma_function(tr(true), atrlength), title = "ATR", color=#991515, transp=0)

atr = ma_function(tr(true), atrlength)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  **** Confirmation 1 Fast ****
///////////////////////////////////////////////////

///////////////////////////////////////////////////
//SSL 6
///////////////////////////////////////////////////

ssllen1=input(title="SSL 1 Length Period", defval=8)
smaHigh1=sma(high, ssllen1)
smaLow1=sma(low, ssllen1)
Hlv1 = na
Hlv1 := close > smaHigh1 ? 1 : close < smaLow1 ? -1 : Hlv1[1]
sslDown1 = Hlv1 < 0 ? smaHigh1: smaLow1
sslUp1   = Hlv1 < 0 ? smaLow1 : smaHigh1

plot(sslDown1, "SSL Down", linewidth=1, color=red)
plot(sslUp1, "SSL Up", linewidth=1, color=lime)

///////////////////////////////////////////////////
//Confirm Signals
///////////////////////////////////////////////////

c_Up = sslUp1
c_Down =sslDown1

//Signals based on crossover
c_cross_Long = crossover(c_Up, c_Down)
c_cross_Short = crossover(c_Down, c_Up)

//Signals based on signal position
c_trend_Long = c_Up > c_Down ? 1 : 0
c_trend_Short = c_Down > c_Up ? 1 : 0

confirm_Long = c_cross_Long
confirm_Short = c_cross_Short

plotshape(c_cross_Long, color = green, style=shape.triangleup, location=location.top)
plotshape(c_cross_Short, color = red, style=shape.triangledown, location=location.top)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  **** Confirmation 2 Slow ****
///////////////////////////////////////////////////

///////////////////////////////////////////////////
//SSL 30
///////////////////////////////////////////////////

///////////////////////////////////////////////////
//SSL
///////////////////////////////////////////////////

ssllen2=input(title="SSL 2 Length Period", defval=16)
smaHigh2=sma(high, ssllen2)
smaLow2=sma(low, ssllen2)
Hlv2 = na
Hlv2 := close > smaHigh2 ? 1 : close < smaLow2 ? -1 : Hlv2[1]
sslDown2 = Hlv2 < 0 ? smaHigh2: smaLow2
sslUp2   = Hlv2 < 0 ? smaLow2 : smaHigh2

plot(sslDown2, "SSL Down", linewidth=1, color=orange)
plot(sslUp2, "SSL Up", linewidth=1, color=blue)

///////////////////////////////////////////////////
//Confirm Signals
///////////////////////////////////////////////////
c2_Up = sslUp2
c2_Down = sslDown2

//Signals based on crossover
c2_cross_Long = crossover(c2_Up, c2_Down)
c2_cross_Short = crossover(c2_Down, c2_Up)

//Signals based on signal position
c2_trend_Long = c2_Up > c2_Down ? 1 : 0
c2_trend_Short = c2_Down > c2_Up ? 1 : 0

confirm2_Long = c2_trend_Long
confirm2_Short = c2_trend_Short

plotshape(c2_cross_Long, color = green, style=shape.triangleup, location=location.bottom)
plotshape(c2_cross_Short, color = red, style=shape.triangledown, location=location.bottom)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  **** Volume Indicator Start ****
///////////////////////////////////////////////////

///////////////////////////////////////////////////
//TDFI
///////////////////////////////////////////////////

lookback = input(6, title = "TDFI Lookback") 
filterHigh = input(0.05, title = "Filter High") 
filterLow = input(-0.05, title = "Filter Low") 

mma = ema(price * 1000, lookback)
smma = ema(mma, lookback)

impetmma = mma - mma[1]
impetsmma= smma - smma[1]
divma = abs(mma - smma)
averimpet = (impetmma + impetsmma) / 2

number = averimpet
pow = 3
result = na

for i = 1 to pow - 1
    if i == 1
        result := number
    result := result * number

tdf = divma * result
ntdf = tdf / highest(abs(tdf), lookback * 3)

///////////////////////////////////////////////////
//Volume Signals
///////////////////////////////////////////////////
v_Long = ntdf > filterHigh ? 1 : 0
v_Short = filterLow > ntdf ? 1 : 0

volumeLong = v_Long
volumeShort = v_Short

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// **************************** Logic to handle NNFX rules ****************************
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Checking for confirmation indication with 1 candle difference for second confirmtion and volume
enterLong   = confirm_Long and (confirm2_Long[0] or confirm2_Long[1])      and (volumeLong[0] or volumeLong[1]) ? 1 : 0
enterShort  = confirm_Short and (confirm2_Short[0] or confirm2_Short[1])   and (volumeShort[0] or volumeShort[1]) ? 1 : 0

exitLong = c_cross_Short or c2_cross_Short ? 1 : 0 
exitShort = c_cross_Long or c2_cross_Long ? 1 : 0 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Entries and Exits
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if (year>2009)

    //Long entries with standard 1.5 ATR for SL, 1 ATR for TP
    long_sl = price - (atr * slMultiplier)
    long_tp = price + (atr * tpMultiplier)

    //Short entries with standard 1.5 ATR for SL, 1 ATR for TP
    short_sl = price + (atr * slMultiplier)
    short_tp = price - (atr * tpMultiplier)

    strategy.close("L1", when = exitLong)
    strategy.close("S1", when = exitShort)

    strategy.exit("L Limit Exit", "L1", stop = long_sl, limit = long_tp)
    strategy.exit("S Limit Exit", "S1", stop = short_sl, limit = short_tp)

    strategy.order("L1", strategy.long, when = enterLong)
    strategy.order("S1", strategy.short, when = enterShort)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//End
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////