Strategi mengikut arah aliran kuantitatif berdasarkan momentum


Tarikh penciptaan: 2024-01-19 15:29:35 Akhirnya diubah suai: 2024-01-19 15:29:35
Salin: 2 Bilangan klik: 618
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran kuantitatif berdasarkan momentum

Gambaran keseluruhan

Strategi ini berdasarkan pada garis Axial-K pada tahap garis matahari, digabungkan dengan analisis dinamik pada tahap kitaran yang berbeza, untuk menentukan secara dinamik kekuatan sokongan di belakang harga saham semasa, untuk menilai masa untuk membina dan memelihara kedudukan.

Prinsip Strategi

  1. Mengira harga penutupan pada garis K A pada tahap kitaran yang berbeza. Ini adalah asas untuk mengira tenaga dinamik seterusnya.

  2. Harga pembukaan bulan dan hari dan kenaikan harga penutup pada tempoh sejarah yang berbeza. Ini mencerminkan kekuatan dinamik harga saham semasa berbanding harga sejarah.

  3. Penurunan tenaga dinamik pada garis bulan dan garis matahari diambil secara purata, menapis sebahagian bunyi, dan memperoleh indikator tenaga dinamik garis bulan dan garis matahari yang stabil.

  4. Berdasarkan kenaikan dan penurunan tenaga dinamik rata-rata, daya sokongan pasaran yang boleh mencerminkan harga saham semasa dapat dikira, iaitu harga yang menghilangkan kesan turun naik pasaran. Harga ini dapat dilihat sebagai ambang tenaga dinamik harga saham sebenar semasa.

  5. Apabila harga penutupan lebih tinggi daripada ambang tenaga dinamik, anda perlu membuat lebih banyak pertaruhan setiap bulan. Apabila harga penutupan lebih rendah daripada ambang tenaga dinamik, anda perlu menghentikan pertaruhan.

Analisis kelebihan

Kelebihan utama strategi ini adalah bahawa ia tidak hanya mengikuti harga saham, tetapi berdasarkan pada dinamik di belakang harga saham untuk mengira kekuatan sokongan sebenar, untuk membuat kedudukan dan menghentikan kerugian. Ini dapat menyaring secara berkesan bunyi pergerakan yang bergolak dan mengunci peluang untuk kenaikan yang stabil.

Di samping itu, data yang digunakan oleh strategi ini adalah dari garis K-Ach yang berlainan. Garis K khusus ini dapat mengurangkan masalah bergantung kepada kitaran perpaduan yang berlebihan. Oleh itu, kestabilan strategi lebih baik daripada strategi lain.

Analisis risiko

Risiko terbesar dalam strategi ini adalah bahawa pengiraan tenaga dinamik adalah berdasarkan harga sejarah. Jika fundamental syarikat dan keadaan pasaran berubah secara signifikan, harga sejarah akan menjadi kurang representatif, yang akan menyebabkan kesesatan dalam penilaian kedudukan dan berhenti.

Selain itu, strategi menggunakan kitaran bulanan dan harian. Ini bermakna bahawa strategi tidak bersifat real-time dan tidak dapat bertindak balas dengan cepat terhadap perubahan mendadak dalam pasaran. Ini membawa risiko kerugian apabila pasaran berubah.

Untuk mengurangkan risiko-risiko ini, pertimbangan boleh diambil untuk memperkenalkan data frekuensi yang lebih tinggi, dan maklum balas dalam masa nyata mengenai asas syarikat. Atau untuk penerimaan dan pengoptimuman gabungan dengan isyarat perdagangan yang lebih subjektif.

Arah pengoptimuman

Strategi ini boleh terus dioptimumkan dalam beberapa aspek:

  1. Garis K-A-Haya sendiri juga boleh dioptimumkan dengan penyesuaian berat badan.

  2. Menambah lebih banyak data dari pelbagai kitaran, membina mekanisme penilaian tenaga dinamik purata indeks, meningkatkan kestabilan.

  3. Untuk meningkatkan ketegasan strategi, data frekuensi yang lebih tinggi seperti minit dalam sehari telah diperkenalkan.

  4. Menggabungkan maklumat seperti pengumuman hasil, khabar angin pengubahsuaian, dan lain-lain, CoA mengira maklum balas mengenai asas-asas syarikat.

  5. Anda boleh mempertimbangkan untuk menambah jumlah hari atau minggu untuk menamatkan dan menambah perbendaharaan.

ringkaskan

Strategi ini secara keseluruhan sangat stabil dan mengawal risiko dengan berkesan dengan cara mengesan tenaga dinamik. Kelebihan terbesarnya adalah menggunakan tenaga dinamik di belakang harga saham untuk menentukan keadaan sebenar, dan bukan hanya mengikuti harga saham itu sendiri. Langkah seterusnya dengan memperkenalkan lebih banyak data yang lebih frekuensi dan lebih bermaklumat, diharapkan dapat mengoptimumkan strategi ini lebih jauh, sehingga dapat menangkap peluang pasaran dengan lebih baik.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FrancoPassuello

//@version=5
strategy("Heiken Ashi ADM", overlay=true)
haClose = (open + high + low + close) / 4
// prevHaOpen = line.new(na, na, na, na, width = 1)
haOpen = (open[1] + close[1]) / 2
// line.set_xy1(prevHaOpen, bar_index[1], nz(haOpen[1]))
// line.set_xy2(prevHaOpen, bar_index, haClose[1])


[monopen, _1monopen, _2monopen, _3monopen, _4monopen, _5monopen, _6monopen] = request.security(syminfo.tickerid, "M", [haOpen, haOpen[1], haOpen[2], haOpen[3], haOpen[4], haOpen[5], haOpen[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[monclose, _1monclose, _3monclose, _6monclose] = request.security(syminfo.tickerid, "M", [haClose, haClose[1], haClose[3], haClose[6]] , barmerge.gaps_off, barmerge.lookahead_on)
[dayclose1, _21dayclose, _63dayclose, _126dayclose, dayclose] = request.security(syminfo.tickerid, "1D", [haClose[1], haClose[21], haClose[63], haClose[126], haClose], barmerge.gaps_off, barmerge.lookahead_on)
[dayopen1, _21dayopen, _63dayopen, _126dayopen] = request.security(syminfo.tickerid, "1D", [haOpen[1], haOpen[21], haOpen[63], haOpen[126]], barmerge.gaps_off, barmerge.lookahead_on)


get_rate_of_return(price1, price2) =>
    return_ = (price1/price2 -1)*100
    return_

m0 = get_rate_of_return(monclose, monopen)
m1 = get_rate_of_return(_1monclose, _1monopen)
m2 = get_rate_of_return(monclose, _2monopen)
m3 = get_rate_of_return(_1monclose, _3monopen)
m4 = get_rate_of_return(monclose, _4monopen)
m5 = get_rate_of_return(monclose, _5monopen)
m6 = get_rate_of_return(_1monclose, _6monopen)
MS = (m1 + m3 + m6)/100
CS = (m0 + m2 + m5)/100

d1 = get_rate_of_return(dayclose1, _21dayopen)
d2 = get_rate_of_return(dayclose1, _63dayopen)
d3 = get_rate_of_return(dayclose1, _126dayopen)
DS = (d1 + d2 + d3)/100

//Last (DAILY)
lastd_s_avg1 = DS/3

lastd_Approximate1 = dayclose1*(1-lastd_s_avg1)

last_approx1_d21 = lastd_Approximate1 / _21dayopen-1
last_approx1_d63 = lastd_Approximate1 / _63dayopen-1
last_approx1_d126 = lastd_Approximate1 / _126dayopen-1

lastd_s_avg2 = (last_approx1_d21 + last_approx1_d63 + last_approx1_d126) / 3
lastd_approximate2 = (dayclose1)*(1-(lastd_s_avg1 + lastd_s_avg2))
lastd_price = lastd_approximate2

//plot(lastd_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")

//Last

last_s_avg1 = MS/3

last_Approximate1 = _1monclose*(1-last_s_avg1)

last_approx1_m1 = last_Approximate1 / _1monopen-1
last_approx1_m3 = last_Approximate1 / _3monopen-1
last_approx1_m6 = last_Approximate1 / _6monopen-1

last_s_avg2 = (last_approx1_m1 + last_approx1_m3 + last_approx1_m6) / 3
last_approximate2 = (_1monclose)*(1-(last_s_avg1 + last_s_avg2))
last_price = last_approximate2
Scoring_price = _1monclose*(1-CS)

plot(last_price,color = color.rgb(255, 255, 255, 14), title = "Last momentum threshold")
//plot(Scoring_price,color = color.rgb(234, 0, 255, 14), title = "Last momentum threshold")

//Long based on month close and being the first trade of the month.

var int lastClosedMonth = -1
limit_longCondition = _1monclose > last_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)

// Long based on day close and being the first trade of the month.
limit_Dlongcondition = dayclose1 > lastd_approximate2 and (lastClosedMonth == -1 or month(time) != lastClosedMonth)

// Close trade based on day close

DCloseLongCondition = dayclose1<lastd_approximate2

//Old standard Trading rules
longCondition = _1monclose > Scoring_price
MCloseLongCondition = _1monclose<Scoring_price
shortCondition = CS < 0

if (longCondition)
    strategy.entry("Long", strategy.long)


if (strategy.position_size > 0 and MCloseLongCondition)
    strategy.close("Long")
    lastClosedMonth := month(time)