이 전략은 빠른 이동 평균과 느린 이동 평균의 교차를 기반으로 거래 신호를 생성합니다. 빠른 이동 평균이 아래에서 느린 이동 평균을 넘을 때 구매 신호를 생성합니다. 빠른 이동 평균이 위에서 느린 이동 평균을 넘을 때 판매 신호를 생성합니다.
이 전략은 sma 함수를 사용하여 빠르고 느린 이동 평균을 계산합니다. fast_SMA는 기간 길이 fast_SMA_input와 함께 빠른 이동 평균입니다. slow_SMA는 기간 길이 slow_SMA_input와 함께 느린 이동 평균입니다.
이 전략은 빠른 이동 평균과 느린 이동 평균 사이의 교차를 결정하기 위해 크로스 및 크로스 언더 함수를 사용합니다. 빠른 이동 평균이 느린 이동 평균을 넘을 때, LONG 변수는 사실이며 구매 신호가 생성됩니다. 빠른 이동 평균이 느린 이동 평균을 넘을 때, SHORT 변수는 사실이며 판매 신호가 생성됩니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략은 또한 다음과 같은 위험을 가지고 있습니다.
위험 관리
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
이 전략은 이동 평균의 장점을 활용하여 효과적으로 거래 신호를 생성합니다. 일부 위험이 있지만 매개 변수 최적화, 필터 추가 등으로 개선 될 수 있습니다. 이동 평균 크로스오버 전략은 추가 연구와 응용 가치가 있습니다.
/*backtest start: 2023-10-01 00:00:00 end: 2023-10-13 00:00:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@author Jacques Grobler // // SIMPLE CROSS OVER BOT // ===================== // // This is a simple example of how to set up a strategy to go long or short // If you make any modifications or have any suggestions, let me know // When using this script, every section marked back testing should be // uncommented in order to use for back testing, same goes for using the script portion /////////////////////////////////////////////////////////////////////////////////////// //// INTRO //// ----- // BACKTESTING //@version=4 strategy(title="SimpleCrossOver_Bot_V1_Backtester", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.1) // SIGNALS //study(title="SimpleCrossOver_Bot_V1_Signals", overlay = true) /////////////////////////////////////////////////////////////////////////////////////// //// INPUTS //// ------ // BACKTESTING dateSart_Year = input(2018, title="Start Year", minval=2000) dateSart_Month = input(1, title="Start Month", minval=1, maxval=12) dateSart_Day = input(1, title="Start Day", minval=1, maxval=31) dateEnd_Year = input(2019, title="End Year", minval=2000) dateEnd_Month = input(1, title="End Month", minval=1, maxval=12) dateEnd_Day = input(1, title="End Day", minval=1, maxval=31) // BACKTESTING AND SIGNALS fast_SMA_input = input(7, title="SMA Fast") slow_SMA_input = input(25, title="SMA Slow") /////////////////////////////////////////////////////////////////////////////////////// //// INDICATORS //// ---------- fast_SMA = sma(close, fast_SMA_input) slow_SMA = sma(close, slow_SMA_input) /////////////////////////////////////////////////////////////////////////////////////// //// STRATEGY //// -------- LONG = cross(fast_SMA, slow_SMA) and fast_SMA > slow_SMA stratLONG() => crossover(fast_SMA, slow_SMA) SHORT = cross(fast_SMA, slow_SMA) and fast_SMA < slow_SMA stratSHORT() => crossunder(fast_SMA, slow_SMA) /////////////////////////////////////////////////////////////////////////////////////// //// TRIGGERS //// -------- // BACKTESTING testPeriodStart = timestamp(dateSart_Year, dateSart_Month, dateSart_Day, 0, 0) testPeriodStop = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day, 0, 0) timecondition = true strategy.entry(id="LONG", long = true, when=timecondition and stratLONG()) strategy.entry(id="SHORT", long = false, when=timecondition and stratSHORT()) // SIGNALS //alertcondition(LONG, title="LONG") //alertcondition(SHORT, title="SHORT") /////////////////////////////////////////////////////////////////////////////////////// //// PLOTS //// ----- // BACKTESTING AND SIGNALS plot(fast_SMA, color=green, linewidth=1) plot(slow_SMA, color=yellow, linewidth=1) plotshape(LONG, title="LONG", style=shape.triangleup, text="LONG", location=location.belowbar, size=size.small, color=green) plotshape(SHORT, title="SHORT", style=shape.triangledown, text="SHORT", location=location.abovebar, size=size.small, color=red)