모멘텀 통합 지표 전략

저자:차오장, 날짜: 2023-11-06 14:40:26
태그:

img

전반적인 설명

이 전략은 ROC와 SMA 사이의 차이의 합을 계산하여 거래 신호를 생성합니다. 그것은 단기 거래 전략에 속합니다.

전략 논리

전략은 먼저 길이 l와 ROC의 SMA를 계산합니다. 그 다음 닫기 가격과 SMA 사이의 차이 k를 계산합니다. 다음으로 s 일 동안 k를 합쳐서 합을 얻습니다. 합>0이면 길게됩니다. 합<0하면 짧게됩니다.

구체적으로, 코드에서:

  1. 길이 l의 SMA를 계산하면 a를 얻습니다

  2. 길이가 l인 ROC를 계산하면 r가 됩니다

  3. 클로즈 가격과 SMA 사이의 차이를 계산합니다: k = 클로즈 - a.

  4. k를 s일로 합하면 합이 됩니다

  5. 만약 sum>0이라면, 긴 포지션; sum<0이라면, 짧은 포지션.

  6. 길게는 sum<0이고 짧게는 sum>0이 되면 종료합니다.

핵심은 차이 k를 합쳐서 거래 신호에 합의 기호를 사용하는 것입니다. 최근 며칠 동안 k>0이면 가격이 증가하고, 그래서 길게 가십시오. k <0이면 가격이 감소하고, 그래서 짧게 가십시오.

이점 분석

이 간단한 단기 거래 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 사용된 지표는 간단하고 이해하기 쉽습니다.

  2. 지표의 차이에 따라 필터링하면 더 정확한 거래 기회를 찾을 수 있습니다.

  3. 그 차이를 요약하면 단기적 경향을 더 잘 파악할 수 있습니다.

  4. 매개 변수 l와 s는 다른 사이클에 맞게 조정될 수 있습니다.

  5. 논리는 명확하고 수정하고 최적화하기가 쉽습니다.

  6. 빈번한 단기 거래를 위해 높은 자본 활용 효율성.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 단기 거래에서 더 높은 위험, 손실이 가능합니다.

  2. 부적절한 매개 변수는 과도한 거래 또는 놓친 기회로 이어질 수 있습니다.

  3. 트렌드 전환에 적응하기 어렵고, 손해를 멈추지 않는 것은 큰 손실로 이어질 수 있습니다.

  4. 매개 변수들의 빈번한 조정은 거래자의 경험에 크게 의존합니다.

  5. 높은 거래 빈도는 거래 비용과 미끄러짐을 증가시킬 수 있습니다.

해결책:

  1. 상거래 빈도를 낮추기 위해 매개 변수를 적절히 조정합니다.

  2. 트렌드 인디케이터를 추가해서 역전을 확인해 보세요.

  3. 단일 트레이드 손실을 통제하기 위해 스톱 로스를 최적화합니다.

  4. 경험에 대한 의존도를 낮추기 위해 자동 매개 변수 최적화를 추가합니다.

  5. 트랜잭션 비용을 낮추기 위해 주문 실행 모델을 최적화합니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 유전 알고리즘과 같은 매개 변수 계산 방법을 최적화하여 매개 변수를 적응시킬 수 있습니다.

  2. 신호 품질을 향상시키기 위해 더 많은 지표와 필터를 추가합니다.

  3. 스톱 로스 전략을 개선해 보세요.

  4. 리스크 포인트 제어와 같은 돈 관리 전략을 최적화하십시오.

  5. 트렌드 추적, 미끄러짐 제어 등과 함께 주문 실행 모델을 최적화

  6. 백테스팅과 자동 최적화 모듈을 추가합니다.

  7. 신호 품질의 양적 평가를 추가합니다.

이러한 최적화로 이 전략은 보다 포괄적이고 지능적이고 안정적이고 제어 가능한 단기 거래 시스템이 될 수 있습니다.

요약

요약하자면, 이 전략은 지표로부터 간단한 신호를 생성하고, 명확한 논리 및 쉬운 구현을 제공합니다. 매개 변수, 스톱 로스, 돈 관리 등에 대한 추가 최적화로 가치있는 양적 거래 전략이 될 수 있습니다. 그러나 어떤 전략도 완벽하지 않습니다. 거래자는 여전히 개인적인 위험 선호도에 따라 합리적으로 적용해야합니다.


/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=662, overlay=false)

l = input(defval=170,title="Length for indicator")
s = input(title="Length of summation",defval=18)
a= sma(close,l)
r=roc(close,l)
k=close-a
sum = 0
for i = 0 to s
    sum := sum + k[i]
//plot(a,color=yellow,linewidth=2,transp=0)
//bc =  iff( sum > 0, white, teal)
//plot(sum,color=bc, transp=20, linewidth=3,style=columns)
//plot(sma(sum,3),color=white)
//hline(0)

inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na

////buyEntry = crossover(source, lower)
////sellEntry = crossunder(source, upper)
if sum>0
    strategy.entry("Long", strategy.long, oca_name="Long",  comment="Long")
else
    strategy.cancel(id="Long")
if sum<0
    strategy.entry("Short", strategy.short, oca_name="Short", comment="Short")
else
    strategy.cancel(id="Short")
strategy.initial_capital = 50000
plot(strategy.equity-strategy.initial_capital-strategy.closedtrades*.25/2, title="equity", color=red, linewidth=2)
hline(0)
//longCondition = sum>0
//exitlong = sum<0

//shortCondition = sum<0
//exitshort = sum>0

//strategy.entry(id = "Long", long=true, when = longCondition)
//strategy.close(id = "Long", when = exitlong)
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong)

//strategy.entry(id = "Short", long=false, when = shortCondition)
//strategy.close(id = "Short", when = exitshort)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)

더 많은