다중 시간 프레임 트렌드 추적 Intraday Scalping 전략

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

img

전반적인 설명

이 전략은 트렌드 일관성을 결정하기 위해 여러 시간 프레임에 걸쳐 이동 평균 지표를 결합하고 트렌드를 따르고 이익을 얻기 위해 하루 동안 스칼핑 조치를 취합니다.

전략 논리

이 전략은 거래 신호를 생성하기 위해 5분, 15분, 30분 및 60분 시간 프레임에서 8주기 및 20주기 이동 평균을 사용합니다. 8주기 MA가 20주기 MA를 넘을 때 구매 신호가 생성됩니다. 8주기 MA가 20주기 MA를 넘을 때 판매 신호가 생성됩니다.

이 전략은 거래 주문을 발급하기 전에 네 가지 시간 프레임에 걸쳐 일관된 신호를 필요로 합니다. 이동 평균이 네 가지 시간 프레임 모두에 맞춰질 때만 구매 또는 판매 주문이 제공됩니다.

일단 포지션에 들어가면 전략은 일내 수익을 취하기 위해 고정된 수익 목표를 설정합니다.

구체적으로, 전략은 5분, 15분, 30분 및 60분 차트에서 8주기 및 20주기 MA 사이의 차이를 계산하는 다른 시간 프레임에서 MA 값을 검색하기 위해 보안 () 함수를 사용합니다.

구매 및 판매 신호는 차차 선이 0선 위/아래를 가로지르는지에 의해 결정된다. 각 시간 프레임에서 신호를 기록하기 위해 여러 개의 islong 및 isshort 플래그가 사용됩니다. islong 및 isshort 조건이 충족되면 주문이 제공됩니다.

트레이드에 들어가면 전략은strategy.exit() 스칼핑에 대한 고정 수익 목표를 설정합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 멀티 타임프레임 디자인은 소음을 필터하고 거래 빈도를 줄입니다.

  2. 이윤 최적화와 함께 Intraday scalping은 작은 이익을 지속적으로 축적합니다.

  3. 명확한 코드 구조, 이해하기 쉽고 최적화하기 쉽습니다.

  4. 합리적인 조건은 위험을 통제하는 데 도움이 됩니다.

위험 분석

이 전략의 잠재적 위험:

  1. 멀티 타임프레임은 미묘한 트렌드 변화를 놓칠 수 있습니다.

  2. 빈번한 스칼핑 거래는 비용을 증가시킵니다.

  3. 고정 수익 목표는 유연성이 부족합니다.

  4. 지표에 따라 속을 위험이 있습니다.

최적화 방향

가능한 최적화:

  1. 더 강력한 신호를 위해 더 많은 시간 프레임을 추가합니다.

  2. ATR에 기반한 동적 수익 목표

  3. 부가적인 필터들, 예를 들어 볼륨 증가나 역사 극단들.

  4. 가장 좋은 매개 변수를 위해 MA 기간을 최적화합니다.

  5. 신호 신뢰성을 판단하기 위해 기계 학습을 추가합니다.

요약

전체적으로 이것은 내일 스칼핑을 사용하는 전형적인 멀티 타임프레임 트렌드 추적 전략입니다. 논리는 명확하고 코드는 잘 구성되어 있습니다. 적절한 최적화로 매우 실용적인 스칼핑 전략 템플릿이 될 수 있습니다.


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

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)





더 많은