Esta es una estrategia de negociación de oscilación basada en promedios móviles dobles. Utiliza el cruce de promedios móviles rápidos y lentos como señales de compra y venta. Cuando el MA rápido cruza por encima del MA lento, se genera una señal de compra. Cuando el MA rápido cruza por debajo del MA lento, se genera una señal de venta. Esta estrategia es adecuada para mercados de rango y captura de fluctuaciones de precios a corto plazo.
La estrategia utiliza un RMA de 6 períodos como el MA rápido y un HMA de 4 períodos como el MA lento.
Cuando la línea rápida cruza por encima de la línea lenta, indica un cambio de tendencia a corto plazo de declive a aumento, que es un momento de transferencia de chips. Por lo tanto, se genera una señal de compra. Por el contrario, cuando la línea rápida cruza por debajo de la línea lenta, se genera una señal de venta.
Además, se hacen juicios de tendencia a largo plazo para evitar negociar en contra de la tendencia.
Las ventajas de esta estrategia incluyen:
El cruce de doble MA identifica eficazmente los puntos de inversión a corto plazo.
Las longitudes MA rápidas y lentas se combinan razonablemente para producir señales precisas.
El filtrado de tendencias a corto/largo plazo elimina la mayoría de las señales falsas.
La lógica de tomar ganancias y parar pérdidas gestiona activamente los riesgos.
Es fácil de entender e implementar, adecuado para principiantes.
También hay algunos riesgos:
Suelen tener pequeñas ganancias pero una gran pérdida.
Comercio frecuente en mercados de rango limitado.
Se necesitan pruebas de robustez.
Agrega módulo de tendencia o combina con estrategias de tendencia.
Algunas direcciones para optimizar la estrategia:
Mejorar las MAs con filtros adaptativos de Kalman, etc.
Añadir el modelo ML para mejorar la precisión de la señal.
Añadir un módulo de gestión de capital para automatizar el control de riesgos.
Combina con factores de alta frecuencia para señales más fuertes.
Arbitraje entre mercados de productos.
En conclusión, esta estrategia de doble MA es una estrategia cuántica típica y práctica. Tiene una buena adaptabilidad para que los principiantes aprendan, mientras que tiene un gran potencial para optimizar aún más con más técnicas cuánticas para mejores resultados.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-07 00:00:00 period: 3m basePeriod: 1m 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/ // © dc_analytics // https://datacryptoanalytics.com/ //@version=5 strategy("Scalping Trading", overlay=true) // INPUTS // bar_color = input(true, title='Bar Color', group='⚙ Settings',tooltip='Color chart bars.', inline = "1") mostrar = input(true, 'Show Alerts', group='⚙ Settings', inline = "1") tempo = input.timeframe('60', group='⚙ Settings', title='🕗 Timeframe', options=['1', '5', '15', '30', '60', '120', '240', '360', '720', 'D', 'W']) i_position = input.string("Bottom Center", title = "⚙ D-Panel Location", options = ["Top Right", "Bottom Center", "Bottom Right"], group='⚙ D-Panel Settings️', tooltip='Choose the location of the information table on the chart.(D-Panel) ') position = i_position == "Top Right" ? position.top_right : i_position == "Bottom Center" ? position.bottom_center : position.bottom_right i_tam = input.string('Big', title = '⚙ D-Painel Size', options = ["Tiny", "Small", "Big"], group='⚙ D-Panel Settings️',tooltip='Choose the size of the information panel (D-Panel).') tamanho = i_tam == "Tiny" ? size.tiny : i_tam == "Small" ? size.small : size.normal show_tp_sl = input(true, title='Show Take Profit/Stop Loss', group='⚙ Settings',tooltip='Show Take Profit/Stop Loss.') TP = input.float(defval=4500, title='Take Profit:',group='⚙ Risk Management',tooltip='Choose amount of profit') SL = input.float(defval=2500, title='Stop Loss:', group='⚙ Risk Management',tooltip='Choose amount of loss') // END INPUTS // // DECLARATIONS // t_up = '📈' t_down = '📉' c_buy = 'Long ⇡' c_sell = 'Short ⇣' // _DECLARATION TREND t_sma = ta.hma(close, 200) tend_sma = ta.sma(close, 12) tendencia = request.security(syminfo.tickerid, timeframe.period, t_sma, barmerge.gaps_off, barmerge.lookahead_off) tend_tabela = request.security(syminfo.tickerid, timeframe.period, tend_sma, barmerge.gaps_off, barmerge.lookahead_off) // _END DECLARATION TREND circle = plot.style_circles // END DECLARATIONS // // COLORS // color gray = color.gray color red = color.new(#ff8c05, 0) color orange = color.new(#ff8c05, 0) color silver = color.silver color up_vol = color.new(color.green, 0) color dn_vol = color.new(color.purple, 0) color orange_tranp = color.new(#ff8c05, 95) // END COLORS // // SCANNER MARKET MAKERS // periodo = input.int(20, 'Period Volume', group='⚙️ Scanner Market Makers Settings') fator = input.float(1.85, 'Proportion to the mean: (1.25 = 125% of the mean)', minval=0, group='⚙️ Scanner Market Makers Settings') vol_up = close > open vol_down = open > close vol = volume pesado = volume > ta.ema(volume, periodo) * fator palette = pesado and vol_up ? gray : pesado and vol_down ? orange : vol_up ? silver : gray // END SCANNER MARKET MAKERS // // LOGIC ONE // s = ta.rma(close, 6) v = ta.hma(close, 4) // TREND t_baixa = tendencia > tendencia[1] t_alta = tendencia < tendencia[1] te_d = tend_tabela > tend_tabela[1] trend = te_d ? t_up : t_down // END TREND a = request.security(syminfo.tickerid, tempo, s) b = request.security(syminfo.tickerid, tempo, ohlc4) c_dn = a > b and a[1] < b[1] c_up = b > a and b[1] < a[1] compra = mostrar and c_up ? a : na venda = mostrar and c_dn ? a : na s_sell = venda and t_alta s_buy = compra and t_baixa c_vela = b > a and te_d ? gray : orange s_up = false s_dw = false b_sinal = not s_up and s_buy s_sinal = not s_dw and s_sell if b_sinal s_dw := false s_up := true s_up if s_sinal s_dw := true s_up := false s_up // END LOGIC ONE // // DATA TABLE // c = b > a ? orange : gray c_sinal = b > a ? c_buy : c_sell // END DATA TABLE // // PLOT/BARCOLOR // c_barcolor = pesado and vol_up ? up_vol : pesado and vol_down ? dn_vol : vol_up ? c : c barcolor(bar_color ? c_barcolor : na) plot(a, color=orange_tranp, style=circle) // END PLOT/BARCOLOR // // TABLE // var dash = table.new(position=position, columns=2, rows=3, border_width=1) if barstate.islast table.cell(table_id=dash, column=1, row=2, text='Scalping DCA', bgcolor=orange) table.cell(table_id=dash, column=1, row=0, text='Trade: ' + c_sinal) table.cell(table_id=dash, column=1, row=1, text='Trend: ' + trend) // END TABLE // // SETTINGS STRATEGY // exitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1) // OPEN ORDER if (b_sinal) strategy.order("Long", strategy.long , comment = "Entry: " + str.tostring(close, "#.####")) // strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####")) // strategy.entry("long", strategy.long) if (s_sinal) strategy.order("Short", strategy.short , comment = "Entry: " + str.tostring(close, "#.####")) // strategy.exit("EXIT", trail_points = 1000, trail_offset = 0, comment_trailing = "Close with Profit: " + str.tostring(close, "#.####")) // strategy.entry("short", strategy.short) // TP/SL ORDERS if strategy.position_size > 0 strategy.exit('Long_Close', 'Long',profit = TP , loss=SL, qty_percent=100, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####")) //if strategy.position_size > 0 // strategy.exit("Long", "Long", stop = longSL, limit = longTP, comment_profit = "Profit Long: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Long: " + str.tostring(exitPrice, "#.####")) if strategy.position_size < 0 strategy.exit('Short_Close', 'Short',profit = TP, loss=SL, qty_percent=100, comment_profit = "Profit Short: " + str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####")) //if strategy.position_size < 0 // strategy.exit("Short", "Short", stop = shortSL, limit = shortTP, comment_profit = "Profit Short: "+ str.tostring(exitPrice, "#.####"), comment_loss = "Stop Short: " + str.tostring(exitPrice, "#.####")) // END SETTINGS STRATEGY // // LOGS // if strategy.opentrades > 10 // log.warning("{0} positions opened in the same direction in a row. Try adjusting `bracketTickSizeInput`", strategy.opentrades) // last10Perc = strategy.initial_capital / 10 > strategy.equity // if (last10Perc and not last10Perc[1]) // log.error("The strategy has lost 90% of the initial capital!")