이 전략은 리스크 관리를 위해 후속 스톱 로스 및 이익 목표 메커니즘과 결합한 입력 신호로 동적 복수의 EMA를 활용합니다. 멀티 DCA 엔트리를 통해 트렌드를 식별하고 비용을 제어하기 위해 EMA의 부드러운 성격을 활용합니다. 또한 적응 스톱 로스 및 이익 취득 기능의 통합은 자동화 프로세스를 향상시킵니다.
선택된 EMA 기간의 범위를 넘거나 이동할 때 긴 엔트리를 유발합니다. 전형적인 EMA에는 5, 10, 20, 50, 100, 200 기간이 포함됩니다. 이 전략은 엔트리 기준으로 EMA의 1% 범위를 사용합니다.
이 전략은 EMA 트렌드 검출, 멀티-DCA 비용 평균화, 트레일링 스톱 로스, 목표 수익 취득 및 기타를 포함한다. 매개 변수 조정 및 위험 통제 강화에 대한 충분한 잠재력이 남아있다. 전반적으로이 매우 적응력 있고 다재다능한 전략은 투자자에게 안정적인 알파 생성 기능을 제공합니다.
/*backtest start: 2023-01-12 00:00:00 end: 2024-01-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true ) // Define the investment amount for when the condition is met investment_per_condition = 6 // Define the EMAs ema5 = ema(close, 5) ema10 = ema(close, 10) ema20 = ema(close, 20) ema50 = ema(close, 50) ema100 = ema(close, 100) ema200 = ema(close, 200) // Define ATR sell threshold atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1) // Helper function to find if the price is within 1% of the EMA isWithin1Percent(price, ema) => ema_min = ema * 0.99 ema_max = ema * 1.01 price >= ema_min and price <= ema_max // Control the number of buys var int buy_count = 0 buy_limit = input(title="Buy Limit", type=input.integer, defval=3000) // Calculate trailing stop and profit target levels trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10) profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10) // Determine if the conditions are met and execute the strategy checkConditionAndBuy(emaValue, emaName) => var int local_buy_count = 0 // Create a local mutable variable if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName) local_buy_count := local_buy_count + 1 // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close) local_buy_count // Return the updated local_buy_count // Add ATR sell condition atr_condition = atr(20) > atr_sell_threshold if atr_condition strategy.close_all() buy_count := 0 // Reset the global buy_count when selling // Strategy execution buy_count := checkConditionAndBuy(ema5, "EMA5") buy_count := checkConditionAndBuy(ema10, "EMA10") buy_count := checkConditionAndBuy(ema20, "EMA20") buy_count := checkConditionAndBuy(ema50, "EMA50") buy_count := checkConditionAndBuy(ema100, "EMA100") buy_count := checkConditionAndBuy(ema200, "EMA200") // Calculate trailing stop level trail_offset = close * trail_percent / 100 trail_level = close - trail_offset // Set profit target level profit_target_level = close * (1 + profit_target_percent / 100) // Exit strategy: Trailing Stop and Profit Target strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level) strategy.exit("ProfitTarget", from_entry="Buy at EMA", when=close >= profit_target_level) // Plot EMAs plot(ema5, title="EMA 5", color=color.red) plot(ema10, title="EMA 10", color=color.orange) plot(ema20, title="EMA 20", color=color.yellow) plot(ema50, title="EMA 50", color=color.green) plot(ema100, title="EMA 100", color=color.blue) plot(ema200, title="EMA 200", color=color.purple)