이중 이동창의 운동량 TSI 표시기

저자:차오장, 날짜: 2024-01-08 11:20:35
태그:

img

I. 전략 개요

이 전략은모멘텀 이중 이동 창 TSI 지표 전략이 전략의 핵심 아이디어는 가격 변동을 부드럽게하기 위해 이중 EMA 슬라이딩 창을 사용하여 트렌드의 방향 변화를 결합하여 시장의 구매력과 판매력을 반영하는 동력 지표, 즉 TSI 지표를 구성하고 구매 및 판매 결정을 내리는 거래 신호로 사용하는 것입니다.

II. 전략 원칙

이 전략은 가격 변화를 계산하기 위해 이중 슬라이딩 윈도우의 이중 기하급수적인 이동 평균을 사용합니다. 외부 윈도우 기간은 길고 내부 윈도우 기간은 짧습니다. 이중 매끄럽게 함으로써 가격 데이터의 무작위성 일부가 제거됩니다.

먼저 가격의 단위 변화를 계산합니다.

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 지표가 이동 평균을 넘으면 판매 신호가 생성됩니다.

III. 전략적 장점

  1. 이중 슬라이딩 창을 사용하면 더 정확한 지표 반응을 위해 단기 시장 소음을 효과적으로 필터합니다.
  2. 또한 가격 변화도 두 배로 평평화되어 TSI 지표가 더 안정적이고 신뢰할 수 있습니다.
  3. 가격 변화와 절대 가격 변화의 비율이 사용됩니다. 자동으로 표준화되어 더 비교 가능합니다.
  4. 거래 결정의 품질 지표로 가격 변화의 방향과 크기를 포괄적으로 고려하십시오.
  5. 다른 매개 변수를 설정하면 지표 민감도를 유연하게 조정할 수 있습니다.

IV. 전략적 위험

  1. 시장이 장기적으로 변동할 때 TSI 지표가 잘못된 신호를 줄 수 있습니다.
  2. 부적절한 매개 변수 설정은 또한 지표 및 신호의 품질에 영향을 줄 수 있습니다.
  3. 이중 슬라이딩 창이 있음에도 불구하고 지표는 여전히 단기 시장 소음에 약간의 민감성을 가지고 있습니다.
  4. 길고 짧은 창 기간 사이의 차이가 너무 크면, 지표와 신호가 지연 될 수 있습니다.

시나리오 기간 매개 변수를 조정하고 신호 이동 평균 길이를 적절히 단축하여 최적화 할 수 있습니다. 시장이 변동하면 위험을 제어하기 위해 일시적으로 거래를 중단 할 수 있습니다.

V. 최적화 방향

  1. 최적의 매개 변수를 찾기 위해 다른 긴 및 짧은 창 기간 매개 변수의 테스트 조합
  2. 선형 가중 이동 평균과 같은 다른 유형의 이동 평균을 시도하십시오.
  3. 세 배 또는 여러 개의 슬라이딩 창문을 구축하여 지표의 부드러움을 높여
  4. 구매/판매 지점 선택을 최적화하기 위해 다른 보조 지표를 결합
  5. 단일 손실을 엄격하게 통제하기 위해 스톱 로스 전략을 설정

VI. 요약

이 전략은 가격 변화의 이중 평형화를 기반으로 구매력과 판매력을 반영하는 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)

더 많은