리소스 로딩... 로딩...

PSAR 및 EMA 기반의 양적 거래 전략

저자:차오장, 날짜: 2024-05-28 11:00:40
태그:PSAREMA국무회의IRC

img

전반적인 설명

이 양적 거래 전략은 주로 파라볼릭 SAR (PSAR) 및 기하급수적 이동 평균 (EMA) 지표의 크로스오버 신호를 사용하여 여러 사용자 지정 조건과 결합하여 구매 및 판매 신호를 생성합니다. 전략의 기본 아이디어는: PSAR가 아래에서 EMA를 넘어서 특정 조건을 만족하면 구매 신호가 생성됩니다. PSAR가 위에서 EMA를 넘어서 특정 조건을 충족하면 판매 신호가 생성됩니다. 또한 전략은 위험을 관리하기 위해 수익 및 스톱 로스 수준을 설정합니다.

전략 원칙

  1. PSAR 및 30주기 EMA 지표를 계산합니다
  2. PSAR와 EMA 사이의 교차 관계를 결정하고 그에 따른 플래그를 설정합니다.
  3. IGC (이데올린 그린 촛불) 및 IRC (이데올린 레드 촛불) 를 PSAR 및 EMA의 상대적 위치와 촛불의 색상을 기반으로 정의하십시오.
  4. IGC와 IRC의 발생을 기반으로 구매 및 판매 신호를 생성
  5. 매수 가격보다 8%, 16% 및 32% 높게 수익을 취하고 매수 가격보다 16% 낮게 손실을 멈추는 수준; 매수 가격보다 8%, 16%, 32% 낮게 수익을 취하고 매수 가격보다 16% 높게 손실을 멈추는 수준
  6. 거래 세션 및 포지션 상태에 따라 구매, 판매 또는 폐쇄 포지션을 실행

전략적 장점

  1. 신호 신뢰성을 향상시키기 위해 여러 지표와 조건을 결합합니다.
  2. 유연한 리스크 및 수익 관리를 위해 여러 가지 수익 및 스톱 손실 수준을 설정합니다.
  3. 다른 시장 상황에 따라 구매 및 판매 조건을 필터링하여 전략의 적응력을 향상시킵니다.
  4. 매우 모듈화된 코드, 이해하기 쉽고 수정하기 쉽습니다

전략 위험

  1. 전략의 매개 변수 설정은 모든 시장 환경에 적합하지 않을 수 있으며 실제 조건에 따라 조정해야합니다.
  2. 불안정한 시장에서 전략은 거래 비용을 증가시키는 빈번한 거래 신호를 생성 할 수 있습니다.
  3. 전략은 시장 추세에 대한 판단이 부족하고 강한 추세 시장에서 기회를 놓칠 수 있습니다.
  4. 스톱 로스 설정은 극단적인 시장 조건으로 인한 위험을 완전히 피할 수 없습니다.

전략 최적화 방향

  1. 신호 정확성과 신뢰성을 향상시키기 위해 더 많은 기술 지표 또는 시장 정서 지표를 도입합니다.
  2. 이윤을 취득하고 손실을 멈추는 레벨의 설정을 최적화하고, 동적 이윤을 취득하고 손실을 멈추는 방식 또는 변동성 기반의 이윤을 취득하고 손실을 멈추는 방식을 구현하는 것을 고려합니다.
  3. 전략의 적응성을 높이기 위해 다른 시장 상태에 대한 다른 거래 매개 변수와 규칙을 설정합니다.
  4. 자금 관리 모듈을 통합하여 계정 자기자본 비율 및 잔액과 같은 요소를 기반으로 위치와 위험 노출을 동적으로 조정합니다.

요약

이 양적 거래 전략은 PSAR 및 EMA 지표에 기반하여 여러 사용자 지정 조건과 규칙을 통해 구매 및 판매 신호를 생성합니다. 전략은 일정 수준의 적응력과 유연성을 가지고 있으며 위험을 관리하기 위해 수익 및 스톱 로스 수준을 설정합니다. 그러나 매개 변수 설정 및 위험 통제 측면에서 최적화 할 여지가 있습니다. 전반적으로이 전략은 기본 템플릿으로 사용될 수 있으며 추가 최적화 및 개선으로 강력한 거래 전략이 될 가능성이 있습니다.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SwapnilRaykar

//@version=5
strategy("aj sir second project", overlay=true, margin_long=100, margin_short=100)

start=input("0915-1515","session time")
st11=time(timeframe.period,start)
st=st11>0
et= not st 

psar=ta.sar(0.02,0.02,0.2)
emared=ta.ema(close,30)
//plot(psar,"psar",color.yellow,style = plot.style_cross)
//plot(emared,"emared",color.red)
var crodownflag=0
var croupflag=0

var igcflag=0

var ircflag=0

cdown1=ta.crossunder(psar,emared)  and not (psar<close and psar[1]>close[1])
cup1=ta.crossover(psar,emared) and not (psar>close and psar[1]<close[1])

cdown=ta.crossunder(psar,emared) 
cup=ta.crossover(psar,emared)


green_candle=close>open
red_candle=close<open

if ta.crossunder(psar,emared) and crodownflag==0  and not (psar<close and psar[1]>close[1])
    crodownflag:=1
else if cdown and crodownflag==1
    crodownflag:=0



if crodownflag==1 and green_candle and igcflag==0
    igcflag:=1
else if cdown and igcflag==1
    igcflag:=0

//plot(igcflag,"igcflag",color.lime)

if ta.crossover(psar,emared) and croupflag==0 and not (psar>close and psar[1]<close[1])
    croupflag:=1
else if cdown and croupflag==1
    croupflag:=0

//plot(crodownflag,"crodownflag",color.white)
irc_cond=croupflag==1 or cup

if (croupflag==1 and red_candle and ircflag==0)
    ircflag:=1
else if cup and croupflag==1
    ircflag:=0

igc_candle1=(igcflag==1 and igcflag[1]==0) or (cdown1 and green_candle)
irc_candle1=(ircflag==1 and ircflag[1]==0) or (cup1 and red_candle)
///////////////////////////
dm=dayofmonth(time)
newday=dm!=dm[1]
dmc=dm==ta.valuewhen(bar_index==last_bar_index,dm,0)

///////////////////////////////////////////
var irc_there=0

if irc_candle1[1] and irc_there==0
    irc_there:=1
else if cdown and irc_there==1
    irc_there:=0

irc_candle=irc_candle1 and irc_there==0// and dmc

var igc_there=0

if igc_candle1[1] and igc_there==0
    igc_there:=1
else if cup and igc_there ==1
    igc_there:=0

igc_candle=igc_candle1 and igc_there==0// and dmc
/////////// to get rid of irc being valid even after crossdown
var valid_igc_low=0
var valid_irc_high=0

if irc_candle[1] and valid_irc_high==0
    valid_irc_high:=1
else if igc_candle and valid_irc_high==1
    valid_irc_high:=0

if igc_candle and valid_igc_low==0
    valid_igc_low:=1
else if irc_candle and valid_igc_low==1
    valid_igc_low:=0


igc_low=ta.valuewhen(igc_candle,low,0)
irc_high=ta.valuewhen(irc_candle,high,0)
//////////////////////////////
//plot(irc_high,"irc_high",color.red)

//plot(valid_irc_high,"valid_irc_high",color.purple)

buy12=ta.crossunder(close,igc_low) and valid_igc_low==1
buy1=buy12[1]

short12=ta.crossover(close,irc_high) and valid_irc_high==1
short1=short12[1]
//plotshape(short12,"short12",shape.arrowdown,color=color.purple)

// plotshape(igc_candle,"igc_candle",shape.arrowdown,color=color.green)
// plotshape(irc_candle,"irc_candle",shape.arrowdown,color=color.red)
//plotshape((psar<close and psar[1]>close[1]) ,"croup",shape.arrowdown,color=color.red)
//plotshape(cup ,"croup",shape.arrowdown,color=color.orange)

buyprice=ta.valuewhen(buy1 and strategy.position_size[1]==0,open,0)
shortprice=ta.valuewhen(short1 and strategy.position_size[1]==0,open,0)

btarget1=buyprice+(buyprice*0.08)
btarget2=buyprice+(buyprice*0.16)
btarget3=buyprice+(buyprice*0.32)
bstoploss=buyprice-(buyprice*0.16)

starget1=shortprice-(shortprice*0.08)
starget2=shortprice-(shortprice*0.16)
starget3=shortprice-(shortprice*0.32)
sstoploss=shortprice+(shortprice*0.16)

if buy12 and strategy.position_size==0 and st11
    strategy.entry("buy",strategy.long)

if strategy.position_size >0
    strategy.exit("sell",from_entry = "buy",stop=bstoploss,limit=btarget3)

if short12 and strategy.position_size==0 and st11
    strategy.entry("short",strategy.short)

if strategy.position_size<0
    strategy.exit("cover",from_entry = "short",stop = sstoploss,limit = starget3)

if et
    strategy.close_all(comment = "timeover")

plot(strategy.position_size>0?buyprice:na,"buyprice",color.white, style=plot.style_circles )
plot(strategy.position_size>0?bstoploss:na,"bstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size>0?btarget1:na,"btarget1",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget2:na,"btarget2",color.green, style=plot.style_circles )
plot(strategy.position_size>0?btarget3:na,"btarget3",color.green, style=plot.style_circles )

plot(strategy.position_size<0?shortprice:na,"shortprice",color.white, style=plot.style_circles )
plot(strategy.position_size<0?sstoploss:na,"sstoploss",color.red, style=plot.style_circles )
plot(strategy.position_size<0?starget1:na,"starget1",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget2:na,"starget2",color.green, style=plot.style_circles )
plot(strategy.position_size<0?starget3:na,"starget3",color.green, style=plot.style_circles )


관련

더 많은