멀티 타임프레임 전략

저자:차오장, 날짜: 2024-02-19 11:13:22
태그:

img

전반적인 설명

이 전략은 트렌드를 추적하기 위해 여러 시간 프레임에 걸쳐 지표의 동의를 활용합니다. 일일, 10 일, 15 일 및 30 일 시간 프레임이 동시다발적으로 동적 스톱 손실과 함께 상승 또는 하락 신호를 제공 할 때 길거나 짧습니다.

전략 논리

이 전략은 네 가지 시간 프레임 - 일일, 10 일, 15 일 및 30 일 - 을 사용하여 트렌드 방향을 판단합니다. 네 가지 시간 프레임에서 종료 가격이 개시 가격보다 높을 때 상승 신호를 나타냅니다. 네 가지 시간 프레임에서 종료 가격이 개시 가격보다 낮을 때 하락 신호를 나타냅니다.

시그널이 상승하면 길게, 시그널이 하락하면 짧게, KC 채널은 동적 스톱 로스를 위해 사용됩니다.

특히, 전략은 트렌드 방향을 결정하기 위해 다른 시간 프레임에서 개시 가격과 종료 가격을 비교합니다. 종료 가격이 개시 가격보다 높으면 시간 프레임은 상승으로 간주되고 녹색으로 표시됩니다. 종료 가격이 개시 가격보다 낮다면 시간 프레임은 하락으로 간주되고 빨간색으로 표시됩니다.

모든 네 시간 프레임이 상승 신호에 동의 할 때 전략은 긴 포지션을 열 것입니다. 모든 네 시간 프레임이 하락 신호에 동의 할 때 전략은 짧은 포지션을 열 것입니다. 스톱 로스를 치거나 트렌드가 역전되면 종료됩니다.

장점

  1. 트렌드를 확인하기 위해 여러 시간 프레임을 사용하면 잘못된 브레이크오프를 효과적으로 필터하고 트렌드 방향을 결정할 수 있습니다.

  2. 동적 스톱 로즈는 자본 보호를 극대화할 수 있습니다.

  3. 엄격한 진입 기준은 불필요한 거래와 미끄러진 비용을 줄입니다.

  4. 여러 시간 프레임을 결합하면 수익 속도와 안정성을 균형 잡습니다.

위험성

  1. 입학 기준이 너무 엄격해서 기회를 놓칠 수도 있습니다.

  2. 잘못된 스톱 로스 설정은 너무 공격적이거나 보수적일 수 있습니다.

  3. 부적절한 시간 프레임 선택은 장기 또는 단기 트렌드와 일치하지 않을 수 있습니다.

  4. 사건의 갑작스러운 역행은 스톱 로스를 유발하지 않을 수 있습니다.

개선 영역

  1. 수익 속도와 안정성을 균형을 맞추기 위해 시간 프레임 선택을 최적화하십시오.

  2. 다른 매개 변수 설정을 테스트하여 스톱 손실 수준을 최적화합니다.

  3. 역전점을 판단하는 데 도움이 되는 기계 학습 알고리즘을 추가합니다.

  4. 급격한 변동으로 인한 손실을 피하기 위해 중요한 이벤트를 모니터링하십시오.

요약

이 전략은 엄격한 입시 기준과 역동적 인 정지를 통해 여러 시간 프레임에 걸쳐 판단을 통합하여 안정적인 수익을 목표로합니다. 놓친 기회와 부적절한 위험 통제의 위험이 있습니다. 다음 단계는 더 높은 안정성을위한 매개 변수를 계속 최적화하는 것입니다.


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

//@version=2
strategy("[RichG] Easy MTF Strategy v1.1", overlay=false)

TF_1_time = input("D", "Timeframe 1")
TF_2_time = input("10D", "Timeframe 2")
TF_3_time = input("15D", "Timeframe 3")
TF_4_time = input("30D", "Timeframe 4")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
lengthBB=input(20, title="BB Length")
transaction_size = input(1, "Contract/Share Amount")

src = close, len = 20


out = sma(src, len)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line


kc() =>
    ma = sma(close, lengthKC)
    range = tr
    rangema = sma(range, lengthKC)
    upperKC = ma + rangema * multKC
    lowerKC = ma - rangema * multKC
    [lowerKC, upperKC] 

 
bb() =>
    source = close 
    basis = sma(source, lengthBB)
    dev = multKC * stdev(source, lengthBB)
    upperBB = basis + dev
    lowerBB = basis - dev
    [upperBB, lowerBB]

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor


TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear 
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long, qty=transaction_size)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short, qty=transaction_size)

[kc_lower,kc_upper] = kc()

strategy.close("MTF_Long", when=close < kc_upper)
strategy.close("MTF_Short", when=close > kc_lower)


더 많은