Strategi mengikut arah aliran berasaskan momentum


Tarikh penciptaan: 2024-03-11 10:53:50 Akhirnya diubah suai: 2024-03-11 10:54:08
Salin: 0 Bilangan klik: 620
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berasaskan momentum

Gambaran keseluruhan

Strategi ini digabungkan dengan penggunaan penunjuk Aroon dan penunjuk kekuatan mutlak ((ASH) yang bertujuan untuk mengenal pasti trend pasaran dan peluang perdagangan yang berpotensi. Aroon membantu mengenal pasti kekuatan dan arah trend, manakala ASH memberikan wawasan tentang kekuatan momentum. Dengan menggabungkan penunjuk ini, strategi cuba menangkap peluang perdagangan yang menguntungkan di pasaran Ethereum.

Prinsip Strategi

Strategi ini menggunakan dua set parameter Indeks Aroon:

  • Kedudukan berbilang kepala: kitaran Aroon adalah 56 (ke atas) dan 20 (ke bawah)
  • Kedudukan kosong: Aroon berkala 17 ° di atas landasan dan 55 ° di bawah landasan

ASH mempunyai panjang 9 baris K dan menggunakan harga penutupan sebagai sumber data.

Strategi ini mengandungi syarat-syarat masuk dan keluar yang khusus:

  1. Masukkan kedudukan berbilang kepala: Apabila Aroon turun ke bawah, ini menunjukkan trend yang berpotensi meningkat, oleh itu buka lebih banyak kedudukan.
  2. Keluar dari kedudukan berlebih: Melepas kedudukan berlebih apabila turun di bawah Aroon.
  3. Kedudukan kosong masuk: Kedudukan kosong dibuka apabila indikator Aroon turun ke bawah, yang menunjukkan trend penurunan yang berpotensi.
  4. Kedudukan kosong keluar: Kedudukan kosong kosong apabila Aroon berada di landasan.

Analisis kelebihan

Kelebihan terbesar strategi ini adalah gabungan penggunaan dua petunjuk. Aroon memberi petunjuk tentang arah dan kekuatan trend, dan ASH memberikan wawasan tambahan mengenai momentum yang membantu menentukan masa masuk dan keluar.

Di samping itu, menggunakan dua set parameter yang berbeza untuk penilaian Aroon, yang dapat menyesuaikan diri dengan perubahan keadaan pasaran.

Analisis risiko

Risiko utama strategi ini terletak pada keterbatasan penunjuk itu sendiri. Penunjuk Aroon lemah terhadap kejatuhan membetulkan pasaran, mudah menghasilkan isyarat yang salah. Penunjuk ASH juga lebih sensitif terhadap pembalikan berlebihan jangka pendek.

Di samping itu, parameter yang ditetapkan jika tidak betul, juga boleh menjejaskan prestasi strategi. Perlu mengoptimumkan dan menguji jangka masa panjang dan pendek indikator Aroon dan panjang indikator ASH untuk mencari kombinasi parameter terbaik.

Arah pengoptimuman

Anda boleh pertimbangkan untuk menambah penapis, seperti penembusan harga, peningkatan jumlah transaksi, dan sebagainya, untuk mengelakkan isyarat yang salah dalam keadaan yang bergolak.

Anda boleh menguji kombinasi parameter dan berat indikator yang berbeza untuk mencari parameter terbaik. Anda juga boleh mencuba menggabungkan indikator lain seperti RSI, KD, dan lain-lain untuk membentuk kombinasi parameter yang lebih kuat dan meningkatkan prestasi strategi.

ringkaskan

Strategi ini menggabungkan kelebihan penggunaan kedua-dua penunjuk Aroon dan ASH, yang disahkan oleh kedua-dua penunjuk, yang lebih berkesan dalam menilai trend dan menangkap titik-titik perubahan. Tetapi tetapan parameter dan batasan penunjuk itu sendiri masih perlu dioptimumkan. Secara keseluruhannya, idea ini baru dan patut diperbaiki dan disahkan lebih lanjut.

Kod sumber strategi
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © IkkeOmar

//@version=5
strategy("Aroon and ASH strategy - ETHERIUM [IkkeOmar]", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=1, commission_value=0, slippage=2)


// AROON SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

// Inputs for longs 

length_upper_long = input.int(56, minval=15)
length_lower_long = input.int(20, minval=5)

// Inputs for shorts
//Aroon Short Side Inputs
length_upper_short = input.int(17, minval=10)
length_lower_short = input.int(55)

// ABSOLUTE STRENGTH HISTOGRAM SETTINGS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
length = input(title='Length', defval=9)
src = input(title='Source', defval=close)




// CALCULATIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Aroon
upper_long = 100 * (ta.highestbars(high, length_upper_long + 1) + length_upper_long) / length_upper_long
lower_long = 100 * (ta.lowestbars(low, length_lower_long + 1) + length_lower_long) / length_lower_long

upper_short = 100 * (ta.highestbars(high, length_upper_short + 1) + length_upper_short) / length_upper_short
lower_short = 100 * (ta.lowestbars(low, length_lower_short + 1) + length_lower_short) / length_lower_short

// Ahrens Moving Average
ahma = 0.0
ahma := nz(ahma[1]) + (src - (nz(ahma[1]) + nz(ahma[length])) / 2) / length



// CONDITIONS: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


// Options that configure the backtest start date
startDate = input(title='Start Date', defval=timestamp('01 Jan 2018 00:00'))


// Option to select trade directions
tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Long')

// Translate input into trading conditions
longOK = tradeDirection == 'Long' or tradeDirection == 'Both'
shortOK = tradeDirection == 'Short' or tradeDirection == 'Both'


// Check if the close time of the current bar falls inside the date range
inDateRange = true

longCondition = ta.crossover(upper_long, lower_long) and inDateRange and lower_long >= 5 and longOK
longCloseCondition = ta.crossunder(upper_long, lower_long) and inDateRange

shortCondition = ta.crossunder(upper_short, lower_short) and inDateRange and shortOK
shortCloseCondition = ta.crossover(upper_short, lower_short) and inDateRange

// Start off with the initial states for the longs and shorts
var in_short_trade = false
var in_long_trade = false

var long_signal = false
var short_signal = false

if longCondition
    long_signal := true
if longCloseCondition
    long_signal := false
    
if shortCondition
    short_signal := true
if shortCloseCondition
    short_signal := false

// While no trades active and short condition is met, OPEN short
if true and in_short_trade == false and in_long_trade == false and shortCondition
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// While no trades and long condition is met, OPEN LONG
if true and in_short_trade == false and in_long_trade == false and longCondition
    strategy.entry("long", strategy.long, when = longCondition)
    in_long_trade := true
    in_short_trade := false

    
// WHILE short trade and long condition is met, CLOSE SHORT and OPEN LONG
if true and in_short_trade == true and in_long_trade == false and longCondition
    // strategy.close("short", when = longCondition)
    strategy.entry("long", strategy.long, when = longCondition)
    in_short_trade := false
    in_long_trade := true
    
    
// WHILE long trade and short condition is met, CLOSE LONG and OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and shortCondition
    // strategy.close("long", when = shortCondition)
    strategy.entry("short", strategy.short, when = shortCondition)
    in_short_trade := true
    in_long_trade := false

// WHILE long trade and exit long condition is met, CLOSE LONG
// if short signal is active, OPEN SHORT
if true and in_short_trade == false and in_long_trade == true and longCloseCondition
    if short_signal
        strategy.entry("short", strategy.short, when = short_signal)
        in_long_trade := false
        in_short_trade := true
    else
        strategy.close("long", when = longCloseCondition)
        in_long_trade := false
        in_short_trade := false

// if in short trade only and exit short condition is met, close the short
// if long signal still active, OPEN LONG
if true and in_short_trade == true and in_long_trade == false and shortCloseCondition
    if long_signal
        strategy.entry("long", strategy.long, when = long_signal)
        in_short_trade := false
        in_long_trade := true
    else
        strategy.close("short", when = shortCloseCondition)
        in_short_trade := false
        in_long_trade := false