이 문서에서는 주로
이 전략의 거래 논리는 매우 간단하고 명확합니다. 구체적으로 다음 단계를 포함합니다.
14주기 SMA와 28주기 SMA의 크로스오버를 길고 짧은 신호로 사용한다. 14주기 SMA가 28주기 SMA를 넘으면 길게 가. 14주기 SMA가 28주기 SMA를 넘으면 짧게 가.
ATR 지표를 계산하고 동적 취익 지위를 얻기 위해 인수를 곱합니다. 예를 들어, ATR 길이를 7로 설정하고, 곱셈을 1.5로 설정하면 동적 취익 채널의 폭은 7 기간 ATR의 1.5배입니다.
포지션 방향이 길었을 때, 높은 가격과 동적 취득 채널 너비를 더하여 긴 취득 라인을 얻습니다. 포지션 방향이 짧을 때, 동적 취득 채널 너비를 낮은 가격에서 빼어 짧은 취득 라인을 얻습니다.
가격이 이 동적 인 영업 라인을 초과 한 다음, 즉시 출구하기 위해 영업을 취합니다. 이것은 갑작스러운 강력한 가격 움직임 후 1-2 바 이내에 이익을 얻을 수 있습니다.
위의 단계를 통해 이 전략은 수익 추적 및 빠른 수익 취득의 간단하지만 효율적인 효과를 달성합니다. ATR 채널은 수익 취득 라인에 대한 동적 조정 기능을 제공하며 새로 추가 된 1 바 조건은 갑작스러운 유리한 시장 조건에서만 수익 취득 라인이 활성화되도록합니다. 이것은 수익 취득으로 인한 조기 출출을 효과적으로 줄일 수 있습니다.
이 아이디어는 간단하고 명확하며, 이해하기 쉽고 실행하기 쉽고, 초보자도 배울 수 있습니다.
동적 ATR 취득은 자동으로 수익을 추적하고 테이블에 수익을 남기지 않습니다.
1바르 높음/낮음 조건을 추가하면 더 작은 움직임에서 수익을 취하는 것을 막을 수 있습니다.
ATR 길이와 곱셈은 이윤 취득 정도를 조정할 수 있습니다.
유리한 가격 움직임을 잡기 위해 빨리 빠져 나갈 수 있습니다.
매우 확장 가능하고 이 틀을 기반으로 다른 스톱 로스/이익 취득 전략을 쉽게 구현할 수 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
갑작스러운 ATR 확장으로 인해 사전에 수익을 취합니다.
시장 소음을 효과적으로 필터링 할 수 없습니다. 잘못된 신호에 유연합니다.
결정에 있어서 SMA 크로스오버에만 의존하는 것, 복잡한 시장 상황에서는 효과적이지 않다.
손실을 효과적으로 제한할 수 있는 스톱 로스 메커니즘이 없습니다.
기본 매개 변수는 모든 제품에 적합하지 않을 수 있습니다. 최적화가 필요합니다.
위의 위험을 줄이기 위해 우리는 다음 측면에서 최적화 할 수 있습니다:
잘못된 신호를 제거하기 위해 다른 지표에 기반한 필터 규칙을 추가합니다.
트레이드당 손실을 엄격하게 통제하기 위해 스톱 로스 전략을 추가합니다.
워크 포워드 분석을 사용하여 매개 변수를 최적화합니다.
각기 다른 제품에 대한 매개 변수를 별도로 최적화합니다.
더 똑똑한 결정을 위한 기계 학습 모델을 늘려라.
위험 분석을 바탕으로 최적화 방향은 주로 다음을 포함합니다.
신호 필터를 추가합니다: 소음을 피하기 위해 신호 후에 MACD, 볼린거 밴드 등과 같은 지표에 기반한 필터 규칙을 추가합니다.
스톱 로스 라인을 추가합니다: ATR 또는 트래일링 스톱을 기준으로 한 스톱 로스 라인을 트레이드 로스 당 컨트롤에 추가합니다.
매개 변수 최적화: 기계 학습을 사용하여 ATR 길이, ATR 곱셈과 같은 매개 변수를 최적화합니다.
위험 조정: 각기 다른 상품에 기반한 위험 매개 변수를 조정합니다.
핵융합 모델: 이 전략을 기계 학습과 신경망과 결합하여 정확성을 향상시킵니다.
수동 개입: 결정적인 순간에 손동작으로 수익/손실 단속을 허용합니다.
위의 방향으로 최적화하면 전략의 수익성과 안정성이 크게 향상 될 수 있습니다.
요약하자면,
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 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/ // © Peter_O //@version=5 strategy("TrailingTakeProfit example", overlay=true, margin_long=100, margin_short=100, default_qty_value = 1, initial_capital = 100) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if longCondition strategy.entry("Long", strategy.long, comment="long", alert_message="long") if shortCondition strategy.entry("Short", strategy.short, comment="short", alert_message="short") atr_length=input.int(7, title="ATR Length") atr_multiplier = input.float(1.5, title="ATR Multiplier") atr_multiplied = atr_multiplier * ta.atr(atr_length) ttp_top_bracket = strategy.position_size>0 ? high[1]+atr_multiplied : na ttp_bottom_bracket = strategy.position_size<0 ? low[1]-atr_multiplied : na plot(ttp_top_bracket, title="ttp_top_bracket", color=color.lime, style=plot.style_linebr, offset=1) plot(ttp_bottom_bracket, title="ttp_bottom_bracket", color=color.red, style=plot.style_linebr, offset=1) strategy.exit("closelong", from_entry="Long", limit=ttp_top_bracket, alert_message = "closelong") strategy.exit("closeshort", from_entry="Short", limit=ttp_bottom_bracket, alert_message = "closeshort") // var table alertsDisplayTable = table.new(position.top_right, 1, 5, color.black) // if barstate.islastconfirmedhistory // table.cell(alertsDisplayTable, 0, 0, "TradingConnector-compatible alerts sent", text_color=color.white) // table.cell(alertsDisplayTable, 0, 1, "at Long Entry: long", text_color=color.white) // table.cell(alertsDisplayTable, 0, 2, "at Short Entry: short", text_color=color.white) // table.cell(alertsDisplayTable, 0, 3, "at Long Exit: closelong", text_color=color.white) // table.cell(alertsDisplayTable, 0, 4, "at Short Exit: closeshort", text_color=color.white)