탈출 전략 을 극복 하는 것

저자:차오장, 날짜: 2023-10-12 16:47:55
태그:

전반적인 설명

이동평균 크로스오버 전략은 매우 일반적인 수치적 거래 전략이다. 이동평균의 황금 십자가와 죽음의 십자가를 사용하여 트렌드와 수익을 결정한다. 단기 이동평균이 장기 이동평균을 넘을 때 상승세를 알리고 긴 포지션을 취할 수 있다. 단기 이동평균이 장기 이동평균을 넘을 때 하락세를 알리고 짧은 포지션을 취할 수 있다.

전략 논리

이 전략은 입력 및 출구 지점을 결정하기 위해 이동 평균의 황금 십자 및 죽음의 십자에 기반합니다. 코드는 두 개의 부울 입력 매개 변수를 사용합니다.upOrDown그리고longOrShort장기 또는 단기 결정percentInput가격 변화의 기준 비율을 정하는 것closePositionDays포지션을 보유할 수 있는 날 수를 설정합니다.

핵심 논리는: 어제와 비교하여 오늘의 증가/감소를 계산합니다. 입력 임계 비율에 도달하면 거래 신호가 활성화됩니다. 긴 신호라면, 어제와 비교하여 오늘의 가격이 임계보다 증가하면, 긴 신호입니다. 짧은 신호라면, 어제와 비교하여 오늘의 가격이 임계보다 감소하면, 짧은 신호입니다.

긴 / 짧은 후에, 입점 날과 다음 4 일 차트에서 색으로 표시됩니다. 포지션은 4 일 후에 자동으로 닫을 것입니다.

장점

  • 유동 평균 크로스오버를 사용하여 트렌드를 결정하는 것은 성숙하고 신뢰할 수 있는 방법입니다.
  • 단순하고 명확한 전략 논리, 이해하기 쉽고 실행하기 쉬운
  • 주파수는 매개 변수를 조정하여 제어 할 수 있습니다.
  • 자동 스톱 로스 메커니즘은 위험을 효과적으로 제어합니다.

위험성

  • 이동 평균은 늦은 효과를 가지고 있으며 빠른 가격 변화의 가장 좋은 시기를 놓칠 수 있습니다.
  • 중요한 가격 변동이 단기간에 발생할 수 있으며 불필요한 신호를 생성합니다.
  • 부적절한 매개 변수 설정은 전략 성과에 영향을 줄 수 있습니다.
  • 예상치 못한 사건의 영향에 효과적으로 대응할 수 없습니다.

위험 관리

  1. 이동 평균 매개 변수를 최적화, 더 긴 기간은 소음을 필터하는 데 도움이됩니다
  2. 불필요한 거래를 줄이기 위해 임계 비율을 높여
  3. 단일 손실을 통제하기 위해 다른 유지 기간을 테스트합니다.
  4. 신호를 추가로 확인하기 위해 다른 지표와 결합

최적화 방향

  • 더 민감하게 만들기 위해 SMA 대신 EMA, DMA를 사용하는 것을 고려하십시오
  • 평균을 깨는 경우 Stop Loss 메커니즘을 추가합니다.
  • 다른 기술 지표 MACD와 같이 추가, 조합을 위해 KDJ, 승률을 향상
  • 매개 변수를 자동으로 최적화하는 기계 학습 방법을 시도
  • 출입 및 출입 시기를 최적화합니다.

요약

이동평균 크로스오버 전략은 매우 간단하고 실용적인 양적 거래 전략이다. 단기 및 장기적인 트렌드 사이의 관계를 판단함으로써 자산 가격의 트렌딩 성격으로부터 이익을 얻는다. 이 전략은 명확한 논리로 구현하기 쉽고 많은 양적 거래 전략의 기초를 형성한다. 우리는 매개 변수 조정 및 최적화를 통해 더 나은 성능을 얻을 수 있다. 그러나 우리는 또한 위험을 관리하고 오용을 피해야 한다.


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

//@version=3
//  Created by Leon Ross

strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, 
  pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, 
  calc_on_every_tick=true, initial_capital=100000)
  
//Inputs
longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false
upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day
percentInput = input(title="Percent", type=float, defval=4.5)
closePositionDays = input(title="How Many Days to Close Position", defval=4)

//Conditions
//percentUpValue = (close / close[1]) - 1
//percentUp = percentUpValue >= (percentInput/100.0)
//upConditions = percentUp
//percentDownValue = 1- (close / close[1])
//percentDown = percentDownValue >= (percentInput/100.0)
//downConditions = percentDown
upValue = (close / close[1]) - 1
downValue = 1 - (close / close[1])
allConditions = if(upOrDown)
    upValue >= (percentInput/100.0)
else
    downValue >= (percentInput/100.0)
    
//Plots
bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70)
bgcolor(allConditions ? silver : na, transp=70, offset=1)
bgcolor(allConditions ? silver : na, transp=70, offset=2)
bgcolor(allConditions ? silver : na, transp=70, offset=3)
bgcolor(allConditions ? silver : na, transp=70, offset=4)
//bgcolor(downConditions == 1 ? red : na, transp=70)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3)
//bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4)

//Entires
if(longOrShort)
    strategy.entry(id = "Long", long = true, when = allConditions) 
else
    strategy.entry(id = "Short", long = false, when = allConditions)

//Exits
if (barssince(allConditions) == closePositionDays)
    if(longOrShort)
        strategy.close("Long")
    else
        strategy.close("Short")




더 많은