
یہ حکمت عملی ایک مقداری تجارتی نظام ہے جو متعدد حرکت پذیر اوسط کراس اوور سگنلز پر مبنی ہے۔ یہ سات مختلف قسم کے موونگ ایوریج انڈیکیٹرز کو یکجا کرتا ہے، جن میں سادہ موونگ ایوریج (SMA)، ایکسپونیشل موونگ ایوریج (EMA)، ویٹڈ موونگ ایوریج (WMA)، والیوم ویٹیڈ موونگ ایوریج (VWMA)، ہل موونگ ایوریج (LME) اور بہت کچھ شامل ہے۔ ہائی موونگ ایوریج (HMA)، رف موونگ ایوریج (RMA) اور Arnold-Leguise Moving Average (ALMA)۔ حکمت عملی دو لائن یا تین لائن کراس اوور سسٹم کی حمایت کرتی ہے، اور مارکیٹ کے حالات کے مطابق لچکدار طریقے سے طویل یا مختصر جانے کا انتخاب کر سکتی ہے۔
حکمت عملی کی بنیادی منطق مختلف ادوار کی متحرک اوسطوں کے درمیان باہمی تعلق کو دیکھ کر مارکیٹ کے رجحان کا اندازہ لگانا ہے۔ جب تیز رفتار حرکت اوسط اوپر کی طرف بڑھتی ہے تو ایک لمبا سگنل پیدا ہوتا ہے بصورت دیگر، ایک مختصر سگنل پیدا ہوتا ہے۔ نظام داخلے کے دو طریقے فراہم کرتا ہے: ایک موونگ ایوریج کے براہ راست کراس اوور پر مبنی ہے، اور دوسرا موونگ ایوریج کے نسبت بند ہونے والی قیمت کے پوزیشن کے تعلق پر مبنی ہے۔ تین لائنوں کا نظام درمیانی مدت کے موونگ ایوریج کو متعارف کروا کر سگنل کی وشوسنییتا اور استحکام کو بڑھاتا ہے۔
یہ حکمت عملی ایک جامع ٹرینڈ ٹریکنگ سسٹم ہے جو متعدد متحرک اوسط اشارے اور لچکدار پیرامیٹر سیٹنگز کو مربوط کرکے تاجروں کو ایک قابل اعتماد مقداری تجارتی فریم ورک فراہم کرتا ہے۔ اگرچہ ایک خاص وقفہ ہے، حکمت عملی اب بھی معقول پیرامیٹر کی اصلاح اور رسک کنٹرول اقدامات کے ذریعے اچھی عملی قدر رکھتی ہے۔ یہ سفارش کی جاتی ہے کہ تاجر حقیقی تجارت میں مخصوص مارکیٹ کی خصوصیات کی بنیاد پر ٹارگٹڈ اصلاح کریں۔
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Cruce de Medias Total", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100,max_bars_back=1000)
// Parámetros de entrada
periodo_rapida = input.int(50, title="Periodos para media rápida", minval=1)
periodo_lenta = input.int(200, title="Periodos para media lenta", minval=1)
// Selección del tipo de media móvil
tipo_de_media = input.string(title="Elige el tipo de media móvil", defval="Simple sma", options=["Simple sma", "Exponencial ema", "Ponderada wma", "Volumen ponderada vwma", "Hull hma", "Media suavizada rma", "Media de Arnaud Legoux alma"])
// Posibilidad de estrategia con cruce de tres medias móviles
tres_medias = input.bool(false, title="Estrategia con cruce de 3 medias móviles")
periodo_media = input.int(100, title="Periodos para media media", minval=1)
// Opción de operar en corto
permitir_corto = input.bool(false, title="Permitir operaciones en corto")
// Opción de cuando comprar
cuando_comprar = input.string(title="Cuando comprar", defval="Cruce de medias", options=["Vela anterior cierra por encima de las medias", "Cruce de medias"])
// Opción de cuando vender
cuando_vender = input.string(title="Cuando vender", defval="Cruce de medias", options=["Vela anterior cierra por debajo de las medias", "Cruce de medias"])
float media_mov_rapida = na
float media_mov_media = na
float media_mov_lenta = na
// Definición de las medias móviles
if tipo_de_media == "Simple sma"
media_mov_rapida := ta.sma(close, periodo_rapida)
media_mov_media := ta.sma(close, periodo_media)
media_mov_lenta := ta.sma(close, periodo_lenta)
else if tipo_de_media == "Exponencial ema"
media_mov_rapida := ta.ema(close, periodo_rapida)
media_mov_media := ta.ema(close, periodo_media)
media_mov_lenta := ta.ema(close, periodo_lenta)
else if tipo_de_media == "Ponderada wma"
media_mov_rapida := ta.wma(close, periodo_rapida)
media_mov_media := ta.wma(close, periodo_media)
media_mov_lenta := ta.wma(close, periodo_lenta)
else if tipo_de_media == "Volumen ponderada vwma"
media_mov_rapida := ta.vwma(close, periodo_rapida)
media_mov_media := ta.vwma(close, periodo_media)
media_mov_lenta := ta.vwma(close, periodo_lenta)
else if tipo_de_media == "Hull hma"
media_mov_rapida := ta.hma(close, periodo_rapida)
media_mov_media := ta.hma(close, periodo_media)
media_mov_lenta := ta.hma(close, periodo_lenta)
else if tipo_de_media == "Media suavizada rma"
media_mov_rapida := ta.rma(close, periodo_rapida)
media_mov_media := ta.rma(close, periodo_media)
media_mov_lenta := ta.rma(close, periodo_lenta)
else if tipo_de_media == "Media de Arnaud Legoux alma"
offset = input.int(0, title="Desfase para ALMA", minval=-100, maxval=100)
sigma = input.float(6, title="Sigma para ALMA", minval=0.1, maxval=10)
media_mov_rapida := ta.alma(close, periodo_rapida, offset, sigma)
media_mov_media := ta.alma(close, periodo_media, offset, sigma)
media_mov_lenta := ta.alma(close, periodo_lenta, offset, sigma)
// Graficar las medias móviles en el gráfico
plot_rapida = plot(media_mov_rapida, color=color.green, linewidth=2, title="Media Móvil Rápida")
plot_media = plot(tres_medias ? media_mov_media : na, color=color.blue, linewidth=2, title="Media Móvil Media")
plot_lenta = plot(media_mov_lenta, color=color.red, linewidth=2, title="Media Móvil Lenta")
// Rellenar el área entre las medias móviles con color condicionado
fill(plot_rapida, plot_lenta, media_mov_rapida > media_mov_lenta ? color.new(color.green, 90) : color.new(color.red, 90), title="Relleno entre Medias")
// Lógica de la estrategia para cruce de medias
comprado = strategy.position_size > 0 // Verifica si ya hay una posición abierta
vendido = strategy.position_size < 0
if not comprado // Solo compra si no hay una posición abierta
if tres_medias and cuando_comprar == "Cruce de medias"
if media_mov_rapida > media_mov_media and media_mov_media > media_mov_lenta
strategy.entry("Largo", strategy.long)
label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white)
else if not tres_medias and cuando_comprar == "Cruce de medias"
if ta.crossover(media_mov_rapida, media_mov_lenta)
strategy.entry("Largo", strategy.long)
label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white)
else if tres_medias and cuando_comprar == "Vela anterior cierra por encima de las medias"
if close[1] > media_mov_rapida and close[1] > media_mov_media and close[1] > media_mov_lenta
strategy.entry("Largo", strategy.long)
label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white)
else if not tres_medias and cuando_comprar == "Vela anterior cierra por encima de las medias"
if close[1] > media_mov_rapida and close[1] > media_mov_lenta
strategy.entry("Largo", strategy.long)
label.new(bar_index, low, "Largo", style=label.style_label_up, color=color.green, textcolor=color.white)
// Condición de cierre de la posición
if comprado
if tres_medias and cuando_vender == "Cruce de medias"
if media_mov_rapida < media_mov_media and media_mov_media < media_mov_lenta
strategy.close("Largo")
label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white)
else if not tres_medias and cuando_vender == "Cruce de medias"
if ta.crossunder(media_mov_rapida, media_mov_lenta)
strategy.close("Largo")
label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white)
else if tres_medias and cuando_vender == "Vela anterior cierra por debajo de las medias"
if close[1] < media_mov_rapida and close[1] < media_mov_media and close[1] < media_mov_lenta
strategy.close("Largo")
label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white)
else if not tres_medias and cuando_vender == "Vela anterior cierra por debajo de las medias"
if close[1] < media_mov_rapida and close[1] < media_mov_lenta
strategy.close("Largo")
label.new(bar_index, high, "Cierre Largo", style=label.style_label_down, color=color.red, textcolor=color.white)
// Condición de entrar en corto
if not vendido and permitir_corto
if tres_medias
if media_mov_rapida < media_mov_media and media_mov_media < media_mov_lenta
strategy.entry("Short", strategy.short)
label.new(bar_index, low, "Short", style=label.style_label_up, color=color.blue, textcolor=color.white)
else
if ta.crossunder(media_mov_rapida, media_mov_lenta)
strategy.entry("Short", strategy.short)
label.new(bar_index, low, "Short", style=label.style_label_up, color=color.blue, textcolor=color.white)
// Condición de cierre de posición corta
if vendido
if tres_medias
if media_mov_rapida > media_mov_media and media_mov_media > media_mov_lenta
strategy.close("Short")
label.new(bar_index, high, "Cierre Short", style=label.style_label_down, color=color.purple, textcolor=color.white)
else
if ta.crossover(media_mov_rapida, media_mov_lenta)
strategy.close("Short")
label.new(bar_index, high, "Cierre Short", style=label.style_label_down, color=color.purple, textcolor=color.white)