이 전략은 동적 이중 기하급수적 이동 평균 거래 전략 (Dynamic Dual Exponential Moving Average Trading Strategy) 이라고 불린다. 이 전략은 이중 기하급수적 이동 평균 (DEMA) 을 기반으로 한 양적 거래 전략이다. 이 전략은 주식의 가격 변화율을 계산하고, 그 다음 그 절대적 가치와 비 절대적 가치에 대한 이중 기하급수적 평형을 수행하여 진정한 강도 지수 (TSI) 를 얻을 수 있다. 이 전략은 TSI 값과 그 신호 라인의 황금/죽십자 (golden/dead cross) 에 기초하여 구매 및 판매 신호를 생성한다.
이 전략의 핵심 지표는 진정한 강도 지수 (TSI) 이다.
TSI = 100 * (PC1/PC2)
여기서 PC1과 PC2는 각각 가격 변화율의 이중 지수 이동 평균과 가격 변화율의 절대 값이다. 이중 지수 이동 평균은 먼저 가격 변화율에 한 길이의 지수 이동 평균을 적용하고, 그 다음 얻은 이동 평균에 다른 짧은 지수 이동 평균을 적용하여 계산된다. 이중 평형화는 가격 변화율의 무작위성을 더 잘 제거하고 TSI 지표의 안정성을 향상시킬 수 있다.
전략은 TSI 값을 계산한 후 TSI 값에 대한 신호선을 계산한다. 신호선은 특정 기간 동안 TSI 값의 기하급수적인 이동 평균으로 정의된다. 실제 거래에서 전략은 시장 트렌드를 판단하고 TSI 값과 신호선의 관계를 관찰함으로써 거래 신호를 생성한다. TSI 값이 신호선을 넘으면 구매 신호이다. TSI 값이 신호선을 넘으면 판매 신호이다.
이 전략의 또 다른 특징은 거래 규모가 동적으로 조정된다는 것입니다. 전략 코드는 초기 자본과 위험 노출 비율을 입력 매개 변수로 설정합니다. 이 두 매개 변수는 주식의 현재 가격과 결합하여 거래된 계약 또는 위험 노출 수를 동적으로 계산합니다. 이것은 전체 전략의 전반적인 위험을 더 잘 제어 할 수 있습니다.
동적 이중 기하급수적 이동 평균 거래 전략은 몇 가지 장점이 있습니다.
이 TSI 지표는 이중 지수 평형을 적용하여 시장 소음에 덜 민감하고 더 정확한 신호를 생성 할 수 있습니다.
그것은 거래 신호를 생성하기 위해 지표와 신호 라인을 교차하는 검증 된 원리에 기반합니다. 이것은 많은 잘못된 신호를 제거합니다.
이 전략은 위험 예산에 따라 포지션 크기를 동적으로 조정합니다. 이것은 과잉 거래와 감정을 방지하는 데 도움이됩니다.
그것은 매일 및 주간 시간 프레임에서 작동합니다. 스윙 거래와 포지셔널 거래 모두에 적합합니다.
간단한 입력/출출 논리 때문에 봇과 다른 거래 시스템에서 구현하기가 쉽습니다.
조정할 수 있는 매개 변수가 너무 많지 않아서 시스템을 최적화하기가 쉽습니다.
이 장점 들 이 결합 되어 주식 거래자 들 에게는 견고 하고 다재다능 한 거래 전략 이 된다. 신중 한 평형화 와 위치 사이즈링 은 거짓 신호 와 큰 손실 을 방지 하는 데 도움 이 된다.
동적 이중 기하급수적 이동 평균 거래 전략은 많은 장점을 가지고 있지만 대부분의 주식 전략과 마찬가지로 몇 가지 본질적인 위험이 있습니다.
TSI와 신호 라인은 역사적인 가격 데이터에 기반하기 때문에 특히 변동적인 시장 조건에서 항상 잘못된 신호가 발생할 위험이 있습니다.
시장이 TSI 지표의 0선 주위에서 변동할 경우 윙사 (Whipsaws) 가 발생할 수 있습니다. 이것은 손실로 이어질 수 있습니다.
큰 격차 움직임은 전략이 적시에 종료되지 않았기 때문에 손실로 종료 될 수 있습니다.
만약 시장이 강한 경향을 계속한다면, TSI는 이윤 손실로 이어지는 경향을 조기에 반전시킬 수 있습니다.
레버리지 효과 때문에 위험 매개 변수에서 설정된 한계보다 더 큰 손실이 가능합니다.
그러나 이러한 위험은 포지션 사이즈, 스톱 손실 및 기타 위험 관리 기술과 같은 측면으로 완화 될 수 있습니다. 또한 매개 변수 및 필터는 다양한 시장 조건에서 성능을 극대화하기 위해 추가로 최적화 될 수 있습니다.
이 전략을 최적화하는 몇 가지 아이디어는 다음과 같습니다.
이중 매끄러운 매개 변수의 다양한 조합을 테스트하여 가장 정확한 거래 신호를 생성하는 조합을 찾습니다. 장기 및 단기 사이클 매개 변수는 최적화를 위해 조정 할 수 있습니다.
변동성, 거래량 또는 다른 지표에 기반한 필터를 추가하여 불필요한 거래 신호를 줄일 수 있습니다. 이는 거래 빈도를 줄이고 각 거래의 수익성을 높일 수 있습니다.
스톱 로스 로직을 포함합니다. 예를 들어 TSI 값이 제로선을 넘을 때 중지합니다. 이것은 불필요한 손실을 줄일 수 있습니다.
이 전략 하에 지수, 상품 등과 같은 다른 거래 도구의 성과를 평가합니다. 최고의 성과를 가진 도구에 거래 집중.
선택적으로 거래 기구를 필터링합니다. 예를 들어, 기기의 유동성, 변동성 메트릭을 평가하고 더 높은 매개 변수를 가진 것을 선택합니다.
최적의 매개 변수 조합을 선택하기 위해 워크 포워드 분석과 같은 기계 학습 방법을 사용하여 선택의 인간 편차를 줄이고 더 나은 매개 변수를 얻을 수 있습니다.
다양한 시장 체제에 기반한 여러 매개 변수 세트를 사용하며, 그 사이에 동적으로 전환합니다. 예를 들어, 황소 시장에서 더 공격적인 매개 변수, 곰 시장에서 보수적인 매개 변수.
위와 같은 다양한 측면을 테스트하고 최적화함으로써 이 전략의 안정성과 수익성을 더욱 향상시킬 가능성이 있습니다.
요약하자면, 이 전략은 TSI 지표의 이중 지수 평형 특성을 활용하여 상대적으로 안정적이고 신뢰할 수있는 주식 거래 전략을 설계합니다. 포지션 크기를 동적으로 조정함으로써 전체 위험 수준을 효과적으로 제어 할 수 있습니다. 이 전략은 단기 및 중장기 거래에 적합하다는 장점을 결합합니다.
물론, 대부분의 양적 거래 전략과 마찬가지로, 이 전략 또한 일부 제한이 있으며, 주로 급격한 시장 변동의 영향에 취약하다는 것을 반영합니다. 또한, 파라미터 선택 및 필터링 기준은 끊임없이 변화하는 금융 시장에서 더 강한 적응력과 수익성을 얻기 위해 추가 테스트와 최적화가 필요합니다.
/*backtest start: 2024-01-06 00:00:00 end: 2024-02-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © shankardey7310 //@version=5 strategy("TSI STOCKS", shorttitle="TSI", overlay=true) initialCapital = input(10000, title="Initial Capital") riskPercent = input(1, title="Risk Percentage") / 100 longLength = input(12, title="Long Length") shortLength = input(9, title="Short Length") signalLength = input(12, title="Signal Length") price = close pc = ta.change(price) double_smooth(src, long, short) => first_smooth = ta.ema(src, long) ta.ema(first_smooth, short) double_smoothed_pc = double_smooth(pc, longLength, shortLength) double_smoothed_abs_pc = double_smooth(math.abs(pc), longLength, shortLength) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) tsi_signal = ta.ema(tsi_value, signalLength) riskAmount = (initialCapital * riskPercent) / close if (tsi_value > tsi_signal and tsi_value[1] <= tsi_signal[1]) strategy.entry("Long", strategy.long) if (tsi_value < tsi_signal and tsi_value[1] >= tsi_signal[1]) strategy.close("Long") plot(tsi_value, title="True Strength Index", color=#2962FF) plot(tsi_signal, title="Signal", color=#E91E63) hline(0, title="Zero", color=#787B86)