주기적 투자 기반의 골든 트렌드 추적 전략

저자:차오장, 날짜: 2023-10-31 15:09:22
태그:

img

전반적인 설명

이 전략은 시장 트렌드 방향을 결정하기 위해 이동 평균 모델을 사용합니다. 상승 추세가 확인되면 시장의 상승 추세를 추적하기 위해 일정 금액으로 장기 포지션을 주기적으로 열 것입니다.

전략 논리

이 전략은 주로 다음과 같은 기술 원칙에 기초합니다.

  1. 시장 트렌드 방향을 결정하기 위해 EMA 라인을 사용하십시오. 빠른 EMA 라인이 느린 EMA 라인을 넘을 때 상승 추세로 판단되며 긴 포지션에 들어갈 준비를합니다.

  2. 입시 시기를 결정하기 위해 MACD 지표를 결합합니다. MACD가 긍정적에서 부정으로 전환되면 구매력이 약화되기 시작한다는 것을 나타냅니다. 따라서 긴 포지션을 입력 할 때입니다.

  3. 한달에 한 번만 출입할 수 있습니다.

  4. 백테스트 기간을 제한하기 위해 시작 날짜와 종료 날짜를 설정할 수 있습니다. 백테스트가 끝나면 전략은 모든 포지션을 닫습니다.

특히, 전략은 먼저 빠른 EMA 라인과 느린 EMA 라인을 계산하고, 시장 트렌드를 결정하기 위해 그 사이의 황금 십자가를 탐지합니다. 동시에 특정 엔트리 포인트를 결정하기 위해 MACD 지표를 계산합니다. 두 가지 기준이 충족되면 긴 신호가 생성됩니다. 한 달에 한 번만 입력하는 규칙에 따라 실제 엔트리 오더가 결정됩니다. 각 엔트리의 자본 금액은 미리 설정 할 수 있습니다. 백테스트가 끝나면 전략은 모든 포지션을 적극적으로 닫습니다.

장점

이것은 다음과 같은 장점을 가진 간단하고 직접적인 트렌드 전략입니다.

  1. 주요 트렌드를 결정하기 위해 EMA 라인을 사용하는 것은 간단하고 실용적입니다. EMA는 가격 변화에 평탄한 영향을 미치며 시장 소음을 효과적으로 필터링 할 수 있습니다.

  2. MACD 지표는 구매력이 약화되기 시작했을 때 전환점을 비교적 정확하게 식별할 수 있으며, 엔트리를 더 안전하게 만듭니다.

  3. 한 달에 한 번만 상승세를 추구하고자 한정하면 상승세를 추구하고 상승세를 죽이는 것을 피할 수 있습니다.

  4. 매월 입력 금액을 사용자 정의 할 수 있도록 허용하면 위치 크기에 유연성을 제공합니다.

  5. 백테스트는 시작 날짜와 종료 날짜를 설정하여 전략 성과를 평가하는 데 사용될 수 있습니다.

  6. 백테스트가 끝나면 자동으로 모든 포지션을 닫아

위험 및 완화

이 전략에는 몇 가지 잠재적인 위험이 있습니다.

  1. 이동 평균을 통한 트렌드 결정은 일시적 인 인기를 놓칠 수 있거나 트렌드 반전에 천천히 반응 할 수 있습니다. 기간은 짧아질 수 있습니다. 또는 더 많은 지표가 추가 될 수 있습니다.

  2. 한 달에 한 번만 입력하면 더 나은 입력 기회를 놓칠 수 있습니다. 최근 최고치를 넘을 때 주파수를 느슨하게하거나 다른 항목을 추가하는 것을 고려하십시오.

  3. 곡선 부착의 위험이 있습니다. 더 많은 매개 변수 조정 공간을 허용하고 시장과 시간대에 걸쳐 견고성을 테스트해야합니다.

  4. 추진력과 과잉 구매의 위험이 있습니다. 너무 큰 포지션을 피하기 위해 월간 입출액을 통제해야합니다.

더 나은 기회

이 전략에 따른 주기적인 투자 경향은 다음 측면에서 더 확장되고 향상될 수 있습니다.

  1. 스톱 로스 로직을 추가하여 하향 반전 패턴이 나타날 때 손실을 적극적으로 절감합니다.

  2. MACD 히스토그램이 상승 추세에 더 많은 노출을 얻기 위해 상승 추세를 나타낼 때 또 다른 구매를 추가하는 것을 고려하십시오.

  3. 동력 강도를 평가하기 위해 지난 달과 현재 달의 새로운 최고치를 비교합니다.

  4. 포지션 사이즈 로직을 추가합니다. 월간 입력 금액은 고정 값보다는 비율에 기반하여 적응이 가능합니다.

  5. 다른 MA 조합과 MACD 매개 변수의 영향을 평가합니다. 최적의 매개 변수 세트를 찾으십시오.

  6. 새로운 최고치를 달성한 후 특정 거리에서 가격을 따라가는 후속 스톱 로스를 추가하여 수익을 실행할 수 있습니다.

요약

이 전략은 주기적 투자 및 이동 평균을 사용하는 간단한 및 깨끗한 트렌드 다음 접근 방식을 나타냅니다. 이해하기 쉽고 구현하기 쉽고 알고리즘 거래를 배우는 좋은 출발점으로 사용됩니다. 그러나 라이브 거래에서 포지션 사이징은 신중하게 제어되어야합니다. 복잡한 시장 조건에 적응하기 위해 전략은 더욱 향상되어야합니다.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-30 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/
// © runescapeyttanic

//@version=4
// strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0)

//INPUTS##################################################################################################################

maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000)
emalength = input(title="EMA Length", type=input.integer,defval=200)

// Make input options that configure backtest date range
startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2020, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=12, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=02, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)

endDate1=endDate-1
//starttag
//startmonat
//MACD########################################################################################################################

fast_length=12
slow_length=26
src=close
col_macd=#0094ff
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma

//EMA Distance CALC########################################################################################################

ma1 =ema(close,emalength)
distFromMean = close - ma1

inDateRange = true

longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange)
longnow=false

if(longCondition and strategy.position_size == 0)
    strategy.entry("My Long Entry Id", strategy.long)
    longnow:=true

if(longCondition and strategy.position_size > 0)
    longnow:=true
    

if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange)
    strategy.entry("My Long Entry Id", strategy.long)

plotchar(minute, "Minuten", "", location = location.top)

plotchar(hour, "Stunden", "", location = location.top)    

plotchar(dayofmonth, "Tage", "", location = location.top)

plotchar(month, "Monat", "", location = location.top)

plotchar(year, "Jahr", "", location = location.top)

plotchar(strategy.position_size, "Positionen", "", location = location.top)

plotchar(longCondition, "Long Condition", "", location = location.top)

if true
    strategy.close_all()

//#########################################################################################################################

plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0)
    1
else
    0
    
plotarrow(series=plotArrow)



더 많은