Strategi mengikuti tren 5 menit berdasarkan persilangan EMA cepat dan lambat


Tanggal Pembuatan: 2023-11-16 15:36:36 Akhirnya memodifikasi: 2023-11-16 15:36:36
menyalin: 0 Jumlah klik: 828
1
fokus pada
1617
Pengikut

Strategi mengikuti tren 5 menit berdasarkan persilangan EMA cepat dan lambat

Ringkasan

Strategi ini adalah sistem EMA yang cepat yang berbasis pada kerangka waktu 5 menit, yang menggabungkan penawaran harga dan mengikuti stop loss untuk menangkap tren secara otomatis. Strategi ini cocok untuk perdagangan tren garis pendek dan menengah, dengan memfilter EMA untuk menentukan arah tren secara keseluruhan, dan kemudian menggabungkan EMA yang cepat untuk menentukan waktu masuk tertentu.

Prinsip Strategi

  1. Gunakan EMA cepat dan EMA lambat, lakukan lebih banyak saat memakai EMA cepat di atas EMA lambat, kosongkan saat memakai EMA rendah
  2. Menggunakan EMA macro filter, hanya dapat melakukan lebih banyak ketika harga berada di atas EMA, dan hanya dapat melakukan gap di bawah EMA, untuk menghindari false breakout
  3. Menggunakan harga terbatas untuk memastikan harga mencapai posisi yang diinginkan.
  4. Setelah masuk menggunakan tracking stop loss, lock profit, stop loss exit

Secara khusus:

  1. Berdasarkan panjang EMA cepat dan EMA lambat, EMA cepat dihitung
  2. Jika Anda mengaktifkan filter EMA, Anda hanya dapat melakukan lebih banyak jika harga lebih tinggi dari EMA, dan kosong jika harga lebih rendah dari EMA
  3. Ketika EMA cepat di atas melewati EMA lambat, lakukan lebih banyak; ketika EMA cepat di bawah melewati EMA lambat, kosongkan
  4. Tiket masuk terbatas, tiket masuk terbatas
  5. Start Tracking Stop Loss setelah entry, Tracking, Stop Loss dan Stop Stop berdasarkan harga tertinggi yang berjalan

Ini adalah logika dasar dari strategi ini.

Keunggulan Strategis

  1. Menggunakan EMA untuk menilai arah tren keseluruhan, menghindari perdagangan berlawanan
  2. EMA cepat dan cepat, ditambah dengan daftar harga, dapat mencegah kenaikan harga dan penurunan harga
  3. Tracking Stop Loss Dinamis, Sangat Baik Untuk Mengunci Keuntungan
  4. Pengendalian risiko di tempat, setiap stop loss tetap sekitar 2%
  5. Pemunduran yang lebih kecil, lebih baik untuk menangkap tren
  6. Strategi sederhana, jelas, mudah dipahami dan dioptimalkan

Risiko Strategis

  1. Ada beberapa risiko terjadinya tren palsu yang mungkin akan terjebak.
  2. EMA yang tidak teratur dapat menyebabkan tren yang hilang
  3. Stop loss setting terlalu besar, mungkin di luar dari normal range of fluctuation
  4. Trace Stop Loss Terlalu Radikal, Mungkin Berangkat Lebih Awal
  5. Pengaturan stop loss dan stop loss yang tidak masuk akal, mungkin akan kehilangan sesuatu yang lebih besar.

Tanggapan:

  1. Optimalkan parameter EMA untuk menemukan panjang siklus optimal
  2. Memperkecil stop loss yang tepat untuk mencegah stop loss yang terlalu sering
  3. Setel dengan hati-hati titik awal dan amplitudo pelacakan dari stop loss
  4. Uji berbagai stop loss stop loss ratio untuk menemukan parameter optimal

Arah optimasi strategi

  1. Optimalkan parameter siklus EMA untuk menemukan kombinasi parameter yang optimal
  2. Cobalah jenis EMA yang berbeda, seperti rata-rata bergerak berbobot
  3. Uji indikator lain seperti MACD untuk melihat apakah dapat meningkatkan efektivitas
  4. Cobalah untuk memfilter EMA pada kerangka waktu yang lebih tinggi
  5. Optimalkan batas harga pada saat masuk
  6. Optimalkan titik dan rasio stop loss
  7. Cobalah metode yang lebih kompleks untuk melacak dan menghentikan kerugian.
  8. Menambahkan indikator tren untuk menilai kekuatan tren
  9. Pertimbangkan untuk menambahkan lebih banyak filter untuk menghindari penembusan palsu lebih lanjut

Meringkaskan

Strategi ini secara keseluruhan adalah strategi yang sangat cocok untuk perdagangan tren garis pendek, EMA yang cepat dan lambat untuk menilai waktu masuk, harga yang terbatas untuk menghindari mengejar tinggi dan rendah, proses yang sangat jelas dan mudah dioperasikan. Dengan mengoptimalkan parameter tertentu, Anda dapat meningkatkan kemenangan dan profitabilitas strategi. Tentu saja, Anda juga perlu berhati-hati untuk mencegah risiko seperti siklus EMA yang tidak tepat, kehilangan terlalu sering.

Kode Sumber Strategi
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © jordanfray

//@version=5
strategy(title="5 Minute EMA Strategy", overlay=true, max_bars_back=500, default_qty_type=strategy.percent_of_equity, default_qty_value=100,initial_capital=100000, commission_type=strategy.commission.percent, commission_value=0.05, backtest_fill_limits_assumption=2)

// Indenting Classs
indent_1 = " "
indent_2 = "  "
indent_3 = "   "
indent_4 = "    "

// Group Titles
group_one_title = "EMA Settings"
group_two_title = "Entry Settings"
group_three_title = "Trade Filters"

// Input Tips

ocean_blue = color.new(#0C6090,0)
sky_blue = color.new(#00A5FF,0)
green = color.new(#2DBD85,0)
red = color.new(#E02A4A,0)
light_blue = color.new(#00A5FF,85)
light_green = color.new(#2DBD85,85)
light_red = color.new(#E02A4A,85)
light_yellow = color.new(#FFF900,85)
white = color.new(#ffffff,0)
light_gray = color.new(#000000,70)
transparent = color.new(#000000,100)

// Strategy Settings - EMA
fast_EMA_length = input.int(defval=20, minval=1, title="Fast Length", group=group_one_title)
fast_EMA_type = input.string(defval="EMA", options = ["EMA", "SMA", "RMA", "WMA"], title=indent_4+"Type", group=group_one_title)
fast_EMA_source = input.source(defval=close, title=indent_4+"Source", group=group_one_title)
fast_EMA = switch fast_EMA_type
    "EMA" => ta.ema(fast_EMA_source, fast_EMA_length)
    "SMA" => ta.sma(fast_EMA_source, fast_EMA_length)
    "RMA" => ta.rma(fast_EMA_source, fast_EMA_length)
    "WMA" => ta.wma(fast_EMA_source, fast_EMA_length)
    => na
plot(fast_EMA, title="Fast EMA", linewidth=1, color=green, editable=true)

slow_EMA_length = input.int(defval=100, minval=1, title="Slow Length", group=group_one_title)
slow_EMA_type = input.string(defval="EMA", options = ["EMA", "SMA", "RMA", "WMA"], title=indent_4+"Type", group=group_one_title)
slow_EMA_source = input.source(defval=close, title=indent_4+"Source", group=group_one_title)
slow_EMA = switch slow_EMA_type
    "EMA" => ta.ema(slow_EMA_source, slow_EMA_length)
    "SMA" => ta.sma(slow_EMA_source, slow_EMA_length)
    "RMA" => ta.rma(slow_EMA_source, slow_EMA_length)
    "WMA" => ta.wma(slow_EMA_source, slow_EMA_length)
    => na
plot(slow_EMA, title="Slow EMA", linewidth=1, color=sky_blue, editable=true)


// EMA Macro Filter
enable_EMA_filter = input.bool(defval=false, title="Use EMA Filter", group=group_three_title)
EMA_filter_timeframe = input.timeframe(defval="", title=indent_4+"Timeframe", group=group_three_title)
EMA_filter_length = input.int(defval=300, minval=1, step=10, title=indent_4+"Length", group=group_three_title)
EMA_filter_source = input.source(defval=hl2, title=indent_4+"Source", group=group_three_title)
ema_filter = ta.ema(EMA_filter_source, EMA_filter_length)
ema_filter_smoothed = request.security(syminfo.tickerid, EMA_filter_timeframe, ema_filter[barstate.isrealtime ? 1 : 0], gaps=barmerge.gaps_on)
plot(enable_EMA_filter ? ema_filter_smoothed: na, title="EMA Macro Filter", linewidth=2, color=white, editable=true)


// Entry Settings
stop_loss_val = input.float(defval=2.0, title="Stop Loss (%)", step=0.1, group=group_two_title)/100
take_profit_val = input.float(defval=2.0, title="Take Profit (%)", step=0.1, group=group_two_title)/100
long_entry_limit_lookback = input.int(defval=3, title="Long Entry Limit Lookback", minval=1, step=1, group=group_two_title)
short_entry_limit_lookback = input.int(defval=3, title="Short Entry Limit Lookback", minval=1, step=1, group=group_two_title)
limit_order_long_price = ta.lowest(low, long_entry_limit_lookback)
limit_order_short_price = ta.highest(high, short_entry_limit_lookback)
start_trailing_after = input.float(defval=1, title="Start Trailing After (%)", step=0.1, group=group_two_title)/100
trail_behind = input.float(defval=1, title="Trail Behind (%)", step=0.1, group=group_two_title)/100
long_start_trailing_val = strategy.position_avg_price + (strategy.position_avg_price * start_trailing_after)
short_start_trailing_val = strategy.position_avg_price - (strategy.position_avg_price * start_trailing_after)
long_trail_behind_val = close - (strategy.position_avg_price * (trail_behind/100))
short_trail_behind_val = close + (strategy.position_avg_price * (trail_behind/100))
currently_in_a_long_postion = strategy.position_size > 0
currently_in_a_short_postion = strategy.position_size < 0
long_profit_target = strategy.position_avg_price * (1 + take_profit_val)
long_stop_loss = strategy.position_avg_price * (1.0 - stop_loss_val)
short_profit_target = strategy.position_avg_price * (1 - take_profit_val)
short_stop_loss = strategy.position_avg_price * (1 + stop_loss_val)

bars_since_entry = bar_index - strategy.opentrades.entry_bar_index(strategy.opentrades - 1)
plot(bars_since_entry, editable=false, title="Bars Since Entry", color=green)

long_run_up = currently_in_a_long_postion and bars_since_entry > 0 ? ta.highest(high, bars_since_entry) : high
long_trailing_stop = currently_in_a_long_postion and bars_since_entry > 0 and long_run_up > long_start_trailing_val ? long_run_up - (long_run_up * trail_behind) : long_stop_loss
long_run_up_line = plot(long_run_up, style=plot.style_stepline, editable=false, color=currently_in_a_long_postion ? green : transparent)
long_trailing_stop_line = plot(long_trailing_stop, style=plot.style_stepline, editable=false, color=currently_in_a_long_postion ? long_trailing_stop > strategy.position_avg_price ? green : red : transparent)

short_run_up = currently_in_a_short_postion and bars_since_entry > 0 ? ta.lowest(low, bars_since_entry) : low
short_trailing_stop = currently_in_a_short_postion and bars_since_entry > 0 and short_run_up < short_start_trailing_val ? short_run_up + (short_run_up * trail_behind) : short_stop_loss
// short_run_up_line = plot(short_run_up, style=plot.style_stepline, editable=false, color=currently_in_a_short_postion ? green : transparent)
short_trailing_stop_line = plot(short_trailing_stop, style=plot.style_stepline, editable=false, color=currently_in_a_short_postion ? short_trailing_stop < strategy.position_avg_price ? green : red : transparent)


// Trade Conditions
fast_EMA_cross_down_slow_EMA = ta.crossunder(fast_EMA,slow_EMA)
fast_EMA_cross_up_slow_EMA = ta.crossover(fast_EMA,slow_EMA)
plotshape(fast_EMA_cross_down_slow_EMA ? close : na, title="Short Entry Symbol", color=red, style=shape.triangledown, location=location.belowbar)
plotshape(fast_EMA_cross_up_slow_EMA ? close : na, title="Long Entry Symbol", color=green, style=shape.triangleup, location=location.abovebar)
fast_EMA_is_above_slow_EMA = fast_EMA > slow_EMA
fast_EMA_is_below_slow_EMA = fast_EMA < slow_EMA
ema_macro_filter_longs_only = fast_EMA > ema_filter_smoothed and slow_EMA > ema_filter_smoothed
ema_macro_filter_shorts_only = fast_EMA < ema_filter_smoothed and slow_EMA < ema_filter_smoothed

long_position_take_profit = ta.cross(close, long_trailing_stop) or close > long_profit_target
short_position_take_profit = ta.cross(close, short_trailing_stop) or close > short_profit_target

long_conditions_met = enable_EMA_filter ? ema_macro_filter_longs_only and fast_EMA_cross_up_slow_EMA and fast_EMA_is_above_slow_EMA and not currently_in_a_short_postion : fast_EMA_cross_up_slow_EMA and not currently_in_a_short_postion
short_conditions_met = enable_EMA_filter ? ema_macro_filter_shorts_only and fast_EMA_cross_down_slow_EMA and fast_EMA_is_below_slow_EMA and not currently_in_a_long_postion : fast_EMA_cross_down_slow_EMA and fast_EMA_is_below_slow_EMA and not currently_in_a_long_postion

// Long Entry
strategy.entry(id="Long", direction=strategy.long, limit=limit_order_long_price, when=long_conditions_met)
strategy.cancel(id="Cancel Long", when=ta.crossover(fast_EMA,slow_EMA))
strategy.exit(id="Close Long", from_entry="Long", stop=long_trailing_stop, limit=long_profit_target, when=long_position_take_profit)

// Short Entry 
strategy.entry(id="Short", direction=strategy.short, limit=limit_order_short_price, when=short_conditions_met)
strategy.cancel(id="Cancel Short", when=ta.crossunder(fast_EMA,slow_EMA))
strategy.exit(id="Close Short", from_entry="Short", stop=short_trailing_stop, limit=short_profit_target, when=short_position_take_profit)

entry = plot(strategy.position_avg_price, editable=false, title="Entry", style=plot.style_stepline, color=currently_in_a_long_postion or currently_in_a_short_postion ? color.blue : transparent, linewidth=1)
fill(entry,long_trailing_stop_line, editable=false, color=currently_in_a_long_postion ? long_trailing_stop > strategy.position_avg_price ? light_green : light_red : transparent)
fill(entry,short_trailing_stop_line, editable=false, color=currently_in_a_short_postion ? short_trailing_stop < strategy.position_avg_price ? light_green : light_red : transparent)
//ltp = plot(currently_in_a_long_postion ? long_profit_target : na, style=plot.style_stepline, title="Take Profit", color=currently_in_a_long_postion ? green : transparent, linewidth=1)
//lsl = plot(currently_in_a_long_postion ? long_stop_loss : na, style=plot.style_stepline, title="Take Profit", color=currently_in_a_long_postion ? red : transparent, linewidth=1)
//fill(entry,ltp, color= currently_in_a_long_postion ? light_green : light_red)
//fill(entry,lsl, color= currently_in_a_long_postion ? light_red : light_green)

//stp = plot(currently_in_a_short_postion ? short_profit_target : na, style=plot.style_stepline, title="Take Profit", color=currently_in_a_short_postion ? green : transparent, linewidth=1)
//ssl = plot(currently_in_a_short_postion ? short_stop_loss : na, style=plot.style_stepline, title="Take Profit", color=currently_in_a_short_postion ? red : transparent, linewidth=1)
//fill(entry,stp, color= currently_in_a_short_postion ? light_green : light_red)
//fill(entry,ssl, color= currently_in_a_short_postion ? light_red : light_green)