이 전략은모멘텀 이중 이동 창 TSI 지표 전략이 전략의 핵심 아이디어는 가격 변동을 부드럽게하기 위해 이중 EMA 슬라이딩 창을 사용하여 트렌드의 방향 변화를 결합하여 시장의 구매력과 판매력을 반영하는 동력 지표, 즉 TSI 지표를 구성하고 구매 및 판매 결정을 내리는 거래 신호로 사용하는 것입니다.
이 전략은 가격 변화를 계산하기 위해 이중 슬라이딩 윈도우의 이중 기하급수적인 이동 평균을 사용합니다. 외부 윈도우 기간은 길고 내부 윈도우 기간은 짧습니다. 이중 매끄럽게 함으로써 가격 데이터의 무작위성 일부가 제거됩니다.
먼저 가격의 단위 변화를 계산합니다.
pc = change(price)
두 개의 슬라이딩 창을 사용해서 가격 변화를 두 배로 부드럽게 합니다.
double_smoothed_pc = double_smooth(pc, long, short)
다음으로 두 개의 슬라이딩 창을 사용하여 두 배 평평화 된 가격 변화의 절대 값을 계산합니다.
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
마지막으로, 평형된 절대 가격 변화와 분해된 평형된 절대 가격 변화를 사용하여 구매력과 판매력을 반영하는 TSI 지표를 얻습니다.
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
길고 짧은 창 기간의 다른 길이를 설정함으로써, 단기 시장 소음이 어느 정도 필터링 될 수 있으므로, TSI 지표는 중장기 트렌드에서 구매력과 판매력을 더 잘 반영할 수 있습니다. TSI 지표가 이동 평균을 넘으면 구매 신호가 생성됩니다. TSI 지표가 이동 평균을 넘으면 판매 신호가 생성됩니다.
시나리오 기간 매개 변수를 조정하고 신호 이동 평균 길이를 적절히 단축하여 최적화 할 수 있습니다. 시장이 변동하면 위험을 제어하기 위해 일시적으로 거래를 중단 할 수 있습니다.
이 전략은 가격 변화의 이중 평형화를 기반으로 구매력과 판매력을 반영하는 TSI 추진력 지표를 계산합니다. 이중 슬라이딩 창문은 소음을 필터링합니다. 가격 변화 변동의 이중 평형화는 또한 지표를 더 안정적이고 신뢰할 수있게 만듭니다. 표준화 된 비율은 비교가 가능합니다. 지표는 고품질 신호 원천으로 가격 변화의 방향과 크기를 결합합니다. 매개 변수 조정을 통해 지표의 민감도를 자유롭게 제어 할 수 있습니다. 매개 변수 최적화 및 위험 통제로 매우 실용적인 양적 거래 전략 선택입니다.
/*backtest start: 2023-01-01 00:00:00 end: 2024-01-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("True Strength Indicator BTCUSD 2H", shorttitle="TSI BTCUSD 2H",initial_capital=1000, commission_value=0.2, commission_type =strategy.commission.percent, default_qty_value=100 , overlay = false, pyramiding=10, default_qty_type=strategy.percent_of_equity) //BASED ON True Strength Indicator MTF resCustom = input(title="Timeframe", defval="120" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) length = input(title="Период", defval=300) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ema(src, long) ema(fist_smooth, short) pc = change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ema(tsi_value, signal) plot(tsi_value, color=lime,linewidth=2) plot(tsi2, color=red,linewidth=2) hline(30, title="Zero") hline(50, title="Zero",linewidth=2) hline(70, title="Zero") buy = crossover(tsi_value, tsi2) sell = crossunder(tsi_value, tsi2) if(buy) strategy.entry("BUY", strategy.long, when = window()) if(sell) strategy.entry("SELL", strategy.short, when = window()) //greentsi =tsi_value //redtsi = tsi2 //bgcolor( greentsi>redtsi and rsiserie > 50 ? lime : na, transp=90) //bgcolor( greentsi<redtsi and rsiserie < 50 ? red : na, transp=90) //yellow1= redtsi > greentsi and rsiserie > 50 //yellow2 = redtsi < greentsi and rsiserie < 50 //bgcolor( yellow1 ? yellow : na, transp=80) //bgcolor( yellow2 ? yellow : na, transp=50) //bgcolor( yellow1 and yellow1[1] ? yellow : na, transp=70) //bgcolor( yellow2 and yellow2[2] ? yellow : na, transp=70) //bgcolor( rsiserie > 70 ? lime : na, transp=60) //bgcolor( rsiserie < 30 ? red : na, transp=60)