트렌드 포착 전략

저자:차오장, 날짜: 2024-04-26 11:48:28
태그:MASMA

img

전반적인 설명

트렌드 캐처 전략 (Trend Catcher Strategy) 은 트렌드 형성을 탐지하고 트렌드 방향으로 포지션을 개설하는 전략이다. 특정 범위의 가장 높고 가장 낮은 가격 사이의 차이를 해당 범위의 촛불 길이의 합으로 나누는 것으로 리미트 (limit) 라고 불리는 비율 값을 계산한다. 이 값이 100에 가까워질수록 트렌드가 강하다. 이 값이 설정된 한계를 초과하고 이동 평균이 상승할 때 전략은 긴 포지션을 개설한다. 이 값이 설정된 한계를 초과하고 이동 평균이 떨어질 때 전략은 쇼트 포지션을 개설한다. 포지션을 개설한 후에는 가격이 특정 수준에 도달하면 포지션의 일부를 닫고 나머지 포지션을 트렌드가 끝난 것으로 믿는 지점으로 이동한다.

전략 원칙

  1. 특정 범위 내의 가장 높고 가장 낮은 가격의 차이와 그 범위 내의 모든 촛불의 길이의 합을 계산합니다.
  2. 차이점을 촛불 길이의 합으로 나누고 100으로 곱하면 리미트이라는 비율 값을 얻습니다.
  3. 한계가 설정된 값을 초과하고 이동 평균이 상승할 때, 긴 포지션을 열고, 한계가 설정된 값을 초과하고 이동 평균이 감소할 때, 짧은 포지션을 열고,
  4. 포지션을 열고 나면 가격이 수익을 취하는 수준에 도달하면 포지션의 일부를 닫고 나머지 포지션을 스톱 로스 수준으로 이동합니다.
  5. 이동평균이 하향을 넘어가면, 긴 포지션을 닫습니다. 이동평균이 상향을 넘어가면, 짧은 포지션을 닫습니다.

전략적 장점

  1. 이 전략 은 트렌드 형성을 탐지 하기 위한 독특한 방법 을 사용 합니다. 트렌드의 강도를 결정 하기 위한 한계 값을 계산 함으로써 트렌드의 시작 에 포지션을 개설 하는 데 도움이 됩니다.
  2. 포지션 개설 후 전략은 포지션의 일부를 닫고 나머지 포지션의 스톱 로스 수준을 이동함으로써 위험을 제어합니다.
  3. 이 전략은 트렌드의 끝을 결정하기 위해 이동평균의 상승과 하락 교차점을 사용하며, 이는 적시에 포지션을 닫는 데 도움이 됩니다.

전략 위험

  1. 이 전략은 트렌드의 시작에서 포지션을 개설합니다. 트렌드가 지속될 수 없다면 손실을 초래할 수 있습니다.
  2. 이 전략은 고정된 수익을 취하고 손실을 멈추는 수준을 사용하며, 어떤 경우에는 충분히 유연하지 않을 수 있습니다.
  3. 이 전략은 트렌드를 결정하기 위해 이동평균만을 사용하지만, 트렌드 기회를 놓칠 수도 있습니다.

전략 최적화 방향

  1. 트렌드를 결정하고 개설 포지션의 정확성을 향상시키기 위해 MACD 및 RSI와 같은 다른 지표를 사용하는 것을 고려하십시오.
  2. 시장 변동성을 기반으로 수익을 취하고 손실을 멈추는 수준을 역동적으로 조정하여 위험을 더 잘 제어합니다.
  3. 트렌드가 확정된 후에야 포지션을 개설하는 것을 고려하여 트렌드 초기의 위험을 줄이십시오.

요약

트렌드 캐처 전략은 트렌드 형성을 탐지하고 트렌드 방향으로 포지션을 개설하는 독특한 방법을 사용합니다. 트렌드의 강도를 결정하기 위해 한계 값을 계산하고 트렌드의 끝을 결정하기 위해 이동 평균의 교차를 사용합니다. 전략은 포지션의 일부를 닫고 포지션을 열고 스톱 로스 수준을 이동함으로써 위험을 제어합니다. 그러나 전략은 트렌드의 시작에서 포지션을 열 때 특정 위험에 직면 할 수 있습니다. 고정된 수익 및 손실을 멈추는 수준을 사용하여 충분히 유연하지 않을 수 있으며, 트렌드를 결정하기 위해 이동 평균만을 사용하여 일부 기회를 놓칠 수 있습니다. 미래에 우리는 다른 지표를 도입하고, 동적으로 수익 및 스톱 로스 수준을 조정하고, 전략을 최적화하기 위해 트렌드가 확인 된 후에만 포지션을 개설하는 것을 고려 할 수 있습니다.


/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 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/
// © faytterro

//@version=5
strategy("Trend Catcher Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
len = input.int(10)
tp = input.float(2.5, step = 0.1)
sl = input.float(2.5, step = 0.1)
malen = input.int(5)
limit = input.int(50)
ma = ta.sma(close,malen)
sum = 0.0
for i = 0 to len-1
    sum := sum + high[i]-low[i]
frs = 100*(ta.highest(high,len)-ta.lowest(low,len))/sum
//hline(50)
//plot(frs, color = color.white)
l = ta.crossover(frs,limit) and ma>ma[1]
s = ta.crossover(frs,limit) and ma<ma[1]
cl = ma<ma[1]
cs = ma>ma[1]
qty_balance=input.int(50, maxval = 100)
if (l)
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("exit long", "My Long Entry Id", qty_percent = qty_balance, limit = close*(100+tp)/100, stop = close*(100-sl)/100)

if (s)
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("exit short", "My Short Entry Id", qty_percent = qty_balance, limit = close*(100-tp)/100, stop = close*(100+sl)/100)

if (cl)
    strategy.close("My Long Entry Id")
if (cs)
    strategy.close("My Short Entry Id")

l:= l and strategy.opentrades<1
s:= s and strategy.opentrades<1
transp = strategy.opentrades>0? 0 : 100
pma=plot(ma, color = ma<ma[1]? color.rgb(255, 82, 82, transp) : color.rgb(76, 175, 79, transp))
price = open/2+close/2
pprice = plot(price, display = display.none)
fill(pma,pprice, color = ma<ma[1]? color.rgb(255, 82, 82, transp+90) : color.rgb(76, 175, 79, transp+90))

spm=plot(ta.valuewhen(s,close,0), color = (strategy.opentrades>0 and ma<ma[1] and ma[1]<ma[2])? color.white : color.rgb(1,1,1,100), offset=1)
lpm=plot(ta.valuewhen(l,close,0), color = (strategy.opentrades>0 and ma>ma[1] and ma[1]>ma[2])? color.white : color.rgb(1,1,1,100), offset=1)

ltp=plot(ta.valuewhen(l,close,0)*(100+ta.valuewhen(l,tp,0))/100,  color = (strategy.opentrades>0 and ma>ma[1] and ma[1]>ma[2])? color.green : color.rgb(1,1,1,100), offset=1)
lsl=plot(ta.valuewhen(l,close,0)*(100-ta.valuewhen(l,sl,0))/100,  color = (strategy.opentrades>0 and ma>ma[1] and ma[1]>ma[2])? color.red : color.rgb(1,1,1,100), offset=1)

stp=plot(ta.valuewhen(s,close,0)*(100-ta.valuewhen(s,tp,0))/100, color = (strategy.opentrades>0 and ma<ma[1] and ma[1]<ma[2])? color.green : color.rgb(1,1,1,100), offset=1)
ssl=plot(ta.valuewhen(s,close,0)*(100+ta.valuewhen(s,sl,0))/100, color = (strategy.opentrades>0 and ma<ma[1] and ma[1]<ma[2])? color.red : color.rgb(1,1,1,100), offset=1)
fill(stp,spm, color = (strategy.opentrades>0 and ma<ma[1] and ma[1]<ma[2])? color.rgb(76, 175, 79, 90) : color.rgb(1,1,1,100))
fill(ssl,spm, color = (strategy.opentrades>0 and ma<ma[1] and ma[1]<ma[2])? color.rgb(255, 82, 82, 90) : color.rgb(1,1,1,100))
fill(ltp,lpm, color = (strategy.opentrades>0 and ma>ma[1] and ma[1]>ma[2])? color.rgb(76, 175, 79, 90) : color.rgb(1,1,1,100))
fill(lsl,lpm, color = (strategy.opentrades>0 and ma>ma[1] and ma[1]>ma[2])? color.rgb(255, 82, 82, 90) : color.rgb(1,1,1,100))

관련

더 많은