
이 전략은 EMA와 MACD 지표에 기반한 고주파수 수량 거래 시스템으로 ATR 동적 중지 및 지능형 위치 관리를 결합합니다. 전략은 9주기 및 21주기 EMA 교차를 주요 입시 신호로 사용하고 MACD 지표와 함께 신호 확인을 수행하며 ATR 동적 계산 중지 및 수익 목표를 통해 완전한 거래 폐쇄 고리 및 위험 제어 시스템을 구현합니다.
전략은 거래 기회를 식별하기 위해 다층적 기술 지표 포트폴리지를 사용합니다. 첫째, 단기 ((9) 과 긴 주기 ((21) 의 EMA 평균선 교차를 초기 신호로 사용하여, 단기 평균선이 장기 평균선을 상향으로 통과하면 다중 신호를 생성하고, 반대로 마이너스 신호를 생성합니다. 둘째, 최적화된 MACD 지표 ((6,13,4) 를 확인 신호로 사용하여, MACD 라인과 신호 라인의 위치 관계가 EMA 교차 방향과 일치하도록 요구합니다. 위험 관리 측면에서, 전략은 ATR 지표를 사용하여 동적으로 손실을 계산하고, 1: 2의 위험 수익률을 유지합니다.
이 전략은 고전적인 기술 지표와 현대적인 위험 관리 방법을 결합하여 완전한 고주파 거래 시스템을 구축한다. 이 전략의 핵심 장점은 다중 신호 확인과 엄격한 위험 통제에 있다. 그러나 여전히 실장 환경에서 충분한 테스트와 최적화가 필요합니다.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("High-Frequency Trade Script with EMA, MACD, and ATR-based TP/SL", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=2, initial_capital=100000)
// إعداد المؤشرات
emaBuy = ta.ema(close, 9) // EMA بفترة قصيرة للشراء
emaSell = ta.ema(close, 21) // EMA بفترة أطول للبيع
[macdLine, signalLine, _] = ta.macd(close, 6, 13, 4) // MACD بفترات قصيرة
atr = ta.atr(14) // حساب مؤشر ATR
// إعداد نسبة وقف الخسارة وجني الأرباح
stopLossATRMultiplier = 1.5 // تقليل وقف الخسارة لـ 1.5 * ATR
riskToRewardRatio = 2.0 // نسبة العائد إلى المخاطرة 1:2
// إعداد إدارة المخاطر
riskPercentage = 1.0 // المخاطرة كـ 1% من رأس المال
capital = strategy.equity // إجمالي رأس المال
riskAmount = capital * (riskPercentage / 100) // مقدار المخاطرة
// شروط إشارات الشراء: تقاطع EMA القصير فوق الطويل و MACD أعلى من Signal
longCondition = ta.crossover(emaBuy, emaSell) and macdLine > signalLine
// شروط إشارات البيع: تقاطع EMA القصير تحت الطويل و MACD أسفل Signal
shortCondition = ta.crossunder(emaBuy, emaSell) and macdLine < signalLine
// --- تنفيذ أوامر الشراء والبيع تلقائيًا مع وقف الخسارة وجني الأرباح --- //
// تعريف خطوط وقف الخسارة وجني الأرباح
var line longStopLossLine = na
var line longTakeProfitLine = na
var line shortStopLossLine = na
var line shortTakeProfitLine = na
if (longCondition)
longEntryPrice = close // سعر الدخول للشراء
longStopLoss = longEntryPrice - (atr * stopLossATRMultiplier) // وقف الخسارة بناءً على ATR
longTakeProfit = longEntryPrice + ((longEntryPrice - longStopLoss) * riskToRewardRatio) // جني الأرباح بنسبة 1:2
// حساب حجم الصفقة بناءً على مقدار المخاطرة
positionSize = riskAmount / (longEntryPrice - longStopLoss) // حجم العقد
// إدخال أمر الشراء
strategy.entry("Buy", strategy.long, qty=positionSize)
// إعداد أوامر وقف الخسارة وجني الأرباح
strategy.exit("Take Profit/Stop Loss", "Buy", stop=longStopLoss, limit=longTakeProfit)
// رسم الخطوط لجني الأرباح ووقف الخسارة
// longStopLossLine := line.new(bar_index, longStopLoss, bar_index + 1, longStopLoss, color=color.red, width=1, style=line.style_dashed) // خط وقف الخسارة
// longTakeProfitLine := line.new(bar_index, longTakeProfit, bar_index + 1, longTakeProfit, color=color.green, width=1, style=line.style_dashed) // خط جني الأرباح
if (shortCondition)
shortEntryPrice = close // سعر الدخول للبيع
shortStopLoss = shortEntryPrice + (atr * stopLossATRMultiplier) // وقف الخسارة بناءً على ATR
shortTakeProfit = shortEntryPrice - ((shortStopLoss - shortEntryPrice) * riskToRewardRatio) // جني الأرباح بنسبة 1:2
// حساب حجم الصفقة بناءً على مقدار المخاطرة
positionSize = riskAmount / (shortStopLoss - shortEntryPrice) // حجم العقد
// إدخال أمر البيع
strategy.entry("Sell", strategy.short, qty=positionSize)
// إعداد أوامر وقف الخسارة وجني الأرباح
strategy.exit("Take Profit/Stop Loss", "Sell", stop=shortStopLoss, limit=shortTakeProfit)
// رسم الخطوط لجني الأرباح ووقف الخسارة
// shortStopLossLine := line.new(bar_index, shortStopLoss, bar_index + 1, shortStopLoss, color=color.red, width=1, style=line.style_dashed) // خط وقف الخسارة
// shortTakeProfitLine := line.new(bar_index, shortTakeProfit, bar_index + 1, shortTakeProfit, color=color.green, width=1, style=line.style_dashed) // خط جني الأرباح
// --- رسم مؤشرات منفصلة --- //
plot(emaBuy, title="EMA Buy (9)", color=color.green, linewidth=2) // EMA الشراء
plot(emaSell, title="EMA Sell (21)", color=color.red, linewidth=2) // EMA البيع
plot(macdLine, title="MACD Line", color=color.blue, linewidth=1) // MACD Line
plot(signalLine, title="Signal Line", color=color.orange, linewidth=1) // Signal Line