Strategi perdagangan kuantitatif crossover EMA dua hala


Tarikh penciptaan: 2024-01-24 17:31:41 Akhirnya diubah suai: 2024-01-24 17:31:41
Salin: 0 Bilangan klik: 602
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif crossover EMA dua hala

Gambaran keseluruhan

Strategi ini menggunakan indikator EMA dua arah untuk menentukan arah trend utama pasaran, dan digabungkan dengan indikator RSI sebagai pilihan masa masuk, termasuk dalam strategi perdagangan algoritma jenis mengikuti trend.

Prinsip Strategi

  1. Mengira garis purata EMA untuk pelbagai kumpulan tempoh yang berbeza, mengenal pasti arah trend utama pasaran dalam tiga dimensi jangka pendek, sederhana dan panjang
  2. Apabila EMA jangka pendek melangkaui EMA jangka panjang, ia dianggap sebagai trend bullish.
  3. Apabila EMA jangka pendek menembusi EMA jangka panjang dan menengah, ia dianggap sebagai trend menurun.
  4. Dengan menggunakan RSI untuk mencari masa masuk yang sesuai, RSI boleh digunakan untuk menentukan kawasan yang terlalu banyak dibeli dan dijual
  5. Dalam trend bullish, RSI melakukan long position ketika low; dalam trend bearish, RSI melakukan short position ketika high

Strategi di atas terutamanya menggunakan indikator EMA ganda untuk menentukan arah trend utama, dan menggunakan indikator RSI sebagai pilihan isyarat masuk, merupakan strategi perdagangan algoritma mengikuti trend yang tipikal.

Analisis kelebihan strategi

Kelebihan terbesar strategi ini adalah dapat mengetahui dengan jelas arah trend utama pasaran, dan dapat memilih masa masuk yang lebih baik berdasarkan petunjuk RSI. Kelebihan khusus adalah sebagai berikut:

  1. Menggunakan pelbagai set EMA untuk mengenal pasti arah trend utama pasaran dalam pelbagai dimensi masa
  2. Indeks EMA mudah dikira, kurang bising, dan boleh dipercayai untuk menilai trend utama pasaran
  3. Penunjuk RSI dapat menentukan titik masuk dan titik henti dengan berkesan, yang dapat mengoptimumkan kadar pulangan keuntungan strategi dengan ketara
  4. Struktur algoritma yang jelas, mudah difahami, dan tipikal untuk trend-follow strategi
  5. Fleksibiliti untuk menggabungkan petunjuk teknikal lain untuk meningkatkan lagi kesan strategi

Analisis risiko strategi

Strategi ini juga mempunyai beberapa risiko, terutamanya dalam aspek berikut:

  1. Apabila trend berbalik, titik hentian boleh menjadi terlalu ideal dan meningkatkan kerugian
  2. Tidak dapat menilai titik balik trend dengan berkesan, mungkin terlepas peluang untuk menghentikan kerugian tepat pada masanya
  3. Parameter EMA dan RSI perlu diuji berulang kali untuk pengoptimuman, jika tidak, ia boleh menyebabkan ketidakstabilan
  4. Tidak boleh menjamin setiap kemasukan adalah masa yang sempurna, mungkin terdapat beberapa operasi berulang yang tidak perlu
  5. Jump up and down dalam keadaan terdesak tidak dapat dielakkan dengan berkesan

Menghadapi risiko di atas, anda boleh mengoptimumkan dari sudut berikut:

  1. Tetapkan titik berhenti yang munasabah untuk mengelakkan kerugian sekali gus yang berlebihan
  2. Menambah petunjuk lain untuk menentukan perubahan trend dan memastikan pemutusan kerugian yang tepat pada masanya
  3. Mengoptimumkan kombinasi parameter untuk keadaan pasaran yang lebih luas
  4. Ubah logik masuk dan berhenti untuk mengurangkan pengulangan.
  5. Meningkatkan penilaian keadaan luar biasa untuk mengelakkan kesan buruk daripada lompatan pasaran

Arah pengoptimuman strategi

Dari kelebihan dan risiko strategi ini, kita boleh mendapatkan beberapa arah yang boleh dioptimumkan:

  1. Pada kerangka EMA ganda yang sedia ada, pengenalan penunjuk lain seperti MACD, BOLL dan lain-lain boleh digunakan untuk menentukan titik pembalikan trend dan dengan itu mengoptimumkan strategi hentian hentian
  2. Memperkenalkan model pembelajaran mesin untuk meramalkan kebarangkalian perubahan trend, meningkatkan lagi kesan strategi
  3. Penggunaan penapis canggih untuk mengesan secara automatik keadaan yang tidak normal dan mencegah kerosakan
  4. Menggunakan algoritma genetik, pembelajaran intensif, dan lain-lain untuk mengoptimumkan parameter secara automatik untuk menyesuaikan strategi dengan lebih banyak jenis pasaran
  5. Tambah modul stop-loss automatik yang boleh menyesuaikan titik stop-loss secara dinamik mengikut keadaan sebenar

Strategi ini boleh dipertingkatkan lagi dengan memperkenalkan lebih banyak petunjuk, model ramalan, pengoptimuman parameter, modul kawalan risiko, dan lain-lain, yang dapat menyesuaikan diri dengan keadaan pasaran yang lebih kompleks dan berubah-ubah.

ringkaskan

Artikel ini menerangkan secara terperinci mengenai strategi perdagangan kuantitatif silang EMA dua hala. Pertama, gambaran umum mengenai pemikiran dan prinsip operasi utama strategi. Kemudian, analisis menyeluruh mengenai kelebihan strategi. Pada masa yang sama, analisis mengenai risiko utama yang mungkin terdapat dalam strategi. Berdasarkan itu, beberapa arah pengoptimuman utama diberikan.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz
// Indikatorn är byggd som ett utbildningsyfte och är därför ingen rekommendation för köp/sälj av aktier. Tanken är att skapa en visuell form i en graf
// som visar om det finns någon trend såväl positiv som negativ. En dialogruta med en varning talar om vilken trend som råder. I koden finns en möjlighet
// att ta position eller gå ur position om man vill skapa en startegi kring denna trendindikator. Rekommenderar dock starkt att inte enbart förlita sig på denna
// indikator som beslut för köp/sälj då resultaten blir negativa om man köper på psoitiv trend och säljer på negativ trend. Det måste kombineras med andra idéer
// och därför fungerar denna skript mer som ett komplement till sin egen strategi.
// Det är fritt fram för vem som helst att använda sig av denna indikator.  
//@version=4
//Skapar en strategiskript med 5 % av eget kapital som ett exempel. Detta går att ändra i skriptets inställningar, välj egenskaper och sedan ändra orderstorlek
//till ett annat värde av % på eget kapital.
strategy("© Investoz trendvarningar", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=5)
//Lägger till inmatningar till skriptindikatorn. Användaren kan se och redigera inmatningar i objektdialogen efter eget val.
ema1 = input(21, minval=1, maxval=500, title="Lila linje")
valema1=input(true, title="Visa lila linje")
ema2 = input(34, minval=1, maxval=500, title="Blå linje")
valema2=input(true, title="Visa blå linje")
ema3 = input(55, minval=1, maxval=500, title="Grön linje")
valema3=input(true, title="Visa grön linje")
ema4 = input(89, minval=1, maxval=500, title="Gul linje")
valema4=input(true, title="Visa gul linje")
ema5 = input(141, minval=1, maxval=500, title="Orange linje")
valema5=input(true, title="Visa orange linje")
ema6 = input(230, minval=1, maxval=500, title="Röd linje")
valema6=input(true, title="Visa röd linje")
ema7 = input(371, minval=1, maxval=500, title="Röd linje")
valema7=input(true, title="Visa röd linje")
//Inmatningar för antal staplar
startbar = input(1, minval=1, maxval=1, title="Första stapeln")
Endbar = bar_index
//Källa input, stängning. Användaren kan själv byta till vilken källa som önskas.
src = input(close, title="Source")
//Antal staplar sedan den längsta ema började och framåt. 
tid=Endbar + startbar - 371
//EMA loop
aema1 = ema(src, ema1)
bema2 = ema(src, ema2)
cema3 = ema(src, ema3)
dema4 = ema(src, ema4)
eema5 = ema(src, ema5)
fema6 = ema(src, ema6)
gema7 = ema(src, ema7)
//Skriver ut linjer i diagrammet om förhållandet är sant, annars falskt.
h=plot(valema1 ? aema1 : na, title="Lila linje", style=plot.style_line, linewidth=1, color=color.purple)
i=plot(valema2 ? bema2 : na, title="Blå linje", style=plot.style_line, linewidth=1, color=color.blue)
j=plot(valema3 ? cema3 : na, title="Grön linje", style=plot.style_line, linewidth=1, color=color.green)
k=plot(valema4 ? dema4 : na, title="Gul linje", style=plot.style_line, linewidth=1, color=color.yellow)
l=plot(valema5 ? eema5 : na, title="Orange linje", style=plot.style_line, linewidth=1, color=color.orange)
m=plot(valema6 ? fema6 : na, title="Röd linje", style=plot.style_line, linewidth=1, color=color.red)
n=plot(valema7 ? gema7 : na, title="Brun linje", style=plot.style_line, linewidth=1, color=color.maroon)
//Fyller bakgrunden mellan två linjer med en viss färg.
fill(h, i, color = color.purple,transp=34)
fill(i, j, color = color.blue,transp=34)
fill(j, k, color = color.green,transp=34)
fill(k, l, color = color.yellow,transp=34)
fill(l, m, color = color.orange,transp=34)
fill(m, n, color = color.red,transp=34)
//Skapa en algoritm för positiv trend
PositivTrend = crossover(aema1,gema7)?1:0
TrendPositiv = ema(close,1) > aema1 and aema1 > bema2?1:0
//Skapa en algoritm för negativ trend
NegativTrend = crossunder(aema1,gema7)?1:0
TrendNegativ = ema(close,1) < aema1 and aema1 < bema2?1:0
//Skapar en textruta med varningstext för positiv trend
varningtextpositiv = "Varning för positiv trend."+"\n" + "Leta efter att ta position!"
// if PositivTrend
//     varningpositiv=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.green,
//      text=varningtextpositiv,
//      style=label.style_label_down,
//      textalign=text.align_left)
//Skapar en textruta med varningstext för negativ trend
varningtextnegativ = "Varning för negativ trend."+"\n" + "Leta efter utgången!"
// if NegativTrend
//     varningnegativ=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.red,
//      text=varningtextnegativ,
//      style=label.style_label_up,
//      textalign=text.align_left)
//Köp om positiv trend
if (PositivTrend) 
    strategy.entry("Ta position", strategy.long, when = PositivTrend)
//Sälj om negativ trend
if (NegativTrend)
    strategy.close("Ta position", when = NegativTrend, comment="Gå ur position")
//Beräkning av positiv trend
vspositiv(positiv)=>valuewhen(Endbar==startbar,positiv,0)
vepositiv(positiv)=>valuewhen(Endbar==Endbar,positiv,0)
positivmean(TrendPositiv)=>
    csumpositiv = cum(TrendPositiv)
//Slut//   
    a = vepositiv(csumpositiv)
//Start//
    b = vspositiv(csumpositiv)
//Slut - Start// 
    (a - b)/(tid)
positivmeanpositiv = positivmean(TrendPositiv) 
//Beräkning av negativ trend
vsnegativ(negativ)=>valuewhen(Endbar==startbar,negativ,0)
venegativ(negativ)=>valuewhen(Endbar==Endbar,negativ,0)
negativmean(TrendNegativ)=>
    csumnegativ = cum(TrendNegativ)
//Slut//   
    a = venegativ(csumnegativ)
//Start//
    b = vsnegativ(csumnegativ)
//Slut - Start// 
    (a - b)/(tid)
negativmeannegativ = negativmean(TrendNegativ) 
//Inmatning av text som ska in i texruta som visar antal staplar i trend
logga = "© Investoz: Trend i tid"+ "\n"
streck = "--------------------------------------------------------"
totalastaplar = "\n" + "Dagar totalt: " + tostring(tid)+ " dagar "+"\n"+ streck + "\n"
totalpositiv = "Dagar totalt i positiv trend "+" 📈 : "  +tostring(positivmeanpositiv*tid, "##.##") +" dagar " + "\n"
totalnegativ = "\n" + "Dagar totalt i negativ trend" + " 📉 : "  +tostring(negativmeannegativ*tid, "##.##") +" dagar " 
//Textruta för antal staplar i trend
// if barstate.ishistory
//     barcountlbl=label.new(
//      bar_index, 
//      low,  
//      xloc=xloc.bar_index, 
//      yloc=yloc.price,
//      color=color.black, 
//      textcolor=color.yellow,
//      text=logga+streck+totalastaplar+totalpositiv+streck+totalnegativ,
//      style=label.style_label_lower_left,
//      textalign=text.align_left)
//     label.delete(barcountlbl[1])
//////////////////////////////////