피보트 역전 단장만 업그레이드 - 이중 모멘텀 전략

저자:차오장, 날짜: 2023-12-25 17:47:11
태그:

img

전반적인 설명

이 전략은 주축점 반전과 최소 제곱 이동 평균 전략의 장점을 결합한 장기 단위 양적 거래 전략이다. 황소 시장 중 주요 추세를 따라가며 주축점 상부 레일을 관찰한 후 반전 신호를 결정하여 장기간 거래한다. 동시에, 긴 포지션을 개척하기 전에 폐쇄 가격이 최소 제곱 이동 평균보다 높아야 전략이 더 안정화된다.

전략 논리

이 전략은 피보트 포인트 역전 및 최소 평방 이동 평균 전략을 통합합니다. 피보트 포인트 역전 전략은 상위 및 하위 레일을 얻기 위해 일정 수의 거래 날에 걸쳐 가장 높고 가장 낮은 가격을 계산합니다. 가격이 상위 레일을 통과하면 역전 신호로 판단됩니다. 가장 작은 평방 이동 평균은 가격을 더 잘 추정 할 수있는 트렌드 판단 지표입니다. 피보트 포인트 상선이 형성되고 폐쇄 가격이 최소 평방 라인보다 높을 때이 전략은 길게 간다.

특히, 전략은 먼저 상위 및 하위 피보트 포인트 레일을 얻기 위해 마지막 3 바의 가장 높은 가격과 마지막 16 바의 가장 낮은 가격을 계산합니다. 상위 레일이 형성되면 길게 간다. 다음 하위 레일이 형성되면 포지션을 닫습니다. 동시에, 긴 포지션을 열기 전에 폐쇄 가격이 20 일 최소 제곱 이동 평균보다 높아야합니다.

장점

  1. 더 안정적이고 신뢰할 수 있는 거래 결정을 위한 두 가지 전략의 강점을 결합합니다.

  2. 피보트 포인트 전략은 반전 지점을 판단하고, LSMA는 가짜 브레이크를 필터링하여 거래 위험을 줄여줍니다.

  3. 대부분의 사람들의 심리적 기대에 부합하는

  4. 간단하고 명확한 전략 논리, 이해하기 쉽고 최적화

  5. 중장기 거래에 적합한 중간 거래 빈도

위험 분석

  1. 급격히 감소하는 기회를 잡지 못하고

  2. 어떤 지연이 존재하고, 상승 기회를 놓칠 수 있습니다.

  3. 시장 트렌드가 역전될 때 더 큰 손실

해결책:

  1. 적당하게 계산 주기를 단축하여 지연을 줄이십시오.

  2. 참여를 최적화하기 위해 MA 매개 변수를 조정

  3. 단일 손실을 줄이기 위해 중지 손실을 추가

최적화 방향

  1. 정확도를 높이기 위해 여러 트렌드 지표를 추가합니다.

  2. 머신러닝 예측을 포함해서 의사결정을 하는 것

  3. 포지션 크기를 제어하기 위해 변동성 지표를 결합합니다.

  4. 승률을 높이기 위해 매개 변수를 최적화

  5. 안정성을 확인하기 위해 더 긴 시간 프레임 데이터를 테스트

요약

이 전략은 트렌드 반전을 판단하는 동안 리스크를 제어하기 위해 피보트 포인트 역전 및 LSMA 전략의 장점을 통합합니다. 이해하기 쉽고 테스트하기 위해 간단한 구조로, 초보자 양자가 배우고 연습하기에 완벽합니다. 그러나 길게 측면만 접근하면 시장 하락에서 이익을 얻는 것을 방지합니다. 더 나은 성능을 위해 더 많은 지표와 기계 학습 최적화를 도입함으로써 안정성과 추적 능력의 추가 개선이 달성 될 수 있습니다.


/*backtest
start: 2022-12-18 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//@author exlux99

strategy(title = "Pivot Reversal Upgraded long only", overlay = true,  pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.1)
/////////////
//time

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
//

length = input(title="Length MA", type=input.integer, defval=20)
offset = 0//input(title="Offset", type=input.integer, defval=0)
src = input(close, title="Source")
lsma = linreg(src, length, offset)

//LSMA
leftBars = input(3)
rightBars = input(16)
swh = pivothigh(leftBars, rightBars)
swl = pivotlow(leftBars, rightBars)
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond and time_cond? true : (le[1] and high > hprice ? false : le[1])
//leverage
multiplier=input(1.0, step=0.5)
g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1.0, step = 0.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)

//entry
strategy.entry("long", strategy.long,c, when=le and close > lsma, comment="long", stop=(hprice + syminfo.mintick) * multiplier)

    
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])
strategy.close("long", when=se)




더 많은