커뮤니티

질문드립니다.

프로필 이미지
stockric
2019-04-23 00:54:52
236
글번호 128034
답변완료
a,b,c라는 진입조건이 순서대로 피라미딩으로 진입합니다. 원하는식은 아래와같습니다. a라는 진입조건에서 10% 수익발생시 a라는 진입물량의 80%를 청산하고싶습니다. b라는 진입조건에서 10% 수익발생시 b라는 진입물량의 80%를 청산하고싶습니다. c라는 진입조건에서 10% 수익발생시 c라는 진입물량의 80%를 청산하고싶습니다. 위 조건을 구현해보기위해 이렇게 짜보았었습니다. If MarketPosition == 1 Then{ If LatestEntryName(0) == "a" Then ExitLong("개별청",AtLimit,LatestEntryPrice(0)*1.05,"a",Floor(CurrentContracts*0.8),1);} 위와같이 짜보았는데 50% 청산이 제대로 안나가네요. 물량의 50%만 팔아야하는데 전부팔아버리거나 1주를 남기고 99.8%가량의 물량을 청산해버립니다. 위 조건은 선물이 아니라 주식에서 실행하였습니다. 피라미딩 조건은 다른진입신호만 허용으로 체크해놓았는데 피라미딩이 문제인건지... 당최 이해가안가네요. 2. 진입 평균가에서 5%수익시 50% 청산식인데 이것역시 제대로 안나가네요. 모든물량을 팔아버리는 수준입니다. if MarketPosition == 1 Then{ Exitlong("반청",AtLimit,EntryPrice*1.05,"",Floor(CurrentContracts*0.5),1); }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-04-23 13:21:14

안녕하세요 예스스탁입니다. 1 작성하신 수식은 가장최근 진입이 a이면 진입가+5%면 전체수량의 80%를 청산하라는 내용입니다. 각 진입별로 처리하고자 하시면 각 진입이 발생시에 진입가, 수량등을 별도로 모두 저장해서 청산하게 하셔야 합니다. 또한 청산신호도 진입신호의 갯수만큰 하나의 청산함수가 동작하므로 지정된 조건에 청산을 각 1회하고자 하시면 특별한 처리가 있어야 합니다. var : ep1(0),ep2(0),ep3(0); var : ev1(0),ev2(0),ev3(0); var : xcond1(false),xcond2(false),xcond3(false); If MarketPosition == 1 Then { #a진입신호 발생하면 진입가와 수량저장 If CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "a" Then { ep1 = LatestEntryPrice(0); ev1 = CurrentContracts-CurrentContracts[1]; } #b진입신호 발생하면 진입가와 수량저장 If CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "b" Then { ep2 = LatestEntryPrice(0); ev2 = CurrentContracts-CurrentContracts[1]; } #c진입신호 발생하면 진입가와 수량저장 If CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "c" Then { ep3 = LatestEntryPrice(0); ev3 = CurrentContracts-CurrentContracts[1]; } if CurrentContracts < CurrentContracts[1] and LatestExitName(0) =="a청" Then Xcond1 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) =="b청" Then Xcond2 = true; if CurrentContracts < CurrentContracts[1] and LatestExitName(0) =="c청" Then Xcond3 = true; #a진입 발생후 if ep1 > 0 and Xcond1 == false Then ExitLong("a청",AtLimit,ep1*1.05,"a",Floor(ev1*0.8),1); #b진입 발생후 if ep2 > 0 and Xcond2 == false Then ExitLong("b청",AtLimit,ep2*1.05,"b",Floor(ev2*0.8),1); #c진입 발생후 if ep3 > 0 and Xcond3 == false Then ExitLong("c청",AtLimit,ep3*1.05,"c",Floor(ev3*0.8),1); } Else #매수포지션이 아니면 모두 초기화 { ep1 = 0; ep2 = 0; ep3 = 0; ev1 = 0; ev2 = 0; ev3 = 0; xcond1 = false; xcond2 = false; xcond3 = false; } 2 평단가는 avgentryprice입니다. 또한 평단가 위로 상승하면 해당 조건으로 계속 만족하게 되어 여러번 신호가 발생하므로 1회만 발생하게 제어해야 합니다. var : xcond(false); if MarketPosition == 1 Then { if CurrentContracts < CurrentContracts[1] and LatestExitName(0) == "반청" Then xcond = true; if Xcond == false Then Exitlong("반청",AtLimit,avgEntryPrice*1.05,"",Floor(CurrentContracts*0.5),1); } 즐거운 하루되세요 > stockric 님이 쓴 글입니다. > 제목 : 질문드립니다. > a,b,c라는 진입조건이 순서대로 피라미딩으로 진입합니다. 원하는식은 아래와같습니다. a라는 진입조건에서 10% 수익발생시 a라는 진입물량의 80%를 청산하고싶습니다. b라는 진입조건에서 10% 수익발생시 b라는 진입물량의 80%를 청산하고싶습니다. c라는 진입조건에서 10% 수익발생시 c라는 진입물량의 80%를 청산하고싶습니다. 위 조건을 구현해보기위해 이렇게 짜보았었습니다. If MarketPosition == 1 Then{ If LatestEntryName(0) == "a" Then ExitLong("개별청",AtLimit,LatestEntryPrice(0)*1.05,"a",Floor(CurrentContracts*0.8),1);} 위와같이 짜보았는데 50% 청산이 제대로 안나가네요. 물량의 50%만 팔아야하는데 전부팔아버리거나 1주를 남기고 99.8%가량의 물량을 청산해버립니다. 위 조건은 선물이 아니라 주식에서 실행하였습니다. 피라미딩 조건은 다른진입신호만 허용으로 체크해놓았는데 피라미딩이 문제인건지... 당최 이해가안가네요. 2. 진입 평균가에서 5%수익시 50% 청산식인데 이것역시 제대로 안나가네요. 모든물량을 팔아버리는 수준입니다. if MarketPosition == 1 Then{ Exitlong("반청",AtLimit,EntryPrice*1.05,"",Floor(CurrentContracts*0.5),1); }