یہ حکمت عملی ایک رجحان کے بعد ٹریڈنگ سسٹم ہے جو ای ایم اے اور ایم اے سی ڈی دوہری تکنیکی اشارے کو جوڑتا ہے۔ یہ قیمت کے ساتھ ای ایم اے 9 کے کراس اوور اور سست لائن (ڈی ای اے) کے ساتھ ایم اے سی ڈی فاسٹ لائن (ڈی آئی ایف) کے کراس اوور کے ذریعے مارکیٹ کے رجحانات کو پکڑتا ہے۔ یہ حکمت عملی پچھلے 5 موم بتیوں کی بنیاد پر ایک موافقت پذیر اسٹاپ نقصان کا استعمال کرتی ہے اور منافع کے اہداف کے لئے 3.5: 1 انعام رسک تناسب کا استعمال کرتی ہے ، جس سے ایک مکمل ٹریڈنگ سسٹم بنتا ہے۔
بنیادی منطق کو لمبی اور مختصر سمتوں میں تقسیم کیا گیا ہے:
طویل شرائط: جب اختتامی قیمت نیچے سے EMA9 سے اوپر ٹوٹ جاتی ہے ، اور MACD
یہ حکمت عملی تکنیکی اشارے کی دوہری تصدیق اور سخت رسک مینجمنٹ کے ذریعے تجارتی نظام کے بعد ایک مکمل رجحان کی تعمیر کرتی ہے۔ اگرچہ مارکیٹ کے ماحول پر کچھ انحصار ہے ، لیکن حکمت عملی معقول پیرامیٹر کی اصلاح اور رسک مینجمنٹ کے ذریعے اچھی موافقت اور استحکام دکھاتی ہے۔ مستقبل میں اصلاح کی سمت بنیادی طور پر مجموعی حکمت عملی کی کارکردگی کو بڑھانے کے لئے رجحان کی نشاندہی کی درستگی اور رسک مینجمنٹ کی حرکیات کو بہتر بنانے پر مرکوز ہے۔
/*backtest start: 2024-01-17 00:00:00 end: 2025-01-16 00:00:00 period: 2d basePeriod: 2d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ // ======================= // @version=6 strategy(title="MACD + EMA9 3 h", shorttitle="MACD+EMA9+StopTP_5candles", overlay=true, initial_capital=100000, // Ajuste conforme desejar default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Ajuste % de risco ou quantidade // ----- Entradas (Inputs) ----- emaLen = input.int(9, "Período da EMA 9", minval=1) macdFastLen = input.int(12, "Período MACD Rápido", minval=1) macdSlowLen = input.int(26, "Período MACD Lento", minval=1) macdSignalLen = input.int(9, "Período MACD Signal", minval=1) riskMultiplier = input.float(3.5, "Fator de Multiplicação do Risco (TP)") lookbackCandles = input.int(5, "Quantidade de candles p/ Stop", minval=1) // ----- Cálculo da EMA ----- ema9 = ta.ema(close, emaLen) // ----- Cálculo do MACD ----- [macdLine, signalLine, histLine] = ta.macd(close, macdFastLen, macdSlowLen, macdSignalLen) // DIF cruza DEA para cima ou para baixo macdCrossover = ta.crossover(macdLine, signalLine) // DIF cruza DEA p/ cima macdCrossunder = ta.crossunder(macdLine, signalLine) // DIF cruza DEA p/ baixo // ----- Condições de Compra/Venda ----- // Compra quando: // 1) Preço cruza EMA9 de baixo pra cima // 2) MACD cruza a linha de sinal para cima buySignal = ta.crossover(close, ema9) and macdCrossover // Venda quando: // 1) Preço cruza EMA9 de cima pra baixo // 2) MACD cruza a linha de sinal para baixo sellSignal = ta.crossunder(close, ema9) and macdCrossunder // ----- Execução das ordens ----- // Identifica o menor e o maior preço dos últimos 'lookbackCandles' candles. // A função ta.lowest() e ta.highest() consideram, por padrão, a barra atual também. // Se você quiser EXCLUIR a barra atual, use low[1] / high[1] dentro do ta.lowest() / ta.highest(). lowestLow5 = ta.lowest(low, lookbackCandles) highestHigh5= ta.highest(high, lookbackCandles) // >>> Quando há sinal de COMPRA <<< if (buySignal) // Fecha posição vendida, se existir strategy.close("Sell") // Entra comprado strategy.entry("Buy", strategy.long) // STOP: abaixo do menor preço dos últimos 5 candles stopPrice = lowestLow5 // Risco = (preço de entrada) - (stop) // Note que strategy.position_avg_price só fica disponível a partir da barra seguinte. // Por isso, o exit costuma funcionar corretamente apenas na barra seguinte. // Para fins de teste, podemos usar 'close' como proxy do "entry" (ou aceitar essa limitação). // A forma "correta" de usar strategy.position_avg_price seria via calc_on_order_fills = true, // mas isso pode exigir algumas configurações adicionais. risk = strategy.position_avg_price - stopPrice // Take Profit = entrada + 2,5 * risco takeProfitPrice = strategy.position_avg_price + riskMultiplier * risk // Registra a saída (stop e alvo) vinculada à posição "Buy" strategy.exit("Exit Buy", "Buy", stop=stopPrice, limit=takeProfitPrice) // >>> Quando há sinal de VENDA <<< if (sellSignal) // Fecha posição comprada, se existir strategy.close("Buy") // Entra vendido strategy.entry("Sell", strategy.short) // STOP: acima do maior preço dos últimos 5 candles stopPrice = highestHigh5 // Risco = (stop) - (preço de entrada) risk = stopPrice - strategy.position_avg_price // Take Profit = entrada - 2,5 * risco takeProfitPrice = strategy.position_avg_price - riskMultiplier * risk // Registra a saída (stop e alvo) vinculada à posição "Sell" strategy.exit("Exit Sell", "Sell", stop=stopPrice, limit=takeProfitPrice) // ----- Plotagens visuais ----- plot(ema9, color=color.orange, linewidth=2, title="EMA 9") plot(macdLine, color=color.new(color.blue, 0), title="MACD") plot(signalLine, color=color.new(color.red, 0), title="Signal") plot(histLine, color=color.new(color.purple, 0), style=plot.style_histogram, title="Histogram") // Só para auxiliar na visualização, vamos plotar a linha do lowestLow5 e highestHigh5 plot(lowestLow5, color=color.new(color.lime, 70), style=plot.style_line, title="Lowest 5 bars") plot(highestHigh5, color=color.new(color.fuchsia,70),style=plot.style_line, title="Highest 5 bars")