이동 평균 크로스오버 트렌드 다음 전략은 시장 트렌드를 추적하는 양적 거래 전략이다. 이 전략은 빠르고 느린 이동 평균을 계산하고 크로스오버가 발생하면 시장 트렌드의 전환점을 파악하여 거래 신호를 생성합니다.
이 전략의 핵심 원칙은 다른 매개 변수와 함께 기하급수적인 이동 평균 (EMA) 을 사용하여 시장 추세를 판단하는 것입니다. 전략은 빠른 EMA와 느린 EMA를 정의합니다. 빠른 EMA가 느린 EMA를 넘을 때 시장에서 상승 추세 반전을 나타냅니다. 빠른 EMA가 느린 EMA를 넘을 때 하향 추세 반전을 나타냅니다.
상향 크로스에서는 전략이 긴 포지션을 열고 하향 크로스에서는 전략이 짧은 포지션을 열고 수익을 취하거나 손실을 멈추기 전까지 포지션을 유지합니다. 또는 반대 방향으로 다시 크로스오버가 발생합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략은 또한 몇 가지 위험을 안고 있습니다.
위험을 줄이기 위해 다른 지표를 결합하여 트렌드 유형을 결정하거나 더 넓은 스톱 로스 비율을 설정하는 것을 고려하십시오.
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
요약하자면, 이동 평균 크로스오버 트렌드 다음 전략은 간단하고 실용적인 트렌드 트레이딩 전략이다. 전략의 핵심 아이디어는 명확하고 구현하기 쉽고 최적화에도 여지가 있습니다. 매개 변수를 조정하고, 멀티 타임프레임 분석, 동적 스톱 등을 추가함으로써 전략의 안정성과 수익성을 지속적으로 향상시킬 수 있습니다.
/*backtest start: 2024-01-28 00:00:00 end: 2024-02-04 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Zhukov trade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=10, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=20, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2030 23:59')) // Set take profit and stop loss percentages take_profit_percent = input(1.0, title ="Take Profit Percent") / 100.0 stop_loss_percent = input(1.0, title ="Stop Loss Percent") / 100.0 // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close, 200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) and inDateRange shortCondition = ta.crossunder(fastEMA, slowEMA) and inDateRange // ORDERS: // Submit entry (or reverse) orders if longCondition and longOK strategy.entry(id='long', direction=strategy.long) if shortCondition and shortOK strategy.entry(id='short', direction=strategy.short) // Exit orders if strategy.position_size > 0 and longOK strategy.exit(id='exit long', from_entry='long', limit=strategy.position_avg_price * (1 + take_profit_percent), stop=strategy.position_avg_price * (1 - stop_loss_percent)) if strategy.position_size < 0 and shortOK strategy.exit(id='exit short', from_entry='short', limit=strategy.position_avg_price * (1 - take_profit_percent), stop=strategy.position_avg_price * (1 + stop_loss_percent))