이 전략은 이동 평균 크로스오버를 기반으로 한 양적 거래 전략이다. 빠른 이동 평균 (단기) 이 아래에서 느린 이동 평균 (더 긴 기간) 을 넘을 때 구매 신호를 생성하고 빠른 이동 평균이 위에서 느린 이동 평균을 넘을 때 판매 신호를 생성한다. 또한 전략은 위험을 제어하기 위해 계정의 이익과 손실에 따라 각 거래의 크기를 조정함으로써 동적 위치 사이징의 개념을 도입한다.
이동평균 크로스오버 전략 (moving average crossover strategy) 은 서로 다른 기간의 두 이동평균에서 크로스오버 신호를 사용하여 가격 트렌드를 포착하는 간단하고 실용적인 수치적 거래 전략으로 위험을 제어하기 위해 역동적 위치 사이징 규칙을 도입하는 동시에 명확한 논리를 가지고 있으며, 구현하기 쉽고, 광범위한 응용 분야를 가지고 있습니다. 그러나 실제 응용에서는 빈번한 거래, 불안정한 시장에서의 저성능 및 매개 변수 최적화와 같은 잠재적 위험에 대해 인식해야합니다. 전략은 트렌드 확인 지표, 위치 사이징 규칙을 최적화하고, 스톱-로스 및 영리 메커니즘을 통합하고, 적응적 매개 변수 최적화를 구현하는 것과 같은 필요에 따라 최적화 및 개선되어야합니다. 지속적인 최적화 및 정교를 통해 전략의 견고성과 수익성을 더욱 향상시킬 수 있습니다.
/*backtest start: 2024-06-06 00:00:00 end: 2024-06-13 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © okolienicholas //@version=5 strategy("Moving Average Crossover Strategy", overlay=true) // Input parameters fast_length = input(9, title="Fast MA Length") slow_length = input(21, title="Slow MA Length") source = close account_balance = input(100, title="Account Balance") // Add your account balance here // Calculate moving averages fast_ma = ta.sma(source, fast_length) slow_ma = ta.sma(source, slow_length) // Plot moving averages plot(fast_ma, color=color.blue, title="Fast MA") plot(slow_ma, color=color.red, title="Slow MA") // Generate buy/sell signals buy_signal = ta.crossover(fast_ma, slow_ma) sell_signal = ta.crossunder(fast_ma, slow_ma) // Plot buy/sell signals plotshape(buy_signal, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal") plotshape(sell_signal, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal") // Calculate the risk per trade risk_per_trade = account_balance * 0.01 // Calculate the number of shares to buy shares_to_buy = risk_per_trade / (high - low) // Calculate the profit or loss profit_or_loss = strategy.netprofit // Adjust the position size based on the profit or loss if (profit_or_loss > 0) shares_to_buy = shares_to_buy * 1.1 // Increase the position size by 10% when in profit else shares_to_buy = shares_to_buy * 0.9 // Decrease the position size by 10% when in loss // Execute orders if (buy_signal) strategy.entry("Buy", strategy.long, qty=shares_to_buy) if (sell_signal) strategy.entry("Sell", strategy.short, qty=shares_to_buy)