
이 전략은 가격의 돌파점을 설정하는 고점과 낮은 점을 설정하여 암호화폐 가격의 추세를 추적하는 것을 가능하게 한다. 가격이 최고점을 돌파할 때 더 많이 하고, 가격이 최저점을 돌파할 때 공백을 만들어, 추세를 잡는 것을 가능하게 한다.
이 전략은 주로 평평한 이동 평균 가중법으로 가격이 명백한 상승 또는 하락 경향을 나타내고 있는지 판단한다. 구체적으로, 그것은 일정 기간 동안의 최고 가격과 최저 가격을 통계적으로 계산하고, 실제 거래 가격이 통계적 최고 가격을 초과할 때, 상승 추세로 판단하고, 더 많은 것을 수행한다. 실제 거래 가격이 통계적 최저 가격보다 낮을 때, 하락 추세로 판단하고, 공백을 수행한다.
더 많은 공백을 취하는 포지션 개시 가격은 입력 파라미터 ENTRY로 설정되며, 매장 가격은 EXIT 파라미터로 설정된다. 재검토 시기는 또한 파라미터로 설정될 수 있다. 따라서 파라미터을 조정하여 최적의 콤보 조합을 찾을 수 있다.
특히, 전략의 주요 논리는 다음과 같습니다.
이 논리 순환을 통해, 가격의 상승과 하락 트렌드를 포착하고, 트렌드 추적을 구현할 수 있다.
이 전략의 가장 큰 장점은 매개 변수를 조정하여 트렌드 방향을 판단하지 않고 가격 흐름을 자동으로 포착할 수 있다는 것입니다. 매개 변수가 적절하게 설정되면 암호화폐의 가격 변동을 자동으로 추적 할 수 있습니다.
또한, 이 전략은 양적 거래에 매우 적합하며, 주문을 쉽게 자동화 할 수 있습니다. 수동 조작이 필요하지 않아 감정 거래의 위험이 줄어들며 거래 효율성을 크게 향상시킬 수 있습니다.
마지막으로, 이 전략은 또한 파라미터를 조정하여 수익을 극대화 할 수 있습니다. 다른 ENTRY 및 EXIT 파라미터를 테스트하여 최적의 파라미터를 찾아 수익을 극대화 할 수 있습니다.
이 전략의 가장 큰 위험은 변수 설정을 잘못하면 너무 빈번한 거래가 발생할 수 있으며 거래 수수료와 슬라이드 포인트 손실이 증가 할 수 있습니다. ENTRY가 너무 낮고 EXIT가 너무 높으면 잘못된 거래 신호가 발생할 수 있습니다.
또한, 만약 변수가 적절하게 조정되지 않는다면, 가격 트렌드를 적시에 잡지 못해 거래 기회를 놓치게 될 수도 있다. 이것은 많은 재검토를 통해 최적의 변수를 찾는 것이 필요하다.
마지막으로, 이 전략은 단기 시장 소음에 너무 민감하여 잘못된 거래 신호를 생성할 수 있다. 이것은 적절한 거래 시간 주기 파라미터를 설정하여 피해야 한다.
이 전략은 다음의 몇 가지 방향으로 계속 개선될 수 있습니다.
손실이 일정 비율로 확대될 때 손실을 멈추고 더 큰 손실을 피하기 위해 손실 논리를 추가한다.
이동 평균과 같은 기술 지표 필터링을 추가하십시오. MA, KDJ와 같은 지표를 사용하여 큰 추세를 판단하고, 단기 잡음이 너무 많은 거래를 초래하지 않도록하십시오.
최적화 변수 설정 논리. ENTRY, EXIT 변수의 적응 변화 메커니즘을 설정할 수 있으며, 정적 설정이 아닌 시장 환경에 따라 변수를 조정할 수 있습니다.
기계 학습 훈련의 최적의 파라미터를 활용한다. 많은 역사 데이터 훈련을 통해 현재 시장 환경에 최적의 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())