커뮤니티

수식 문의 드립니다

프로필 이미지
무명
2012-07-16 05:48:55
393
글번호 52899
답변완료
*아래 설명을 읽고 아래 수식을 예스랭귀지로 변환 좀 부탁드립니다. 감사합니다. 1. 설정 연결선물 5분봉, 당일청산 수수료 0.006%, 슬리피지 0.025pt 2. 전략내용 셋업 ADX지표의 변화율(DeltaADX)과 이것의 지수이평을 계산해 놓은다.(DeltaAvg) ADX변화율 이평(DeataAvg)이 0선을 상향돌파하면 40봉 최고가를 상단채널로 40봉 최저가를 하단채널로 저장해 놓는다. 진입 ADX변화율 이평(DeataAvg)이 0선을 상향돌파한지 8봉 이내에서 상단채널을 돌파하면 매수진입하고 하단 채널을 이탈하면 매도진입한다. 청산 1) 30개봉 최저가를 하향이탈하면 매수청산한다. 2) 30개봉 최고가를 상향돌파하면 매도청산한다. 3) 매수진입봉에서 저가-ma(range,40)*6 값을 StopPrice로 저장해 놓고, 봉이 진행될 마다 (저가-stopprice)/28 만큼을 최초의 StopPrice에서 쌓아올라가고 이 값을 하향이탈하면 매수청산한다. 4) 매도진입봉에서 고가 + ma(range,40)*6 값을 StopPrice로 저장해 놓고, 봉이 진행될 때마다 (stopprice-고가)/28 만큼을 최초의 StopPrice에서 차감해 나가고 이 값을 상향 돌파하면 매도청산한다. 3. 외부변수 ADXLen : ADX의 기간값 AvgLen : ADX의 변화율을 지수이동평균 내기 위한 기간값 Length : 진입을 위한 최고가와 최저가 채널을 구하기 위한 기간 값 Ch : ADX변화율 이평(AvgLen)이 0선을 돌파한 이후에 경과된 봉 수 Mult : 최초의 저가추적청산 값을 계산하기 위한 Range이평의 승수 Div : 현재봉 저(고)가와 stopPrice의 차이를 나누어 주는 값(저가 추적 청산의 증감 값으로 사용되며 값이 커질 수록 늦은 청산을 하게되고 작아질 수록 늦은 청산을 하게 됨) -by GAMBLER- */ Input: ADXLen(50), AvgLen(100), Length(40), Ch(8), Mult(6), Div(28); vars: UpCh(0), DnCh(0), mp(0), stopprice(0); vars: DeltaADX(0), DeltaAvg(0), LastOrderBar(0); value1 = ADX(ADXLen); DeltaADX = value1 - value1[1]; DeltaAvg = ema( DeltaADX , AvgLen ); If CrossUp(DeltaAvg , 0 ) and BarIndex > 1 then Begin UpCh = Highest( High, Length ); DnCh = Lowest( low , Length) ; LastOrderBar = BarIndex; end; MP = marketposition; If MP <> 0 then LastOrderBar = -999; If index < LastOrderBar + Ch and EntriesToday(date) < 1 then Begin Buy("B",atstop, UpCh); Sell("S",atstop, DnCh) ; If MarketPosition <> 1 then ExitLong ("lentrystop",atstop, Lowest(Low,30)) ; If MarketPosition <> -1 then ExitShort ("sentrystop",atstop,Highest(High,30)) ; End; //저가 추적청산 if MP == 1 and MP[1] <> 1 then Begin LastOrderBar = -999; StopPrice = low - ma(range,40)*Mult; end; if MP == -1 and MP[1] <> -1 then begin StopPrice = High + ma(range,40)*Mult; LastOrderBar = -999; end; If MP == 1 then begin exitlong ("paralong",atstop,stopprice) ; stopprice = stopprice + (low-stopprice)/Div; end; If MP == -1 then begin exitshort ("parashort",atstop,stopprice) ; stopprice = stopprice - (stopprice-high)/Div; end; 아래 사용자함수가 작성되어 있어야 전략 적용됩니다. [사용자함수 : entriestoday] Input : nDate(Numeric); Var : Count(0); Count = 0 ; For Value1 = 0 To 10 { If EntryDate(Value1) == nDate Then Count = Count + 1; } EntriesToday = Count;
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2012-07-16 18:08:47

안녕하세요 예스스탁입니다. 올려주신식은 예스랭귀지로 작성한 식입니다. 따로 사용자함수를 사용하는 부분과 당일청산은 수식내에 내용을 추가했습니다. 아래식 이용하시면 됩니다. 연결선물 5분봉에 설정화면에서 수수료 0.006%, 슬리피지 0.025pt로 지정하시고 적용하시면 됩니다. Input: ADXLen(50), AvgLen(100), Length(40), Ch(8), Mult(6), Div(28); vars: UpCh(0), DnCh(0), mp(0), stopprice(0),cnt(0),EntriesToday(0); vars: DeltaADX(0), DeltaAvg(0), LastOrderBar(0); EntriesToday = 0 ; For cnt = 0 To 10 { If EntryDate(cnt) == sDate Then EntriesToday = EntriesToday + 1; } value1 = ADX(ADXLen); DeltaADX = value1 - value1[1]; DeltaAvg = ema( DeltaADX , AvgLen ); If CrossUp(DeltaAvg , 0 ) and BarIndex > 1 then Begin UpCh = Highest( High, Length ); DnCh = Lowest( low , Length) ; LastOrderBar = BarIndex; end; MP = marketposition; If MP <> 0 then LastOrderBar = -999; If index < LastOrderBar + Ch and EntriesToday < 1 then Begin Buy("B",atstop, UpCh); Sell("S",atstop, DnCh) ; If MarketPosition <> 1 then ExitLong ("lentrystop",atstop, Lowest(Low,30)) ; If MarketPosition <> -1 then ExitShort ("sentrystop",atstop,Highest(High,30)) ; End; //저가 추적청산 if MP == 1 and MP[1] <> 1 then Begin LastOrderBar = -999; StopPrice = low - ma(range,40)*Mult; end; if MP == -1 and MP[1] <> -1 then begin StopPrice = High + ma(range,40)*Mult; LastOrderBar = -999; end; If MP == 1 then begin exitlong ("paralong",atstop,stopprice) ; stopprice = stopprice + (low-stopprice)/Div; end; If MP == -1 then begin exitshort ("parashort",atstop,stopprice) ; stopprice = stopprice - (stopprice-high)/Div; end; SetStopEndofday(150000); 즐거운 하루되세요 > 무명 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다 > *아래 설명을 읽고 아래 수식을 예스랭귀지로 변환 좀 부탁드립니다. 감사합니다. 1. 설정 연결선물 5분봉, 당일청산 수수료 0.006%, 슬리피지 0.025pt 2. 전략내용 셋업 ADX지표의 변화율(DeltaADX)과 이것의 지수이평을 계산해 놓은다.(DeltaAvg) ADX변화율 이평(DeataAvg)이 0선을 상향돌파하면 40봉 최고가를 상단채널로 40봉 최저가를 하단채널로 저장해 놓는다. 진입 ADX변화율 이평(DeataAvg)이 0선을 상향돌파한지 8봉 이내에서 상단채널을 돌파하면 매수진입하고 하단 채널을 이탈하면 매도진입한다. 청산 1) 30개봉 최저가를 하향이탈하면 매수청산한다. 2) 30개봉 최고가를 상향돌파하면 매도청산한다. 3) 매수진입봉에서 저가-ma(range,40)*6 값을 StopPrice로 저장해 놓고, 봉이 진행될 마다 (저가-stopprice)/28 만큼을 최초의 StopPrice에서 쌓아올라가고 이 값을 하향이탈하면 매수청산한다. 4) 매도진입봉에서 고가 + ma(range,40)*6 값을 StopPrice로 저장해 놓고, 봉이 진행될 때마다 (stopprice-고가)/28 만큼을 최초의 StopPrice에서 차감해 나가고 이 값을 상향 돌파하면 매도청산한다. 3. 외부변수 ADXLen : ADX의 기간값 AvgLen : ADX의 변화율을 지수이동평균 내기 위한 기간값 Length : 진입을 위한 최고가와 최저가 채널을 구하기 위한 기간 값 Ch : ADX변화율 이평(AvgLen)이 0선을 돌파한 이후에 경과된 봉 수 Mult : 최초의 저가추적청산 값을 계산하기 위한 Range이평의 승수 Div : 현재봉 저(고)가와 stopPrice의 차이를 나누어 주는 값(저가 추적 청산의 증감 값으로 사용되며 값이 커질 수록 늦은 청산을 하게되고 작아질 수록 늦은 청산을 하게 됨) -by GAMBLER- */ Input: ADXLen(50), AvgLen(100), Length(40), Ch(8), Mult(6), Div(28); vars: UpCh(0), DnCh(0), mp(0), stopprice(0); vars: DeltaADX(0), DeltaAvg(0), LastOrderBar(0); value1 = ADX(ADXLen); DeltaADX = value1 - value1[1]; DeltaAvg = ema( DeltaADX , AvgLen ); If CrossUp(DeltaAvg , 0 ) and BarIndex > 1 then Begin UpCh = Highest( High, Length ); DnCh = Lowest( low , Length) ; LastOrderBar = BarIndex; end; MP = marketposition; If MP <> 0 then LastOrderBar = -999; If index < LastOrderBar + Ch and EntriesToday(date) < 1 then Begin Buy("B",atstop, UpCh); Sell("S",atstop, DnCh) ; If MarketPosition <> 1 then ExitLong ("lentrystop",atstop, Lowest(Low,30)) ; If MarketPosition <> -1 then ExitShort ("sentrystop",atstop,Highest(High,30)) ; End; //저가 추적청산 if MP == 1 and MP[1] <> 1 then Begin LastOrderBar = -999; StopPrice = low - ma(range,40)*Mult; end; if MP == -1 and MP[1] <> -1 then begin StopPrice = High + ma(range,40)*Mult; LastOrderBar = -999; end; If MP == 1 then begin exitlong ("paralong",atstop,stopprice) ; stopprice = stopprice + (low-stopprice)/Div; end; If MP == -1 then begin exitshort ("parashort",atstop,stopprice) ; stopprice = stopprice - (stopprice-high)/Div; end; 아래 사용자함수가 작성되어 있어야 전략 적용됩니다. [사용자함수 : entriestoday] Input : nDate(Numeric); Var : Count(0); Count = 0 ; For Value1 = 0 To 10 { If EntryDate(Value1) == nDate Then Count = Count + 1; } EntriesToday = Count;