Morning Star Breakout Strategi

Penulis:ChaoZhang, Tanggal: 2023-09-14 16:36:32
Tag:

Logika Strategi

Strategi ini memperdagangkan bursa bullish menggunakan pola lilin Morning Star. Sinyal perdagangan dihasilkan ketika pola Morning Star melanggar EMA60.

Logikanya adalah:

  1. Menggambar rata-rata bergerak eksponensial 60 hari EMA60

  2. Mengidentifikasi pola Morning Star, yang terdiri dari lilin bearish, doji/spinning top, dan lilin bullish yang memecahkan puncak dari dua lilin pertama

  3. Sinyal panjang adalah pecah di atas EMA60 setelah pola Morning Star

  4. Gunakan target keuntungan atau trailing stop untuk keluar

  5. Stop loss ditetapkan pada minimum terendah dari 100 lilin terakhir

  6. Parameter seperti Morning Star toleransi dapat dikonfigurasi

Strategi ini memanfaatkan sifat pembalikan tren Morning Stars ke arah tren.

Keuntungan

  • Morning Star secara efektif menandakan pembalikan jangka pendek

  • Penembusan masuk dan penghentian trailing mengikuti tren

  • Jendela mundur mencegah stop loss yang berlebihan

Risiko

  • Membutuhkan pengujian dan pengoptimalan berulang

  • Berhenti terlalu dekat dapat menyebabkan berhenti berlebihan

  • LONG hanya melewatkan kesempatan singkat

Ringkasan

Strategi ini mengidentifikasi pola Morning Star dan perdagangan breakout selaras dengan tren. Penyesuaian parameter menyesuaikan dengan kondisi pasar yang bervariasi.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-23 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)
// © TheSocialCryptoClub
// Author: @devil_machine

//@version=5
strategy("PURE MORNING 2.0", overlay=true, pyramiding=1,
         initial_capital=10000, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10,
         slippage=1,backtest_fill_limits_assumption=1,use_bar_magnifier= true,
         commission_type=strategy.commission.percent, commission_value=0.075
         )

//------------------------------
// Indicators
//------------------------------

rma=ta.rma(close, 60)
mfi=ta.mfi(close, 10)
rsi=ta.rsi(close, 14)
atr7= ta.atr(7)
ema60=ta.ema(close,60)

plot(ema60,"EMA 60", color.new(color.aqua,0))

//------------------------------
// Doji settings 
//------------------------------
//-----------------------------------------------MORNING DOJI STAR CODE
range1= high - low
tolerance = input.float(defval=0.09, title="MDS Tolerance",group= "DOJI SETTINGS", minval=0.01, maxval=1, step=0.01)/100

candle1 = math.abs (close[2] - open[2]) /range1[2] > .6 and close[2] < open[2]
candle2 = ((open[1] > close[1] and open[1] < close[1]*(1+tolerance)) or (open[1] < close[1] and open[1] > close[1]*(1-tolerance)) and close [1]<close[2]+range1[2])
candle3 = close > open and close > (close[2]+range1[2])

MDS = candle1 and candle2 and candle3

plotshape (MDS and close > ema60, text="MD", textcolor=color.yellow, offset=-1, location=location.abovebar, color=color.green, style=shape.triangleup)
plotshape (MDS and close < ema60, text="MD", textcolor=color.olive, offset=-1, location=location.belowbar, color=color.red, style=shape.triangledown)

//------------------------------------------------DOJI CODE

tolerance1= input.float(defval=0.05, title="DOJI Tolerance",group= "DOJI SETTINGS", minval=0.01, maxval=1, step=0.01)/100
Is_OC_Equal= (open > close and open < close*(1+tolerance1)) or (open < close and open > close*(1-tolerance1))

plotshape(Is_OC_Equal and close < ema60, text="D", textcolor=color.red, location=location.belowbar, color=color.red)
plotshape(Is_OC_Equal and close > ema60, text="D", textcolor = color.green, location=location.abovebar, color=color.green)

//------------------------------
// Filter
//------------------------------

xl_tp_percent      = input.float(9,step=0.5, title="Take Profit", group="EXIT LONG") 

sl_type_ll         = input.bool(true, "SL type Lowest Low", group="EXIT LONG")
sl_len             = input.int(100, "Stop Length", group="EXIT LONG")

max_loss_filter    = input.bool(false,"Max Loss Filter", group ="Filter")
filter_percent     = input.int(10, "Max Loss %", group="Filter")

sl_type_percent    = input.bool(false, "SL type Percent", group="EXIT LONG")
xl_sl_percent      = input.float(2,step=.5, title="Stop Loss", group="EXIT LONG") 

filter_stop= max_loss_filter == true ? close - ta.lowest (low, sl_len) < (close*filter_percent)/100 : true

if sl_type_percent == true 
    sl_type_ll := false

//------------------------------
// Entry Long
//------------------------------

el_cond = Is_OC_Equal and close > ta.ema(close, 60) and filter_stop
el_cond_02 = MDS and close > ta.ema(close, 60) and filter_stop

mess = "!buy " + syminfo.ticker // Executor command to buy automatically 

if el_cond 
    strategy.entry ("EL", strategy.long, alert_message = mess,comment = "EL cond 1")

plotshape(el_cond and strategy.position_size == 0, "el_long", shape.circle, color=color.green)

if el_cond_02       
    strategy.entry ("EL", strategy.long, alert_message = mess,comment = "EL cond 2" )

plotshape(el_cond_02 and strategy.position_size == 0, "el_long_02", shape.circle, color=color.green)

//------------------------------
//Exit Long TP - SL
//------------------------------

xl_sl_price = strategy.position_avg_price * (1-xl_sl_percent/100)
xl_tp_price = strategy.position_avg_price * (1+xl_tp_percent/100)

if sl_type_ll == true
    xl_sl_price := ta.lowest (low, sl_len) 

//------------------------------
//Trailing stop 
//------------------------------

xl_ts_percent      = input.float(1,   step=0.5, title= "Trailing theshold", group="TRAILING STOP")
xl_to_percent      = input.float(0.5, step=0.5, title= "Trailing offset",   group="TRAILING STOP")

xl_ts_tick = xl_ts_percent * close/syminfo.mintick/100
xl_to_tick = xl_to_percent * close/syminfo.mintick/100

mess_sell = "!sell " + syminfo.ticker // Executor command to sell automatically 

strategy.exit("XL+SL/TP", "EL", stop=xl_sl_price, limit=xl_tp_price, trail_points=xl_ts_tick, trail_offset=xl_to_tick,comment_loss= "STOP", comment_profit = "PROFIT",comment_trailing = "TS", alert_message = mess_sell)

//------------------------------
// Conditional close on MFI
//------------------------------

xl_cond= ta.crossover(mfi, 90)

if xl_cond
    strategy.close("XL", alert_message = mess_sell)

plotshape(xl_cond, "xl_cond", shape.circle, color=color.red)

Lebih banyak