Strategi dagangan berasaskan EMA


Tarikh penciptaan: 2023-11-24 15:46:48 Akhirnya diubah suai: 2023-11-24 15:46:48
Salin: 0 Bilangan klik: 1288
1
fokus pada
1617
Pengikut

Strategi dagangan berasaskan EMA

Gambaran keseluruhan

Strategi ini menggunakan EMA rata-rata dari 4 kitaran yang berbeza, dan membentuk isyarat perdagangan berdasarkan urutan mereka, seperti lampu lalu lintas merah, kuning dan hijau tiga lampu petunjuk, oleh itu dinamakan sebagai strategi perdagangan lampu lalu lintas berwarna kuning. Ia menilai pasaran secara menyeluruh dari kedua-dua sudut trend dan pembalikan, bertujuan untuk meningkatkan ketepatan keputusan perdagangan.

Prinsip Strategi

  1. Tetapkan garis laju ((8 kitaran), garis tengah ((14 kitaran), garis perlahan ((16 kitaran) 3 garis purata EMA, kemudian tambahkan 1 garis purata EMA jangka panjang ((100 kitaran) sebagai penapis.

  2. Untuk menilai urutan baris 3 rata-rata dan persilangan dengan penapis, tentukan masa untuk melakukan lebih dan kosong:

  • Apabila melalui jalur laju melalui jalur tengah atau jalur perlahan melalui jalur tengah, dinilai sebagai melakukan lebih banyak isyarat

  • Apabila ia melintasi garisan tengah, ia dianggap sebagai isyarat rata.

  • Apabila garis cepat melalui garis tengah atau garis perlahan melalui garis tengah, dinilai sebagai isyarat kosong

  • Di tengah-tengah garis, ia dianggap sebagai isyarat kosong.

  1. Menentukan arah dan kekuatan trend melalui urutan garis rata cepat dan perlahan 3, menggabungkan garis rata dengan penapis untuk menentukan titik balik silang, mewujudkan gabungan organik untuk mengesan trend dan menangkap pembalikan.

Analisis kelebihan

Strategi ini menggabungkan kelebihan trend tracking dan perdagangan reversal, yang dapat memanfaatkan peluang pasaran dengan lebih baik. Kelebihan utama adalah:

  1. Menggunakan pelbagai EMA rata-rata, penilaian yang lebih baik, mengurangkan isyarat palsu
  2. Fleksibiliti untuk membuat lebih banyak syarat kosong untuk mengelakkan kehilangan peluang perdagangan
  3. Garis purata kitaran panjang dan pendek, penilaian menyeluruh
  4. Keadaan Stop Loss yang boleh disesuaikan, kawalan risiko di tempat

Dengan pengoptimuman parameter, strategi ini dapat disesuaikan dengan lebih banyak jenis, menunjukkan keuntungan dan kestabilan yang lebih kuat dalam tinjauan semula.

Analisis risiko

Risiko utama strategi ini ialah:

  1. Apabila urutan berturut-turut EMA berganda bercampur-campur, ia akan meningkatkan kesukaran untuk membuat keputusan dan menimbulkan keraguan perdagangan.
  2. Tanda-tanda palsu yang tidak dapat menyaring turun naik pasaran yang tidak normal dengan berkesan, yang boleh menyebabkan kerugian jika berlaku gegaran besar
  3. Tetapan parameter tidak tepat pada masanya, syarat-syarat stop loss mungkin terlalu longgar atau ketat, menyebabkan kehilangan keuntungan atau kerugian yang berlebihan

Ia adalah disyorkan untuk meningkatkan kestabilan strategi dan mengawal risiko dengan mengoptimumkan parameter, menetapkan tahap stop-loss, dan bertindak dengan berhati-hati.

Arah pengoptimuman

Strategi ini bertujuan untuk mengoptimumkan:

  1. Menyesuaikan parameter kitaran EMA rata-rata untuk lebih banyak jenis
  2. Menambah penapis untuk penunjuk lain, seperti MACD, Brinks, dan lain-lain, untuk meningkatkan ketepatan penilaian
  3. Mengoptimumkan nisbah stop loss untuk mencapai keseimbangan terbaik antara risiko dan keuntungan
  4. Menambah mekanisme penangguhan kerugian yang beradaptasi, seperti penangguhan ATR, untuk mengawal risiko penurunan lebih jauh

Dengan penyesuaian parameter pelbagai arah dan pengenalan kaedah kawalan risiko, kestabilan dan keuntungan strategi dapat ditingkatkan secara berterusan.

ringkaskan

Strategi perdagangan lampu lalu lintas ini mengintegrasikan pengesanan trend dan penilaian pembalikan, menggunakan 4 kumpulan EMA untuk membentuk isyarat perdagangan, menyesuaikan lebih banyak varieti dengan pengoptimuman parameter, menunjukkan keuntungan yang kuat dalam pengesanan semula. Kemudian dengan pengendalian risiko lanjut dan pengenalan penunjuk kepelbagaian, ia dijangka menjadi strategi perdagangan kuantitatif yang stabil dan cekap.

Kod sumber strategi
/*backtest
start: 2023-01-01 00:00:00
end: 2023-11-23 00:00:00
period: 1h
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/
// © maxits

// 4HS Crypto Market Strategy
// This strategy uses 4 ema to get Long or Short Signals
// Length are: 8, 14, 16, 100
// We take long positions when the order of the emas is the following:
// green > yellow > red (As the color of Traffic Lights) and they are above white ema (Used as a filter for long positions)
  
// We take short positions when the order of the emas is the following:
// green < yellow < red (As the color of inverse Traffic Lights) and they are below white ema (Used as a filter for short positions)

//@version=4
strategy(title="Trafic Lights Strategy",
         shorttitle="TLS",
         overlay=true,
         initial_capital=1000,
         default_qty_value=20,
         default_qty_type=strategy.percent_of_equity,
         commission_value=0.1,
         pyramiding=0
         )

// User Inputs
// i_time         = input(defval = timestamp("28 May 2017 13:30 +0000"), title = "Start Time", type = input.time) //Starting time for Backtesting

sep1           = input(title="============ System Conditions ============", type=input.bool, defval=false)

enable_Long    = input(true, title="Enable Long Positions")   // Enable long  Positions
enable_Short   = input(true, title="Enable Short Positions") // Enable short Positions

sep2           = input(title="============ Indicator Parameters ============", type=input.bool, defval=false)

f_length       = input(title="Fast EMA Length",   type=input.integer, defval=8,   minval=1) 
m_length       = input(title="Medium EMA Length", type=input.integer, defval=14,   minval=1) 
s_length       = input(title="Slow EMA Length",   type=input.integer, defval=16,  minval=1) 
filter_L       = input(title="EMA Filter",        type=input.integer, defval=100, minval=1) 
filterRes      = input(title="Filter Resolution", type=input.resolution, defval="D")        // ema Filter Time Frame

sep3           = input(title="============LONG Profit-Loss Parameters============", type=input.bool, defval=false)

e_Long_TP      = input(true, title="Enable a Profit Level?")
e_Long_SL      = input(false, title="Enable a S.Loss Level?")
e_Long_TS      = input(true, title="Enable a Trailing Stop?")           
long_TP_Input  = input(40.0,   title='Take Profit %',   type=input.float,   minval=0)/100
long_SL_Input  = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100 
atrLongMultip  = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)   // Parameters to calculate Trailing Stop Loss
atrLongLength  = input(14,    title='ATR Length',      type=input.integer, minval=1)

sep4           = input(title="============SHORT Profit-Loss Parameters============", type=input.bool, defval=false)

e_Short_TP     = input(true, title="Enable a Profit Level?")
e_Short_SL     = input(false, title="Enable a S.Loss Level?")
e_Short_TS     = input(true, title="Enable a Trailing Stop?")
short_TP_Input = input(30.0,   title='Take Profit %',   type=input.float,   minval=0)/100
short_SL_Input = input(1.0,   title='Stop Loss %',     type=input.float,   minval=0)/100
atrShortMultip = input(2.0,   title='ATR Multiplier',  type=input.float,   minval=0.1)
atrShortLength = input(14,    title='ATR Length',      type=input.integer, minval=1)

// Indicators

fema   = ema(close, f_length)
mema   = ema(close, m_length)
sema   = ema(close, s_length)
filter = security(syminfo.tickerid, filterRes, ema(close, filter_L))

plot(fema,   title="Fast EMA",   color=color.new(color.green,  0))
plot(mema,   title="Medi EMA",   color=color.new(color.yellow, 0))
plot(sema,   title="Slow EMA",   color=color.new(color.red,    0))
plot(filter, title="EMA Filter", color=color.new(color.white,  0))

// Entry Conditions

longTrade  = strategy.position_size >  0
shortTrade = strategy.position_size <  0
notInTrade = strategy.position_size == 0
inTrade    = strategy.position_size != 0
priceEntry = strategy.position_avg_price

goLong  = fema > mema and mema > sema and fema > filter and  enable_Long  and (crossover (fema, mema) or crossover (mema, sema) or crossover (sema, filter))
goShort = fema < mema and mema < sema and fema < filter and  enable_Short and (crossunder (fema, mema) or crossunder (mema, sema) or crossunder (sema, filter))

close_L = crossunder(fema, mema)
close_S = crossover (fema, mema)

// Profit and Loss conditions

// Long
 
long_TP = priceEntry * (1 + long_TP_Input)  // Long Position Take Profit Calculation
long_SL = priceEntry * (1 - long_SL_Input)  // Long Position Stop Loss Calculation
atrLong = atr(atrLongLength)                // Long Position ATR Calculation
long_TS = low - atrLong * atrLongMultip

long_T_stop  = 0.0                          // Code for calculating Long Positions Trailing Stop Loss/
long_T_stop := if (longTrade)
    longStop = long_TS
    max(long_T_stop[1], longStop)
else 
    0
    
//Short

short_TP = priceEntry * (1 - short_TP_Input) // Long  Position Take Profit Calculation
short_SL = priceEntry * (1 + short_SL_Input) // Short Position Stop Loss Calculation
atrShort = atr(atrShortLength)               // Short Position ATR Calculation
short_TS = high + atrShort * atrShortMultip

short_T_stop   = 0.0                // Code for calculating Short Positions Trailing Stop Loss/
short_T_stop  := if shortTrade
    shortStop  = short_TS
    min(short_T_stop[1], shortStop)
else 
    9999999

// Strategy Long Entry

if goLong and notInTrade 
    strategy.entry("Go Long", long=strategy.long, comment="Go Long", alert_message="Open Long Position")

if longTrade and close_L
    strategy.close("Go Long", when=close_L, comment="Close Long", alert_message="Close Long Position")
    
if e_Long_TP    // Algorithm for Enabled Long Position Profit Loss Parameters
    if (e_Long_TS and not e_Long_SL)
        strategy.exit("Long TP & TS", "Go Long", limit = long_TP, stop = long_T_stop)
    else
        if (e_Long_SL and not e_Long_TS)
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP, stop = long_SL)
        else 
            strategy.exit("Long TP & TS", "Go Long",limit = long_TP)
else
    if not e_Long_TP 
        if (e_Long_TS and not e_Long_SL)
            strategy.exit("Long TP & TS", "Go Long", stop = long_T_stop)
        else
            if (e_Long_SL and not e_Long_TS)
                strategy.exit("Long TP & TS", "Go Long",stop = long_SL)
    

// Strategy Short Entry

if goShort and notInTrade 
    strategy.entry("Go Short", long=strategy.short, comment="Go Short", alert_message="Open Short Position")

if shortTrade and close_S
    strategy.close("Go Short", comment="Close Short", alert_message="Close Short Position")

if e_Short_TP   // Algorithm for Enabled Short Position Profit Loss Parameters
    if (e_Short_TS and not e_Short_SL)
        strategy.exit("Short TP & TS", "Go Short", limit = short_TP, stop = short_T_stop)
    else
        if (e_Short_SL and not e_Short_TS)
            strategy.exit("Short TP & SL", "Go Short",limit = short_TP, stop = short_SL)
        else 
            strategy.exit("Short TP & TS", "Go Short",limit = short_TP)
else
    if not e_Short_TP 
        if (e_Short_TS and not e_Short_SL)
            strategy.exit("Short TS", "Go Short", stop = short_T_stop)
        else
            if (e_Short_SL and not e_Short_TS)
                strategy.exit("Short SL", "Go Short",stop = short_SL)

// Long  Position Profit and Loss Plotting

plot(longTrade and e_Long_TP  and long_TP                          ? long_TP      : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_SL  and long_SL and not e_Long_TS        ? long_SL      : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(longTrade and e_Long_TS  and long_T_stop and not e_Long_SL    ? long_T_stop  : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)

// Short Position Profit and Loss Plotting

plot(shortTrade and e_Short_TP and short_TP                        ? short_TP     : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_SL and short_SL and not e_Short_TS     ? short_SL     : na, title="SL Level", color=color.red,   style=plot.style_linebr, linewidth=2)
plot(shortTrade and e_Short_TS and short_T_stop and not e_Short_SL ? short_T_stop : na, title="TS Level", color=color.red,   style=plot.style_linebr, linewidth=2)