이 전략은 트루 스트리트 인덱스 (TSI) 를 계산하여 비트코인 시장 트렌드를 식별하고 비트코인의 알고리즘 거래를 구현하기 위해 RSI 지표에 의해 필터링된 긴/단기 포지션을 입력합니다. 비트코인 틱 데이터를 프로그래밍 방식으로 거래하려는 투자자에게 적합합니다.
이 전략의 핵심은 진정한 강도 지수 (TSI) 이다. TSI는 가격 변화의 절대적 규모와 방향을 두 배의 비율 가격 변화를 평평화함으로써 측정하여 가격 상승과 하락의 절대적 강도를 식별합니다. 구체적인 계산은 다음과 같습니다.
TSI가 신호선 tsi2를 넘을 때 긴 신호가 생성됩니다. TSI가 tsi2를 넘을 때 짧은 신호가 생성됩니다. 또한 전략은 RSI로 TSI 신호를 필터링합니다. RSI가 50보다 높을 때 긴 신호와 RSI가 50 미만일 때 짧은 신호만 받아서 일부 잘못된 신호를 피합니다.
이 전략의 장점은 다음과 같습니다.
이 전략의 위험은 다음과 같습니다.
지연 발행 및 필터 효과는 RSI 필터 규칙을 완화하고 EMA 기간을 단축함으로써 줄일 수 있습니다. 적절한 스톱 로스 전략을 사용하여 거래 리스크를 엄격히 제어해야합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
가장 좋은 조합을 찾기 위해 TSI와 RSI 매개 변수를 최적화하십시오. 긴 / 짧은 EMA 기간, RSI 매개 변수 등을 조정하십시오.
멀티팩터 모델을 구축하기 위해 더 많은 기술적 지표를 도입하십시오. 각 지표를 활용하기 위해 MA, KD 등을 추가 할 수 있습니다.
엔트리 규칙을 최적화하여 하락 트렌드에서 길고 상승 트렌드에서 짧은 것을 피합니다. 더 높은 시간 프레임 트렌드를 기반으로 방향을 판단하십시오.
트레일링 스톱 로스, 시간 기반 스톱 로스, 브레이크오웃 스톱 로스 등과 같은 스톱 로스 전략을 최적화하십시오.
조기 또는 늦은 출출을 피하기 위해 출구 규칙을 최적화하십시오. 변동성 지표는 적절한 출구 지점을 결정하는 데 도움이 될 수 있습니다.
가장 효과적인 상품에 집중하기 위해 거래 제품을 최적화하고, 거래 세션을 조정합니다.
이 전략은 비트코인 단기 트렌드를 True Strength Index로 식별하고 알고리즘적인 비트코인 거래를 위해 RSI로 신호를 필터합니다. 트렌드를 민감하게 캡처하고 소음을 필터하는 장점이 있지만, 일부 후퇴 문제와 거래 위험을 가지고 있습니다. 다면적 최적화는 신뢰할 수있는 비트코인 거래 전문가 자문을 개발하기 위해 전략 성능을 더욱 향상시킬 수 있습니다.
/*backtest start: 2022-09-30 00:00:00 end: 2023-10-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // strategy("True Strength Indicator BTCUSD 15p", shorttitle="TSI BTCUSD 15p",initial_capital=1000, commission_value=0.15, 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="15" ) long = input(title="Long Length", defval=25) short = input(title="Short Length", defval=13) signal = input(title="Signal Length", defval=13) price = request.security(syminfo.tickerid,resCustom,close) double_smooth(src, long, short) => fist_smooth = ta.ema(src, long) ta.ema(fist_smooth, short) pc = ta.change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(math.abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi2=ta.ema(tsi_value, signal) plot(tsi_value, color=color.lime,linewidth=2) plot(tsi2, color=color.red,linewidth=2) rsiserie = ta.rsi(price,7) cciserie = ta.cci(price,14) stochserie = ta.stoch(price,14,3,3) plot(rsiserie,color=color.purple) hline(30, title="Zero") hline(50, title="Zero",linestyle=hline.style_solid, linewidth=2) hline(70, title="Zero") buy = ta.crossover(tsi_value, tsi2) //and rsiserie[1]<25 //and cciserie<-100 and stochserie<20 sell = ta.crossunder(tsi_value, tsi2) //and rsiserie[1]>85 //and cciserie>100 and stochserie>80 alertcondition(buy, title='TSI system', message='Buy signal at!' ) alertcondition(sell, title='TSI system', message='Sell signal at!' ) strategy.entry("BUY", strategy.long, 1, when = buy) strategy.entry("SELL", strategy.short, 1, when = sell ) greentsi =tsi_value redtsi = tsi2 bgcolor( greentsi>redtsi and rsiserie > 50 ? color.lime : na, transp=90) bgcolor( greentsi<redtsi and rsiserie < 50 ? color.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 ? color.lime : na, transp=60) bgcolor( rsiserie < 30 ? color.red : na, transp=60)