Esta estrategia opera con breakouts alcistas utilizando el patrón de velas Morning Star. Las señales comerciales se generan cuando el patrón Morning Star rompe por encima de la EMA60.
La lógica es:
Trazar la media móvil exponencial de 60 días EMA60
Identificar patrones de Morning Star, que consisten en una vela bajista, doji/spinning top, y una vela alcista que rompe el máximo de las dos primeras velas
Las señales largas son las rupturas por encima de la EMA60 después de los patrones de Morning Star
Utilizar objetivos de ganancia o paradas de seguimiento para las salidas
Se establece el stop loss en el mínimo mínimo de las últimas 100 velas
Parámetros como la tolerancia de Morning Star configurable
La estrategia capitaliza la naturaleza inversa de la tendencia de Morning Stars en la dirección de la tendencia.
La Estrella de la Mañana señala efectivamente reversiones a corto plazo
La entrada de la ruptura y la parada posterior siguen las tendencias
La ventana de retroceso evita pérdidas de parada excesivas
Requiere pruebas y optimización iterativas
Las paradas demasiado cercanas pueden causar paradas excesivas
LONG sólo pierde oportunidades cortas
Esta estrategia identifica los patrones de Morning Star y las rupturas de operaciones en alineación con la tendencia. El ajuste de parámetros lo adapta a las diferentes condiciones del mercado.
/*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)