이동평균 시스템에 기반한 그리드 거래 전략

저자:차오장, 날짜: 2024-01-03 17:18:22
태그:

img

전반적인 설명

이 전략은 서로 다른 매개 변수와 함께 JMA 이동 평균의 여러 세트를 통해 시장 트렌드를 판단하여 그리드 거래 시스템을 구축하기 위해 이동 평균 이론을 사용합니다. 시장에서 장기적인 트렌드 반전 중에 이익을 포착하는 것을 목표로합니다.

전략 논리

  1. 1-20 기간 JMA 이동 평균의 조합을 사용하여 시장 트렌드를 결정합니다. 짧은 기간 MA가 긴 기간 MA보다 높을 때 상승 추세로 판단되며 반대로 하락 추세로 판단됩니다.

  2. 짧은 MA가 긴 MA보다 낮거나 높을 때 트렌드 반전 지점에서 그리드 거래를 개시하십시오. 상승 추세 동안 단위 포지션을 점차적으로, 하락 추세 동안 긴 포지션을 설정하십시오.

  3. 촛불의 색을 기준으로 필터 옵션 - 빨간 촛불에서만 구매하고 녹색 촛불에서만 판매합니다. 그렇지 않으면 색을 무시하고 트렌드 역전에서만 거래합니다.

  4. 출구는 전략 기간이 끝나면 스톱 로스를 추적하거나 시간 기반의 출구입니다.

이점 분석

  1. 트렌드를 결정하기 위해 MA 시스템을 사용하면 장기적인 트렌드 반전을 효과적으로 식별 할 수 있습니다.

  2. 그리드 트레이딩은 명확한 트렌드가 없는 범위 시장에서 수익을 얻을 수 있으며, 위험을 통제하기 위해 스톱 로스를 사용합니다.

  3. 사용자 정의 가능한 JMA 매개 변수, 다양한 기간에 최적화 할 수 있습니다. 높은 유연성.

  4. 촛불 필터로 잘못된 신호에 속지 않도록 합니다.

위험 분석

  1. 명확한 트렌드가 없는 높은 화이트 시가 시장은 더 높은 스톱 로스 위험을 가지고 있습니다.

  2. MA 시스템에서 판단 오류는 잘못된 거래 신호로 이어질 수 있습니다.

  3. 촛불 필터는 몇몇 거래 기회를 놓칠 위험이 있습니다.

  4. 그리드 간격이 너무 넓으면 수익이 충분하지 않습니다. 너무 좁으면 너무 많은 위치와 높은 비용이 발생할 수 있습니다.

최적화 방향

  1. 다른 제품에 대한 최적의 JMA MA 조합을 찾기 위해 더 많은 매개 변수 조합을 테스트합니다.

  2. 신호 품질을 향상시키기 위해 BOLL 대역, KD 등과 같은 다른 필터를 통합하십시오.

  3. 그리드 간격, 입구 롯 등 그리드 구성 최적화

  4. 더 많은 스톱 로스 방법을 고려하십시오. 간격 기반, 후속 스톱 등.

결론

이 전략은 JMA 이론을 사용하여 반전을 판단하고 장기적인 트렌드 변화로부터 이익을 얻기 위해 전환점에 그리드 거래를 개설합니다. 매개 변수 최적화를 통해 성능을 더욱 향상시킬 수 있습니다. 전반적으로 중장기 보유가 점차 트렌드 움직임에 따라 추적하고 이익을 얻는 데 적합합니다.


/*backtest
start: 2022-12-27 00:00:00
end: 2024-01-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's Fishnet Strategy", shorttitle = "Fishnet str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
usecf = input(false, defval = false, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//JMA
jmax(src, len) =>
    beta = 0.45*(len-1)/(0.45*(len-1)+2)
    alpha = pow(beta, 3)
    L0=0.0, L1=0.0, L2=0.0, L3=0.0, L4=0.0
    L0 := (1-alpha)*src + alpha*nz(L0[1])
    L1 := (src - L0[0])*(1-beta) + beta*nz(L1[1])
    L2 := L0[0] + L1[0]
    L3 := (L2[0] - nz(L4[1]))*((1-alpha)*(1-alpha)) + (alpha*alpha)*nz(L3[1])
    L4 := nz(L4[1]) + L3[0]
	L4

ma01 = jmax(close, 10)
ma02 = jmax(close, 20)
ma03 = jmax(close, 30)
ma04 = jmax(close, 40)
ma05 = jmax(close, 50)
ma06 = jmax(close, 60)
ma07 = jmax(close, 70)
ma08 = jmax(close, 80)
ma09 = jmax(close, 90)
ma10 = jmax(close, 100)
ma11 = jmax(close, 110)
ma12 = jmax(close, 120)
ma13 = jmax(close, 130)
ma14 = jmax(close, 140)
ma15 = jmax(close, 150)
ma16 = jmax(close, 160)
ma17 = jmax(close, 170)
ma18 = jmax(close, 180)
ma19 = jmax(close, 190)
ma20 = jmax(close, 200)

trend = 0
trend := ma01 > ma20 ? 1 : ma01 < ma20 ? -1 : trend[1]
col = trend == 1 ? #00FF7F : #DC143C

plot(ma01, transp = 0, color = col)
plot(ma02, transp = 0, color = col)
plot(ma03, transp = 0, color = col)
plot(ma04, transp = 0, color = col)
plot(ma05, transp = 0, color = col)
plot(ma06, transp = 0, color = col)
plot(ma07, transp = 0, color = col)
plot(ma08, transp = 0, color = col)
plot(ma09, transp = 0, color = col)
plot(ma10, transp = 0, color = col)
plot(ma11, transp = 0, color = col)
plot(ma12, transp = 0, color = col)
plot(ma13, transp = 0, color = col)
plot(ma14, transp = 0, color = col)
plot(ma15, transp = 0, color = col)
plot(ma16, transp = 0, color = col)
plot(ma17, transp = 0, color = col)
plot(ma18, transp = 0, color = col)
plot(ma19, transp = 0, color = col)
plot(ma20, transp = 0, color = col)

//Trading
lot = 0.0
lot := strategy.equity / close * capital / 100

if trend == 1 and (close < open or usecf == false)
    strategy.entry("Long", strategy.long, needlong ? lot : na)

if trend == -1 and (close > open or usecf == false)
    strategy.entry("Short", strategy.short, needshort ? lot : na)
    

더 많은