Ini adalah strategi trend mengikut jangka masa 5 minit berdasarkan persimpangan EMA yang cepat dan perlahan, dengan pesanan had dan penangguhan stop loss untuk menangkap trend secara automatik. Ia sesuai untuk perdagangan trend jangka sederhana, menggunakan penapis EMA untuk menentukan arah trend keseluruhan dan persimpangan EMA cepat / perlahan untuk menentukan masa kemasukan tertentu. Kelebihannya adalah penilaian trend yang tepat dan trend yang berkesan. Kelemahannya termasuk pecah palsu dan whipsaws sesekali.
Secara khusus:
Yang di atas merangkumi logik perdagangan asas strategi ini.
Penyelesaian:
Secara keseluruhan, ini adalah strategi trend berikut jangka sederhana yang sangat berkesan. Logiknya yang jelas menggunakan persilangan EMA untuk kemasukan, perintah had untuk mencegah mengejar, dan berhenti menyusul untuk mengunci keuntungan adalah mudah dan kukuh. Dengan penyesuaian parameter yang betul, ia dapat mencapai kadar kemenangan dan keuntungan yang lebih tinggi. Risiko seperti tempoh EMA yang tidak tepat dan berhenti yang berlebihan perlu dipantau. Tetapi secara umum ini adalah sistem perdagangan trend yang boleh diukur secara cekap.
/*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)