이 전략은 주로 스칼핑 / 인트라데이 거래에 개발되었습니다. 단기 옵션 거래에 대한 엔트리 / 출구 신호를 식별하는 데 잠재적으로 사용될 수 있습니다. 일반 세션 바 데이터를 사용하여 5 분에서 15 분 사이의 시간 프레임에서 사용되는 경우 인기있는 주식에서 괜찮은 성능을 발휘합니다. EMA, MACD 및 윌리엄 % 범위를 결합하여 긴 및 짧은 신호를 생성합니다.
EMA: 기본값은 200 EMA입니다.
MACD: 기본값은 12/26 길이입니다. 빠른 신호 입력과 느린 신호 입력.
윌리엄 %R - 매끄럽다 (출간): 이것은 원래 윌리엄 %R 라인으로부터 두 개의 이동 평균 라인을 생성하는 사용자 지정 지표입니다.
어떻게 작동하는지: 입국 조건:
출입 조건:
매개 변수는 특정 주식 / 도구에 최적화되지 않았다는 점에 유의하십시오.
즐기세요~~!!
백테스트
/*backtest start: 2022-04-08 00:00:00 end: 2022-05-07 23:59:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © platsn //@version=5 strategy("MACD Willy Strategy", overlay=true, pyramiding=1, initial_capital=10000) // ******************** Trade Period ************************************** startY = input(title='Start Year', defval=2011, group = "Trading window") startM = input.int(title='Start Month', defval=1, minval=1, maxval=12, group = "Trading window") startD = input.int(title='Start Day', defval=1, minval=1, maxval=31, group = "Trading window") finishY = input(title='Finish Year', defval=2050, group = "Trading window") finishM = input.int(title='Finish Month', defval=12, minval=1, maxval=12, group = "Trading window") finishD = input.int(title='Finish Day', defval=31, minval=1, maxval=31, group = "Trading window") //timestart = timestamp(startY, startM, startD, 00, 00) //timefinish = timestamp(finishY, finishM, finishD, 23, 59) // t1 = time(timeframe.period, "0945-1545:23456") // window = time >= timestart and time <= timefinish and t1 ? true : false // t2 = time(timeframe.period, "0930-1555:23456") // window2 = time >= timestart and time <= timefinish and t2 ? true : false leverage = input.float(1, title="Leverage (if applicable)", step=0.1, group = "Trading Options") reinvest = input.bool(defval=false,title="Reinvest profit", group = "Trading Options") reinvest_percent = input.float(defval=20, title = "Reinvest percentage", group="Trading Options") // entry_lookback = input.int(defval=10, title="Lookback period for entry condition", group = "Trading Options") // -------------------------------------------- Data Source -------------------------------------------- src = input(title="Source", defval=close) // ***************************************************************************************************** Daily ATR ***************************************************** atrlen = input.int(14, minval=1, title="ATR period", group = "Daily ATR") iPercent = input.float(5, minval=1, maxval=100, step=0.1, title="% ATR to use for SL / PT", group = "Daily ATR") percentage = iPercent * 0.01 datr = request.security(syminfo.tickerid, "1D", ta.rma(ta.tr, atrlen)) datrp = datr * percentage // plot(datr,"Daily ATR") // plot(datrp, "Daily % ATR") //*********************************************************** VIX volatility index **************************************** //VIX = request.security("VIX", timeframe.period, close) //vix_thres = input.float(20.0, "VIX Threshold for entry", step=0.5, group="VIX Volatility Index") // ************************************************ Volume ****************************************************** vol_len = input(50, 'Volume MA Period') avg_vol = ta.sma(volume, vol_len) //-------------------------------------------------------- Moving Average ------------------------------------ emalen1 = input.int(200, minval=1, title='EMA', group= "Moving Averages") ema1 = ta.ema(src, emalen1) // ------------------------------------------ MACD ------------------------------------------ // Getting inputs fast_length = input(title="Fast Length", defval=12) slow_length = input(title="Slow Length", defval=26) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Plot colors col_macd = input(#2962FF, "MACD Line ", group="Color Settings", inline="MACD") col_signal = input(#FF6D00, "Signal Line ", group="Color Settings", inline="Signal") col_grow_above = input(#26A69A, "Above Grow", group="Histogram", inline="Above") col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above") col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below") col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below") // Calculating fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal // ---------------------------------------- William %R -------------------------------------- w_length = input.int(defval=34, minval=1) w_upper = ta.highest(w_length) w_lower = ta.lowest(w_length) w_output = 100 * (close - w_upper) / (w_upper - w_lower) fast_period = input(defval=5, title='Smoothed %R Length') slow_period = input(defval=13, title='Slow EMA Length') w_fast_ma = ta.wma(w_output,fast_period) w_slow_ma = ta.ema(w_output,slow_period) // ------------------------------------------------ Entry Conditions ---------------------------------------- L_entry1 = close > ema1 and hist > 0 and w_fast_ma > w_slow_ma S_entry1 = close < ema1 and hist < 0 and w_fast_ma < w_slow_ma // -------------------------------------------------- Entry ----------------------------------------------- //profit = strategy.netprofit //trade_amount = math.floor(strategy.initial_capital*leverage / close) //if strategy.netprofit > 0 and reinvest // trade_amount := math.floor((strategy.initial_capital+(profit*reinvest_percent*0.01))*leverage / close) //else // trade_amount := math.floor(strategy.initial_capital*leverage/ close) if L_entry1 //and window strategy.entry("Long", strategy.long) if S_entry1 //and window strategy.entry("Short", strategy.short) // --------------------------------------------------- Exit Conditions ------------------------------------- L_exit1 = hist < 0 and w_fast_ma < w_slow_ma and w_fast_ma < -20 S_exit1 = hist > 0 and w_fast_ma > w_slow_ma and w_fast_ma > -80 // ----------------------------------------------------- Exit --------------------------------------------- if L_exit1 //and window2 strategy.close("Long") if S_exit1 //and window2 strategy.close("Short") // if time(timeframe.period, "1530-1600:23456") // strategy.close_all()