Berdasarkan strategi pelarian mengikut arah aliran


Tarikh penciptaan: 2024-01-22 17:21:10 Akhirnya diubah suai: 2024-01-22 17:21:10
Salin: 0 Bilangan klik: 545
1
fokus pada
1617
Pengikut

Berdasarkan strategi pelarian mengikut arah aliran

Gambaran keseluruhan

Ini adalah strategi penembusan berdasarkan trend. Ia membeli saham yang lebih kuat apabila terdapat penembusan dan menjual saham yang lebih lemah apabila terdapat penembusan, untuk mencapai trend.

Prinsip Strategi

Strategi ini adalah berdasarkan kepada dua penunjuk untuk menentukan isyarat masuk dan keluar, satu adalah harga tertinggi dalam tempoh tertentu yang ditentukan oleh fungsi highest () dan satu adalah harga terendah dalam tempoh tertentu yang ditentukan oleh fungsi lowest ()

Apabila harga penutupan lebih tinggi daripada harga tertinggi dalam tempoh tertentu, ia dianggap sebagai pecah dalam trend menaik, jadi ia mengeluarkan banyak isyarat. Apabila harga penutupan lebih rendah daripada harga terendah dalam tempoh tertentu, ia dianggap sebagai pecah dalam trend menurun, jadi ia mengeluarkan isyarat kosong.

Strategi ini menetapkan berhenti bergerak dan berhenti tetap pada masa yang sama. Henti bergerak berdasarkan ATR, dengan mengira nilai ATR dalam tempoh tertentu, dan kalikan dengan kelipatan (parameter trailingAtrMultiplier) sebagai titik berhenti bergerak. Henti tetap juga, berdasarkan ATR.

Selepas melakukan lebih banyak shorting pada K-line pertama, stop loss tetap akan berkuat kuasa; selepas itu ia akan beralih kepada stop loss bergerak. Kombinasi ini boleh mengunci sebahagian daripada keuntungan, sambil mengikuti trend.

Strategi ini juga menetapkan peraturan untuk mengira kedudukan. Ia mengira kedudukan berdasarkan peratusan kerugian maksimum yang boleh diterima, kepentingan hak akaun, dan sebagainya. Ia juga mengambil kira jumlah jenis perdagangan dan mengurangkan kedudukan untuk satu jenis.

Secara keseluruhan, ini adalah strategi jenis trend yang khas, ia masuk ke dalam permainan apabila ia memutuskan bahawa terdapat penembusan, mengunci keuntungan dengan cara berhenti dan mengikuti trend, dan keluar dari permainan apabila trend berbalik.

Analisis kelebihan

Ini adalah satu strategi terobosan, dan kelebihan utamanya ialah:

  1. Pengiraan trend tepat. Menggunakan harga tertinggi dan harga terendah untuk menentukan sama ada trend berbalik, ketepatan yang tinggi, tidak mudah untuk menghantar isyarat yang salah.

  2. Kedudukan dan Stop Loss Science adalah munasabah. Tetapan peratusan kerugian maksimum, hubungan hak dan kepentingan akaun, dan lain-lain menjadikan kedudukan munasabah, mengelakkan perdagangan berlebihan atau tidak sah.

  3. Mudah digunakan, mudah difahami. Ia hanya memerlukan petunjuk asas, logik strategi mudah difahami dan mudah difahami.

  4. Skala yang baik. Parameter penunjuk, peraturan kedudukan dan lain-lain disediakan kotak input, pengguna boleh menyesuaikan mengikut keperluan.

Secara keseluruhannya, ini adalah strategi penembusan yang sangat praktikal. Ia adalah selamat dan boleh dipercayai dalam penghakiman, dan strategi ini dirancang dengan mempertimbangkan kawalan dan pengesanan risiko.

Analisis risiko

Risiko utama strategi ini ialah:

  1. Risiko pembalikan trend. Strategi penembusan sangat bergantung pada penilaian trend, dan jika salah, ia boleh menyebabkan kerugian besar.

  2. Parameter yang tidak sesuai dengan risiko. Pilihan yang tidak betul dalam parameter kitaran harga tertinggi dan terendah mungkin terlepas trend, parameter kedudukan yang tidak betul dapat menyebabkan kerugian yang terlalu besar.

  3. Stop loss terlalu radikal. Jika stop loss bergerak terlalu kecil, ia mungkin akan dikeluarkan oleh bunyi pasaran.

Penyelesaian utama ialah:

  1. Menambah penapis trend. Sebagai contoh, masukkan penilaian indikator lain untuk mengelakkan kesalahan.

  2. Pilihan parameter pengoptimuman. Uji parameter untuk memilih nilai optimum untuk memastikan kestabilan.

  3. Jarak hentian boleh dilonggarkan dengan sewajarnya. Jarak hentian boleh menerima penyesuaian tertentu.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Tambah lebih banyak indikator untuk menilai trend. Selain harga tertinggi dan terendah, penilaian seperti moving averages boleh dimasukkan untuk membuat penilaian trend lebih tepat.

  2. Tetapan parameter pengoptimuman. Uji parameter kitaran harga tertinggi dan terendah, parameter penggandaan henti, dan lain-lain untuk memilih kombinasi parameter yang optimum.

  3. Berdasarkan algoritma kedudukan yang disesuaikan dengan pasaran. Ia membolehkan kedudukan dikaitkan dengan turun naik pasaran, seperti menurunkan kedudukan apabila VIX naik.

  4. Penapis penunjuk penambah kuasa. Masuk hanya dalam penembusan penambah kuasa, mengelakkan penembusan palsu.

  5. Pertimbangkan varieti pilihan perdagangan yang mempunyai perbezaan asas dan relevansi. Pilih gabungan varieti yang mempunyai perbezaan asas yang rendah dan kurang relevansi untuk mengurangkan risiko gabungan.

  6. Mengoptimumkan dan menyesuaikan mekanisme hentian. Kombinasi peratusan hentian bergerak dan hentian tetap boleh diuji, mengurangkan risiko hentian yang terlalu radikal.

ringkaskan

Strategi ini berfungsi sebagai strategi penembusan jenis trend-following, yang berfungsi dengan baik dalam menilai ketepatan, kawalan kedudukan dan risiko, dan kemudahan operasi. Ia menangkap trend lebih awal, mengimbangi penguncian keuntungan dan trend-following dengan berhenti kehilangan bergerak.

Sudah tentu sebagai strategi terobosan, ia sangat bergantung pada penilaian trend dan mudah terganggu oleh bunyi. Selain itu, penyetempatan parameter yang tidak betul juga boleh menjejaskan prestasi strategi. Ini perlu diselesaikan dengan pengoptimuman lanjut.

Secara keseluruhannya, ini adalah strategi yang sangat praktikal, struktur asasnya sudah merangkumi elemen paling penting yang diperlukan oleh strategi kuantitatif. Jika dapat terus dioptimumkan dan diperbaiki, ia boleh menjadi strategi berprogram yang stabil dan menguntungkan.

Kod sumber strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(shorttitle="Trend Surfers - Breakout", title="Trend Surfers - Premium Breakout",
     overlay=true)

// Risk for position and pyramid
maxriskval = input(2, "Max % risk", type = input.float,
     tooltip="Risk % over total equity / Position", group = "Risk Management")
pairnumber = input(title = "How many pairs",type = input.integer, defval= 1,
     tooltip="How many pairs are you trading with the strategy?", group = "Risk Management")

// Emtry Exit
highPeriod = input(title="Highest High Period", type=input.integer, defval=168
     , tooltip="Highest High of X bars - This will trigger a Long Entry when close is above. (Thin Green Line)"
     , group = "Entry Condition")
lowPeriod = input(title="Lowest Low Period", type=input.integer, defval=168,
     tooltip="Lowest low of X bars - This will trigger a Short Entry when close is under. (Thin Red Line)"
     , group = "Entry Condition")
// Stoploss
trailingAtrPeriod = input(title="Trailing ATR Pediod", type=input.integer, defval=10,
     tooltip="Average True Range for the Trailing Stop. (Thick Green Line) "
     , group = "Exit Condition")
trailingAtrMultiplier = input(title="Trailing ATR Multiplier", type=input.float, defval=8
     , group = "Exit Condition")
fixAtrPeriod = input(title="Fix ATR Pediod", type=input.integer, defval=10,
     tooltip="Average True Range for the Fix Stoloss. (Thick Yellow Line)"
     , group = "Exit Condition")
fixAtrMultiplier = input(title="Fix ATR Multiplier", type=input.float, defval=2
     , group = "Exit Condition")
// Pair info 
pair = syminfo.basecurrency + syminfo.currency

// High Low Variable
highestHigh = highest(high, highPeriod)[1]
lowestLow = lowest(low, lowPeriod)[1]
trailingAtr = atr(trailingAtrPeriod) * trailingAtrMultiplier

// Trade Condition
longCondition = crossover(close, highestHigh) 
shortCondition = crossunder(close, lowestLow)

// Risk Variable
fixAtr = atr(fixAtrPeriod) * fixAtrMultiplier
stopvaluelong = close[1] - fixAtr[1]
stopvalueshort = close[1] + fixAtr[1]

// Position size Long
maxpossize = strategy.equity / close 
positionsizelong = ( ( ( (maxriskval/100) * strategy.equity) / (close - stopvaluelong))) 
stopperclong = ((close - stopvaluelong) / close) * 100
leveragelong = max(1, ceil(positionsizelong / maxpossize)) * 2
posperclong =  (((positionsizelong * close) / strategy.equity) *100 / leveragelong) / pairnumber
realposlong = (((posperclong / 100) * strategy.equity) * leveragelong) / close

// Position size Short
positionsizeshort = ( ( ( (maxriskval/100) * strategy.equity) / (stopvalueshort - close))) 
stoppercshort = ((close - stopvalueshort) / close) * 100
leverageshort = max(1, ceil(positionsizeshort / maxpossize)) * 2
pospercshort =  (((positionsizeshort * close) / strategy.equity) *100 / leverageshort) / pairnumber
realposshort = (((pospercshort / 100) * strategy.equity) * leverageshort) / close

// Alert Message
entry_long_message = '\nGo Long for ' + pair + 'NOW!' +
                     '\nPosition Size % =' + tostring(posperclong) +
                     '\nLeverage' + tostring(leveragelong) +
                     '\nStoploss Price =' + tostring(stopvaluelong) +
                     '\nClose any Short position that are open for ' + pair + '!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

entry_short_message ='\nGo Short for ' + pair + 'NOW!' +
                     '\nPosition Size % =' + tostring(pospercshort) +
                     '\nLeverage' + tostring(leverageshort) +
                     '\nStoploss Price =' + tostring(stopvalueshort) +
                     '\nClose any Long position that are open for ' + pair + '!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

exit_short_message = '\nExit Short for ' + pair + 'NOW!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'

exit_long_message = '\nExit Long for ' + pair + 'NOW!' +
                     '\n\nVisit TrendSurfersSignals.com' +
                     '\nFor automated premium signals (FREE)'
// Order
if longCondition 
    strategy.entry("Long", strategy.long, stop=highestHigh, comment="Long", qty=realposlong
     , alert_message = entry_long_message)
if shortCondition
    strategy.entry("Short", strategy.short, stop=lowestLow, comment="Short", qty=realposshort
     , alert_message = entry_short_message)

// Stoploss Trailing
longTrailing = close - trailingAtr
shortTrailing = close + trailingAtr

var longTrailingStop = 0.0
var shortTrailingStop = 999999.9

trailingStopLine = 0.0
trailingStopLine := na
fixedStopLine = 0.0
fixedStopLine := na
var inTrade = 0
if longCondition or shortCondition
    if 0 == inTrade
        if longCondition
            inTrade := 1
        else
            inTrade := -1
if 1 == inTrade and (shortCondition or low <= max(fixedStopLine[1], longTrailingStop))
    inTrade := 0
if -1 == inTrade and (longCondition or high >= min(fixedStopLine[1], shortTrailingStop))
    inTrade := 0

longTrailingStop := if (1 == inTrade)
    stopValue = longTrailing
    max(stopValue, longTrailingStop[1])
else
    0

shortTrailingStop := if (-1 == inTrade)
    stopValue = shortTrailing
    min(stopValue, shortTrailingStop[1])
else
    999999

// Fix Stoploss
firstPrice = 0.0
firstFixAtr = 0.0
firstPrice := na
firstFixAtr := na
if 0 != inTrade
    firstPrice := valuewhen(inTrade != inTrade[1] and 0 != inTrade, close, 0)
    firstFixAtr := valuewhen(inTrade != inTrade[1] and 0 != inTrade, fixAtr, 0)
    if 1 == inTrade
        fixedStopLine := firstPrice - firstFixAtr
        trailingStopLine := longTrailingStop
    else
        fixedStopLine := firstPrice + firstFixAtr
        trailingStopLine := shortTrailingStop

if (strategy.position_size > 0)
    strategy.exit(id="L Stop", stop=max(fixedStopLine, longTrailingStop)
     , alert_message = exit_long_message)

if (strategy.position_size < 0)
    strategy.exit(id="S Stop", stop=min(fixedStopLine, shortTrailingStop)
     , alert_message = exit_long_message)
    

// Plot
plot(highestHigh, color=color.green, linewidth=1, transp=0, title='Highest High')
plot(lowestLow, color=color.red, linewidth=1, transp=0, title='Lowest Low')
plot(trailingStopLine, color=color.lime, linewidth=2, transp=0, offset=1, title='Trailing Stop')
plot(fixedStopLine, color=color.orange, linewidth=2, transp=0, offset=1, title='Fixed Stop')