커뮤니티

수식 검토 요청합니다.

프로필 이미지
종호
2020-07-19 21:35:23
1436
글번호 140785
답변완료
아래 수식은 수동으로 2가지 종목을 각각 매매후에 자리를 뜨고 자러 가는 사이에 본절 청산과 수익 추적 청산 하기 위한 수식입니다. 에러가 있는지 검토 요청드립니다. 수식이 문제가 없더라도 실전에서 문제가 없겠습니까? GetPositionOpenPL 과 GetpositionQuantity 은 호출을 얼마 시간단위로 호출하는 것인지요? 분봉이 완성될 때마다 호출되는 것인지요? GetPositionOpenPL 이 실제와 다를 때도 있습니까? 실제와 동일시하는 수식이 있으면 부탁드립니다. var: quantity1(0),quantity2(0),러셀원가(0),가솔린원가(0); var: 러셀이익(0),가솔린이익(0); var: PL1(0),PL2(0),T(0); var:러셀본전가(0), 가솔린본절가(0),러셀고가(0),가솔린고가(0), 러셀최고가(0),가솔린최고가(0); PL1=GetPositionOpenPL("RTUV20","7212383908"); //러셀 PL2=GetPositionOpenPL("RB020","7212383908"); // 가솔린 quantity1=GetpositionQuantity("RTUV20","7212383908");//러셀 보유수량 quantity2=GetpositionQuantity("RB020","7212383908");//가솔린 보유수량 IF quantity1==0 Then { 러셀원가 = PL1 ; 러셀이익=0 ; 러셀최고가=0; 러셀본전가=0 ; T=0 ; } IF quantity2==0 Then { 가솔린원가 = PL2 ; 가솔린이익=0; 가솔린최고가=0; 가솔린본절가=0; T=0 ; } IF quantity1>0 Then { 러셀이익 = PL1 -러셀원가 ; } IF quantity1>0 Then { 러셀이익 > 러셀이익[1] ; 러셀최고가=러셀이익 ; } IF quantity2>0 Then { 가솔린이익 = PL2 -가솔린원가 ; } IF quantity2>0 Then { 가솔린이익 >가솔린이익[1] ; 가솔린최고가 = 가솔린이익; } IF quantity1[1]==0 and quantity1>0 then { 러셀본전가 =c; } IF quantity2[1]==0 and quantity2>0 then { 가솔린본절가 =c; } // 러셀을 수동으로 매매하고 이익이 나서 이익을 시스템식으로 보전하려고 합니다. //러셀 매매후 이익이 나면 if quantity1>0 AND PL1 > 러셀원가 Then { 러셀이익 = PL1 - 러셀원가 ; T=1; } //가솔린 매매후 이익이 나면 if quantity2>0 AND PL2 > 가솔린원가 Then; { 가솔린이익 = PL2 - 가솔린원가 ; T=-1; } // 러셀 매수후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==1 and 러셀이익 > pricescale*40 Then { Sell("bx1",AtStop,러셀본전가); // 러셀 본절가는 수동으로 넣어 줍니다.옆의 수식 맞습니까? 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; // 러셀 매수후 이익이 많이 나서 최고값 대비 50%로 가격이 떨어지면 수익 청산합니다. if 러셀최고가 >= 러셀원가+pricescale*60 then sell("bx2",atstop,(러셀최고가- 러셀원가)*0.5 ); // 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; } // 러셀 매도후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==1 and 러셀이익 > pricescale*40 Then { Buy("sx1",AtStop,러셀본전가); // 러셀 본절가는 수동으로 넣어 주기도 합니다.옆의 수식 맞습니까? 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; // 러셀 매도후 이익이 많이 나서 최고삾 대비 50%로 가격이 덜어지면 수익 청산합니다. if 러셀최고가 >= 러셀원가*60 then Buy("sx2",atstop,(러셀최고가 - 러셀원가)*0.5 ); // 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; } ////////////////////////////////////////////////////////// // 가솔린 매수후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity2==1 and T==-1 Then { Sell("bx11",AtStop,가솔린본절가); // 러셀 본절가는 수동으로 넣어 주기도 합니다..옆의 수식 맞습니까? 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; // 가솔린 매수후 이익이 많이 나서 최고값 대비 50%로 가격이 떨어지면 수익 청산합니다. if highest(H,BarsSinceEntry) >= entryprice+pricescale*40 then sell("bx22",atstop,highest(H,BarsSinceEntry)-(highest(H,BarsSinceEntry)-entryprice)*0.5 ); // 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; } // 가솔린 매도후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==-1 Then { Buy("sx11",AtStop,가솔린본절가); // 러셀 본절가는 수동으로 넣어 줍니다.옆의 수식 맞습니까? 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; // 가솔린 매도후 이익이 많이 나서 최고삾 대비 50%로 가격이 덜어지면 수익 청산합니다. if highest(H,BarsSinceEntry) >= entryprice+pricescale*40 then Buy("sx22",atstop,lowest(L,BarsSinceEntry)+(entryprice-lowest(L,BarsSinceEntry))*0.5 ); // 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; } MessageLog("quantity1= %.f " , quantity1 ); MessageLog("PL1= %.f " , PL1 );
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2020-07-20 15:28:44

안녕하세요 예스스탁입니다. 1 수식은 시세가 들어올떄 마다 값계산을 합니다. 하지만 랭귀지에서 조건을 if문으로 지정하게 되는데 if문이 봉완성을 기준으로 만족여부를 최종판단하므로 예스랭귀지는 봉완성시를 기준으로 한다고 보셔야 합니다. 2 GetPositionOpenPL은 계좌에서 가져오는 값입니다. 해당함수외에는 수식으로 실제 계좌의 손익을 계산할 방법은 없습니다. 3 죄송하지만 해당 내용은 저희가 검증해 드리기 어렵습니다. 모의투자에 적용하셔서 직접 테스트해 보시고 수정보완하셔야 합니다. 해외선물 중 유진투자증권이나 한국투자증권에서 모의투자를 제공합니다. 즐거운 하루되세요 > 종호 님이 쓴 글입니다. > 제목 : 수식 검토 요청합니다. > 아래 수식은 수동으로 2가지 종목을 각각 매매후에 자리를 뜨고 자러 가는 사이에 본절 청산과 수익 추적 청산 하기 위한 수식입니다. 에러가 있는지 검토 요청드립니다. 수식이 문제가 없더라도 실전에서 문제가 없겠습니까? GetPositionOpenPL 과 GetpositionQuantity 은 호출을 얼마 시간단위로 호출하는 것인지요? 분봉이 완성될 때마다 호출되는 것인지요? GetPositionOpenPL 이 실제와 다를 때도 있습니까? 실제와 동일시하는 수식이 있으면 부탁드립니다. var: quantity1(0),quantity2(0),러셀원가(0),가솔린원가(0); var: 러셀이익(0),가솔린이익(0); var: PL1(0),PL2(0),T(0); var:러셀본전가(0), 가솔린본절가(0),러셀고가(0),가솔린고가(0), 러셀최고가(0),가솔린최고가(0); PL1=GetPositionOpenPL("RTUV20","7212383908"); //러셀 PL2=GetPositionOpenPL("RB020","7212383908"); // 가솔린 quantity1=GetpositionQuantity("RTUV20","7212383908");//러셀 보유수량 quantity2=GetpositionQuantity("RB020","7212383908");//가솔린 보유수량 IF quantity1==0 Then { 러셀원가 = PL1 ; 러셀이익=0 ; 러셀최고가=0; 러셀본전가=0 ; T=0 ; } IF quantity2==0 Then { 가솔린원가 = PL2 ; 가솔린이익=0; 가솔린최고가=0; 가솔린본절가=0; T=0 ; } IF quantity1>0 Then { 러셀이익 = PL1 -러셀원가 ; } IF quantity1>0 Then { 러셀이익 > 러셀이익[1] ; 러셀최고가=러셀이익 ; } IF quantity2>0 Then { 가솔린이익 = PL2 -가솔린원가 ; } IF quantity2>0 Then { 가솔린이익 >가솔린이익[1] ; 가솔린최고가 = 가솔린이익; } IF quantity1[1]==0 and quantity1>0 then { 러셀본전가 =c; } IF quantity2[1]==0 and quantity2>0 then { 가솔린본절가 =c; } // 러셀을 수동으로 매매하고 이익이 나서 이익을 시스템식으로 보전하려고 합니다. //러셀 매매후 이익이 나면 if quantity1>0 AND PL1 > 러셀원가 Then { 러셀이익 = PL1 - 러셀원가 ; T=1; } //가솔린 매매후 이익이 나면 if quantity2>0 AND PL2 > 가솔린원가 Then; { 가솔린이익 = PL2 - 가솔린원가 ; T=-1; } // 러셀 매수후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==1 and 러셀이익 > pricescale*40 Then { Sell("bx1",AtStop,러셀본전가); // 러셀 본절가는 수동으로 넣어 줍니다.옆의 수식 맞습니까? 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; // 러셀 매수후 이익이 많이 나서 최고값 대비 50%로 가격이 떨어지면 수익 청산합니다. if 러셀최고가 >= 러셀원가+pricescale*60 then sell("bx2",atstop,(러셀최고가- 러셀원가)*0.5 ); // 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; } // 러셀 매도후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==1 and 러셀이익 > pricescale*40 Then { Buy("sx1",AtStop,러셀본전가); // 러셀 본절가는 수동으로 넣어 주기도 합니다.옆의 수식 맞습니까? 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; // 러셀 매도후 이익이 많이 나서 최고삾 대비 50%로 가격이 덜어지면 수익 청산합니다. if 러셀최고가 >= 러셀원가*60 then Buy("sx2",atstop,(러셀최고가 - 러셀원가)*0.5 ); // 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; } ////////////////////////////////////////////////////////// // 가솔린 매수후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity2==1 and T==-1 Then { Sell("bx11",AtStop,가솔린본절가); // 러셀 본절가는 수동으로 넣어 주기도 합니다..옆의 수식 맞습니까? 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; // 가솔린 매수후 이익이 많이 나서 최고값 대비 50%로 가격이 떨어지면 수익 청산합니다. if highest(H,BarsSinceEntry) >= entryprice+pricescale*40 then sell("bx22",atstop,highest(H,BarsSinceEntry)-(highest(H,BarsSinceEntry)-entryprice)*0.5 ); // 포지션이 매도이면 이 명령은 손으로 삭제합니다. T=0 ; } // 가솔린 매도후 이익이 나서 본절가로 가격이 떨어지면 본절가 청산합니다. IF quantity1==1 and T==-1 Then { Buy("sx11",AtStop,가솔린본절가); // 러셀 본절가는 수동으로 넣어 줍니다.옆의 수식 맞습니까? 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; // 가솔린 매도후 이익이 많이 나서 최고삾 대비 50%로 가격이 덜어지면 수익 청산합니다. if highest(H,BarsSinceEntry) >= entryprice+pricescale*40 then Buy("sx22",atstop,lowest(L,BarsSinceEntry)+(entryprice-lowest(L,BarsSinceEntry))*0.5 ); // 포지션이 매수이면 이 명령은 손으로 삭제합니다. T=0 ; } MessageLog("quantity1= %.f " , quantity1 ); MessageLog("PL1= %.f " , PL1 );