이 전략은 트렌드를 포착하기 위해 가장 높은 가격 이상에서 가격을 깨고 가장 낮은 가격 아래로 갈 때 길게 이동합니다.
이 전략은 주로 가중화 이동 평균 방법을 사용하여 명백한 상승 또는 하락 추세가 있는지 여부를 결정합니다. 구체적으로, 특정 기간 동안 가장 높은 가격과 가장 낮은 가격을 기록합니다. 실제 거래 가격이 기록 된 최고 가격을 초과하면 상승 추세가 발생했으며 길게 갈 것이라고 판단됩니다. 실제 거래 가격이 기록 된 최저 가격보다 낮으면 하락 추세가 발생했으며 짧게 갈 것이라고 판단됩니다.
롱과 쇼트의 오픈 가격은
특히 전략의 주요 논리는 다음과 같습니다.
이 로직 루프를 통해, 그것은 가격의 상승 및 하락 추세를 포착하고 추세를 따라 할 수 있습니다.
이 전략의 가장 큰 장점은 매개 변수를 조정함으로써, 트렌드 방향에 대한 수동 판단의 필요없이 자동으로 가격 추세를 파악할 수 있다는 것입니다. 매개 변수가 적절하게 설정되는 한, 암호화폐의 가격 변동을 자동으로 추적 할 수 있습니다.
또한 이 전략은 양적 거래에 매우 적합하며 자동화 된 주문 배치를 쉽게 달성 할 수 있습니다. 수동 조작 없이 감정 거래의 위험을 줄이고 거래 효율성을 크게 향상시킵니다.
마지막으로, 이 전략은 또한 매개 변수를 조정함으로써 수익을 극대화 할 수 있습니다. 다른 ENTRY 및 EXIT 매개 변수를 테스트함으로써 수익을 극대화하기위한 최적 매개 변수를 찾을 수 있습니다.
이 전략의 가장 큰 위험은 부적절한 매개 변수 설정이 과도하게 빈번한 거래, 거래 수수료 증가 및 슬리퍼지 손실로 이어질 수 있다는 것입니다. ENTRY가 너무 낮고 EXIT가 너무 높게 설정되면 잘못된 거래 신호가 쉽게 생성됩니다.
또한, 부적절한 매개 변수 조정 또한 가격 트렌드를 적시에 파악하지 못하여 거래 기회를 놓칠 수 있습니다. 이것은 최적의 매개 변수를 찾기 위해 많은 백테스팅을 필요로합니다.
마지막으로, 이 전략은 잘못된 거래 신호를 생성 할 수있는 단기 시장 소음에 너무 민감합니다. 거래 시간 사이클 매개 변수를 적절하게 설정함으로써 이것을 피해야합니다.
이 전략의 다음 측면은 더 이상 최적화 될 수 있습니다:
스톱 로스 로직을 추가합니다. 이것은 손실이 특정 비율을 초과하면 더 큰 손실을 피할 수 있습니다.
이동 평균, KDJ와 같은 기술 지표 필터를 추가하여 단기 소음으로 인해 너무 많은 거래를 피하기 위해 전반적인 추세를 판단합니다.
매개 변수 설정 논리를 최적화 합니다. 적응 변화 메커니즘은 정적 설정보다는 시장 조건에 따라 조정할 수 있도록 입문 및 출입 매개 변수에 설정할 수 있습니다.
기계 학습을 사용하여 최적의 매개 변수를 훈련하십시오. 대규모 역사 데이터 훈련을 통해 현재 시장 환경에 최적의 ENTRY 및 EXIT 설정을 얻으십시오.
이 전략의 가장 큰 장점은 가격 트렌드를 포착함으로써 자동화 된 거래를 달성한다는 것입니다. 이는 거래에 대한 인간의 감정의 영향을 줄이고 위험을 낮추고 효율성을 향상시킬 수 있습니다. 동시에 매개 변수를 조정하여 최적의 수익 지점을 찾을 수 있습니다.
전략의 주요 위험은 잘못된 매개 변수 설정 및 시장 소음에 대한 과민성입니다. 이것은 중지 손실, 지표 필터, 적응 매개 변수 최적화 및 기타를 통해 개선되어야합니다.
전체적으로, 이것은 양적 및 자동화 거래에 적합한 전략에 따라 간단하고 효과적인 추세입니다. 지속적인 최적화로 전략의 안정성이 더 향상 될 수 있습니다.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © JstMtlQC //@version=4 strategy("Trend Following Breakout",calc_on_order_fills=true,calc_on_every_tick =false, overlay=true, initial_capital=2000,commission_value=.1,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) /////////////// INPUT ENTRY EXIT entry= input(100, "ENTRY H/L") exit= input(50, "EXIT H/L") /////////////// Backtest Input FromYear = input(2015, "Backtest Start Year") FromMonth = input(1, "Backtest Start Month") FromDay = input(1, "Backtest Start Day") ToYear = input(2999, "Backtest End Year") ToMonth = input(1, "Backtest End Month") ToDay = input(1, "Backtest End Day") /////////////// Backtest Setting start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false /////////////// BUY OPEN PLOT highestpricelong = highest(high,entry)[1] plot(highestpricelong, color=color.green, linewidth=2) /////////////// BUY CLOSE PLOT lowestpricelong = lowest(high,exit)[1] plot(lowestpricelong, color=color.green, linewidth=2) /////////////// SHORT OPEN PLOT lowestpriceshort = lowest(low,entry)[1] plot(lowestpriceshort, color=color.red, linewidth=2) /////////////// SHORT CLOSE PLOT highestpriceshort = highest(low,exit)[1] plot(highestpriceshort, color=color.red, linewidth=2) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// CONDITION LONG SHORT ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// SHORT entryshort= crossunder(close, lowestpriceshort) exitshort= crossover(close,highestpriceshort) /////////////// LONG exitlong= crossover(close, lowestpricelong) entrylong= crossover(close,highestpricelong) /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////// LONG and SHORT ORDER ////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// /////////////// LONG if (entrylong) strategy.entry("LongEntry", strategy.long, when = window()) if (exitlong or entryshort) strategy.close("LongEntry", when=window()) /////////////// SHORT if (entryshort) strategy.entry("short", strategy.short, when = window()) if (exitshort or entrylong) strategy.close("short", when=window())