Strategi mengikut arah aliran berdasarkan purata bergerak EMA


Tarikh penciptaan: 2024-02-05 14:21:18 Akhirnya diubah suai: 2024-02-05 14:21:18
Salin: 0 Bilangan klik: 629
1
fokus pada
1617
Pengikut

Strategi mengikut arah aliran berdasarkan purata bergerak EMA

Gambaran keseluruhan

Strategi ini berdasarkan purata EMA dari 3 kitaran yang berbeza, untuk menilai arah trend semasa dengan menilai sama ada harga berada di atas rata-rata EMA. Ia menghasilkan isyarat beli apabila melintasi garis EMA jangka pendek melintasi garis EMA jangka panjang. Ia menghasilkan isyarat jual apabila melintasi garis EMA jangka pendek melintasi garis EMA jangka panjang.

Prinsip Strategi

Strategi ini menggunakan 3 purata EMA, iaitu 10 hari, 20 hari dan 50 hari.

  1. Apabila garis EMA 10 dan garis EMA 20 berada di atas garis EMA 50 pada masa yang sama, ia ditakrifkan sebagai trend naik;

  2. Trend menurun ditakrifkan apabila EMA 10 dan EMA 20 berada di bawah EMA 50 pada masa yang sama;

  3. Sinyal beli dihasilkan apabila garis EMA jangka pendek (garis 10 dan 20 hari) melalui garis EMA jangka panjang (garis 50 hari);

  4. Sinyal jual dihasilkan apabila garis EMA jangka pendek (garis 10 dan 20 hari) melalui garis EMA jangka panjang (garis 50 hari);

  5. memegang kedudukan berlainan dalam trend naik, memegang kedudukan kosong dalam trend turun;

  6. Apabila trend bertukar, kedudukan di mana garis pendek EMA dan garis panjang bercampur rata dengan arah isyarat semasa.

Strategi ini bergilir-gilir untuk melakukan operasi bebas melalui capture profit, dengan mengunci keuntungan melalui kedudukan kosong yang tepat pada masanya.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Peraturan-peraturan yang mudah difahami dan dilaksanakan;
  2. Menggunakan purata EMA untuk menentukan arah trend dan mengelakkan gangguan oleh turun naik jangka pendek di pasaran;
  3. Menerangkan bahawa ia adalah salah satu cara yang paling berkesan untuk menjimatkan wang.
  4. Tidak perlu meramalkan arah, mengikut trend, dan mempunyai kadar kemenangan yang tinggi.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Apabila pasaran diselesaikan, EMA mudah pecah beberapa kali di antara rata-rata, dan mungkin sering membuka kedudukan kosong yang membawa kos dagangan;
  2. Selepas ini, keputusan EMA mengenai trend akan terjejas, dan peluang untuk membuka kedudukan yang baik mungkin terlepas.

Untuk mengatasi risiko ini, anda boleh mengoptimumkan dengan:

  1. Apabila selang EMA lebih kecil, peraturan pembukaan kedudukan boleh dilonggarkan dengan sewajarnya, untuk mengelakkan terlalu sering berdagang;
  2. Menentukan trend dalam kombinasi dengan penunjuk lain untuk mengelakkan EMA menilai kegagalan.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Pengoptimuman parameter. Anda boleh menguji kombinasi parameter untuk tempoh EMA yang berbeza untuk mencari parameter terbaik;

  2. Pengoptimuman kos urus niaga. Mengoptimumkan peraturan pembukaan kedudukan dengan sewajarnya, mengurangkan urus niaga yang tidak perlu;

  3. Mengoptimumkan strategi hentikan kerugian. Tetapkan tahap hentikan yang munasabah untuk mengawal kerugian tunggal.

  4. Gabungan dengan penunjuk lain. Gunakan penunjuk lain seperti MACD, KDJ dan lain-lain untuk membuat penilaian tambahan, mengoptimumkan masa kemasukan.

ringkaskan

Strategi ini secara keseluruhannya agak mudah dan praktikal. Ia menggunakan EMA untuk menentukan arah trend, disertakan dengan strategi hentian yang sesuai, yang dapat mengawal risiko dengan berkesan. Pada masa yang sama, terdapat beberapa ruang pengoptimuman, jika gabungan pengoptimuman parameter, strategi hentian, dan indikator lain, keberkesanan strategi ini juga mempunyai ruang yang sangat tinggi.

Kod sumber strategi
/*backtest
start: 2024-01-28 00:00:00
end: 2024-01-31 04:00:00
period: 45m
basePeriod: 5m
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/
// © mattehalen

//@version=4
//study("EMA 10,20 59",overlay=true)
strategy("EMA 10,20 59",overlay=true)
infoBox     = input(true, title="infoBox", type=input.bool)
infoBox2    = input(false, title="infoBox2", type=input.bool)
BuySellSignal_Bool = input(false, title="Buy & SellSignal", type=input.bool)
infoBoxSize = input(title="infoBoxSize", defval=size.large, options=[size.auto, size.tiny, size.small, size.normal, size.large, size.huge])
ema1Value   = input(10)
ema2Value   = input(20)
ema3Value   = input(59)
maxLoss = input(3000)
ema1        = ema(close,ema1Value)
ema2        = ema(close,ema2Value)
ema3        = ema(close,ema3Value)
objcnt      = 0
buyTitle    = tostring(close[1])
myProfit    = float(0)

plot(ema1,title="ema1",color=color.red,linewidth=2)
plot(ema2,title="ema2",color=color.green,linewidth=2)
plot(ema3,title="ema3",color=color.black,linewidth=2)

Buytrend = (ema1 and ema2 > ema3) and (ema1[1] and ema2[1] > ema3[1])
BarssinceBuyTrend = barssince(Buytrend)
BarssinceSellTrend = barssince(not Buytrend)
closeAtBuyTrend = close[1]
bgcolor(Buytrend ? color.green : color.red,transp=70)

BuySignal = Buytrend and not Buytrend[1] and BuySellSignal_Bool

BuySignalOut = Buytrend and (crossunder(ema1,ema2)) and BuySellSignal_Bool
BarssinceBuy = barssince(BuySignal)
bgcolor(BuySignal ? color.green : na , transp=30)
bgcolor(BuySignalOut ? color.black : na , transp=30)
plot(BarssinceBuy,title="BarssinceBuy",display=display.none)


SellSignal = not Buytrend and Buytrend[1] and BuySellSignal_Bool
SellSignalOut = not Buytrend and (crossover(ema1,ema2)) and BuySellSignal_Bool
BarssinceSell = barssince(SellSignal)
bgcolor(SellSignal ? color.red : na , transp=30)
bgcolor(SellSignalOut ? color.black : na , transp=30)
plot(BarssinceSell,title="BarssinceSell",display=display.none)


buyProfit   = float(0)
cntBuy      =0
sellProfit  = float(0)
cntSell     =0
buyProfit   := Buytrend and not Buytrend[1]? nz(buyProfit[1]) + (close[BarssinceBuyTrend[1]]-close) : nz(buyProfit[1])
cntBuy      := Buytrend and not Buytrend[1]? nz(cntBuy[1]) + 1: nz(cntBuy[1])
sellProfit  := not Buytrend and Buytrend[1]? nz(sellProfit[1]) + (close-close[BarssinceSellTrend[1]]) : nz(sellProfit[1])
cntSell     := not Buytrend and Buytrend[1]? nz(cntSell[1]) + 1 : nz(cntSell[1])
totalProfit = buyProfit + sellProfit

// if (Buytrend and not Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceBuyTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuyTrend[1]]) + "\n" + "Profit = "+tostring(close[BarssinceBuyTrend[1]]-close) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.red,size=infoBoxSize)
// if (not Buytrend and Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceSellTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSellTrend[1]]) + "\n" + "Profit = "+tostring(close-close[BarssinceSellTrend[1]]) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.green,size=infoBoxSize)

// if (BuySignalOut and not BuySignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceBuy[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.purple,size=infoBoxSize
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.lime,size=infoBoxSize)
// if (SellSignalOut and not SellSignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceSell[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.purple,size=infoBoxSize)
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.fuchsia,size=infoBoxSize)


// l2 = label.new(bar_index, na, 'buyProfit in pip = '+tostring(buyProfit)+"\n"+  'cntBuy = '+tostring(cntBuy) +"\n"+  'sellProfit in pip = '+tostring(sellProfit)+"\n"+  'cntSell = '+tostring(cntSell) +"\n"+  'totalProfit in pip = '+tostring(totalProfit)     , 
//   color=totalProfit>0 ? color.green : color.red, 
//   textcolor=color.white,
//   style=label.style_labeldown, yloc=yloc.abovebar,
//   size=size.large)

// label.delete(l2[1])



//--------------------------------------------------
//--------------------------------------------------
if (Buytrend)
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

//if BuySignalOut
   // strategy.close("long", comment = "Exit Long")
if (not Buytrend)
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
//if SellSignalOut
    // Force trade exit.
    //strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------