
یہ حکمت عملی EMA اور ADX اشارے کے ساتھ مل کر ایک رجحان ٹریکنگ ٹریڈنگ سسٹم ہے جس میں متعدد سطحوں پر اسٹاپ اور موبائل اسٹاپ کے ذریعہ فنڈ مینجمنٹ کو بہتر بنایا گیا ہے۔ حکمت عملی EMA کی مساوی لائن کو رجحان کی سمت کے طور پر استعمال کرتی ہے ، ADX اشارے کو رجحان کی طاقت کے طور پر فلٹر کرتی ہے ، اور منافع کو تقسیم کرنے کے لئے تین پرت اسٹاپ میکانیزم تیار کیا گیا ہے ، جبکہ خطرے کو کنٹرول کرنے کے لئے اے ٹی آر کو متحرک طور پر ایڈجسٹ کرنے کے لئے اسٹاپ پوزیشن کا استعمال کیا گیا ہے۔
حکمت عملی کی بنیادی منطق میں درج ذیل اہم حصے شامل ہیں:
یہ ایک منظم ، منطقی طور پر واضح رجحان کی پیروی کی حکمت عملی ہے ، جس میں منافع اور خطرے کو متعدد سطحوں کے اسٹاپ اور متحرک اسٹاپ نقصان کے ذریعہ متوازن کیا گیا ہے۔ حکمت عملی کا مجموعی ڈیزائن مقداری تجارت کے بنیادی اصولوں کے مطابق ہے ، جس میں اچھی توسیع اور اصلاح کی گنجائش ہے۔ معقول پیرامیٹرز کو ایڈجسٹ کرنے اور بہتر بنانے کے ذریعہ ، اس حکمت عملی کو مختلف مارکیٹ کے ماحول میں مستحکم کارکردگی کا امکان ہے۔
/*backtest
start: 2024-03-06 18:40:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("BTC Optimized Strategy v6", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=250)
// === 參數設定 ===
lengthEMA = input(50, title="EMA 週期")
adxLength = input(14, title="ADX 週期")
atrLength = input(14, title="ATR 週期")
riskReward = input(2.0, title="風險報酬比")
tp1_ratio = input(1.0, title="TP1 (ATR 倍數)")
tp2_ratio = input(2.0, title="TP2 (ATR 倍數)")
trailATR = input(3.0, title="移動止盈 ATR 倍數")
// === 計算技術指標 ===
ema = ta.ema(close, lengthEMA)
atr = ta.atr(atrLength)
// === 計算 ADX ===
upMove = math.max(high - nz(high[1], high), 0)
downMove = math.max(nz(low[1], low) - low, 0)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1], close))), math.abs(low - nz(close[1], close)))
plusDM = upMove > downMove and upMove > 0 ? upMove : 0
minusDM = downMove > upMove and downMove > 0 ? downMove : 0
plusDI = 100 * ta.rma(plusDM, adxLength) / ta.rma(tr, adxLength)
minusDI = 100 * ta.rma(minusDM, adxLength) / ta.rma(tr, adxLength)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)
// === 趨勢過濾條件 ===
isTrending = adx > 20
// === 進場條件 ===
longCondition = ta.crossover(close, ema) and isTrending
shortCondition = ta.crossunder(close, ema) and isTrending
// === 計算止損、止盈價格 ===
longStopLoss = low - atr
shortStopLoss = high + atr
longTP1 = close + tp1_ratio * atr
longTP2 = close + tp2_ratio * atr
shortTP1 = close - tp1_ratio * atr
shortTP2 = close - tp2_ratio * atr
// === 設定進場和出場 ===
if longCondition
strategy.entry("Long", strategy.long)
strategy.exit("Long_Exit1", from_entry="Long", qty_percent=30, limit=longTP1, stop=longStopLoss)
strategy.exit("Long_Exit2", from_entry="Long", qty_percent=50, limit=longTP2, stop=longStopLoss)
strategy.exit("Long_Trail", from_entry="Long", qty_percent=20,
trail_points=atr * trailATR,
trail_offset=atr * trailATR)
if shortCondition
strategy.entry("Short", strategy.short)
strategy.exit("Short_Exit1", from_entry="Short", qty_percent=30, limit=shortTP1, stop=shortStopLoss)
strategy.exit("Short_Exit2", from_entry="Short", qty_percent=50, limit=shortTP2, stop=shortStopLoss)
strategy.exit("Short_Trail", from_entry="Short", qty_percent=20,
trail_points=atr * trailATR,
trail_offset=atr * trailATR)
// === 當價格超過 TP2 後,自動平倉 ===
if close >= longTP2
strategy.close("Long")
if close <= shortTP2
strategy.close("Short")
// === 畫圖標示 ===
plotshape(series=longCondition, location=location.belowbar, color=color.blue, style=shape.labelup, title="買入")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="賣出")
plot(ema, color=color.orange, title="EMA")