커뮤니티

문의드립니다.

프로필 이미지
심리도박사
2014-08-31 20:08:15
157
글번호 78249
답변완료
올려주신 식을 검증해보고있습니다. 그런데 막상돌려보면 성능보고서에는 4차매수 후 매도가 나갑니다. 1차 매수 후더라도 3%이상되면 수익실현도 될수있게 해달라고 했는데.ㅠㅠ 혹시 제가 사용을 못하는건지 한번 살펴봐 주시옵소서 > 심리도박사 님이 쓴 글입니다. > 제목 : 문의드립니다. > <매수> 1. 일봉상 이평이격도가 20일선대비 1일선이 80%이하이며, 양봉시 1차매수 100만원 2. 2차매수 1차매수후 -10%시 추가매수 100만원 3. 3차매수 2차매수후 평단가가 -10%시 추가매수 200만원 4. 4차매수 3차매수후 평단가가 -10%시 추가매수 400만원 <매도> 1. 3차매수후 종가시 평단가가 -10%이하시 전량손절 2. 평단가가 +3%시 50% 수익매도 3. 평단가가 +5%시 25% 수익매도 4. 평단가가 +10%시 25% 수익매도 5. 3%수익매도시 나머지 물량 종가 전량매도 요는 1차매수가됐는 2차매수가됐는 4차매수가됐는 평단가 대비 +3%가 된다면 수익실현을 총물량의 50%를 하게되는데 그후 +5%,+10%를 만족하지 못하더라도 종가에 전량매도 하는것입니다. 제 생각에는 +3%수익실현을 하게되면 그다음 주문은 조건부 지정가로 +5%,+10%로 주문을 내게되면 될것같은데요 ^^ 일전에 비슷하게 문의를 하였는데 아래와 같은 답변을 들었습니다. "진입시에 금액으로 수량이 지정되어 정확한 진입 수량을 알 수 없기 때문에 청산시에 비율에 의해 분할로 청산하지는 못합니다. 따라서 진입은 피라미딩으로 하고, 손절청산과 3% 수익청산으로만 식을 작성하였습니다." 그래서 다른곳에서 자문을 구했더니 "수량은 내부수식에서 진입시 1진입수량 = int(100만원 / C) 2진입수량 = int(100만원 / C) 3진입수량 = int(200만원 / C) 4진입수량 = int(400만원 / C) 와 같이 설정하신 후 총 진입수량 = 1차 + 2차 + 3차 + 4차 1차청산수량 = int(총 진입수량 * 50%) 2차청산수량 = int(총 진입수량 * 25%) 3차청산수량 = 총진입수량 - 1차청산수량 -2차청산수량 로 하셔서 청산하시면 될듯합니다. ^^ 4차 이전에 중단될때도 위에 방법을 응용하시면 충분히 자동화 가능하니 참고하세요. ^^" 위와같은 방법으로 가능하다고 합니다. 위의 수식을 이용해서 부탁드립니다. 귀찮으시겠지만 부탁드리겠습니다.^^; 안녕하세요 예스스탁입니다. 휴가중에 답변을 받으셔서 답변이 정확치 않으셨습니다. 아래 내용 참고하시기 바랍니다. input : Per(10),매수1(1000000),매수2(1000000),매수3(2000000),매수4(4000000); var : Vol1(0),vol2(0),vol3(0),vol4(0); var : X(0),xVol1(0),xvol2(0),xvol3(0); var1 = ma(c,1); var2 = ma(C,20); if CodeCategoryEx == 11 and BasePrice < 50000 Then{ vol1 = int(int((매수1)/C)/10)*10; vol2 = int(int((매수2)/C)/10)*10; vol3 = int(int((매수3)/C)/10)*10; vol4 = int(int((매수4)/C)/10)*10; } Else{ vol1 = int((매수1)/C); vol2 = int((매수2)/C); vol3 = int((매수3)/C); vol4 = int((매수4)/C); } if MarketPosition == 0 and C > O and var1 <= var2*0.8 Then buy("b1",OnClose,def,vol1); if MarketPosition == 1 Then{ if MaxEntries == 1 Then buy("b2",atlimit,AvgEntryPrice*(1-Per/100),vol2); if MaxEntries == 1 Then buy("b3",atlimit,AvgEntryPrice*(1-Per/100),vol3); if MaxEntries == 1 Then buy("b4",atlimit,AvgEntryPrice*(1-Per/100),vol4); } if MarketPosition == 1 Then{ if CodeCategoryEx == 11 and BasePrice < 50000 Then{ xvol1 = int(int(MaxContracts*0.5)/10)*10; xvol2 = int(int(MaxContracts*0.5)/10)*10; xvol3 = int(int(MaxContracts*0.5)/10)*10; } Else{ xvol1 = int(MaxContracts*0.5); xvol2 = int(MaxContracts*0.5); xvol3 = int(MaxContracts*0.5); } if CurrentContracts < CurrentContracts[1] Then x = x+1; if X == 0 Then ExitLong("bx1",AtStop,AvgEntryPrice*1.03,"",Xvol1,1); if X == 1 Then ExitLong("bx2",AtStop,AvgEntryPrice*1.05,"",Xvol2,1); if X == 2 Then ExitLong("bx3",AtStop,AvgEntryPrice*1.10,"",Xvol3,1); if MaxEntries == 4 Then ExitLong("bx",AtStop,AvgEntryPrice*0.9); } Else X = 0; 즐거운 하루되세요
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-09-01 11:26:35

안녕하세요 예스스탁입니다. 청산이 타입이 잘못되어 있어 수정했습니다. 해당식 평단가 대비 3%,5%,10% 수익청산은 진입횟수와 관계가 없이 발생합니다. input : Per(10),매수1(1000000),매수2(1000000),매수3(2000000),매수4(4000000); var : Vol1(0),vol2(0),vol3(0),vol4(0); var : X(0),xVol1(0),xvol2(0),xvol3(0); var1 = ma(c,1); var2 = ma(C,20); if CodeCategoryEx == 11 and BasePrice < 50000 Then{ vol1 = int(int((매수1)/C)/10)*10; vol2 = int(int((매수2)/C)/10)*10; vol3 = int(int((매수3)/C)/10)*10; vol4 = int(int((매수4)/C)/10)*10; } Else{ vol1 = int((매수1)/C); vol2 = int((매수2)/C); vol3 = int((매수3)/C); vol4 = int((매수4)/C); } if MarketPosition == 0 and C > O and var1 <= var2*0.8 Then buy("b1",OnClose,def,vol1); if MarketPosition == 1 Then{ if MaxEntries == 1 Then buy("b2",atlimit,AvgEntryPrice*(1-Per/100),vol2); if MaxEntries == 1 Then buy("b3",atlimit,AvgEntryPrice*(1-Per/100),vol3); if MaxEntries == 1 Then buy("b4",atlimit,AvgEntryPrice*(1-Per/100),vol4); } if MarketPosition == 1 Then{ if CodeCategoryEx == 11 and BasePrice < 50000 Then{ xvol1 = int(int(MaxContracts*0.5)/10)*10; xvol2 = int(int(MaxContracts*0.5)/10)*10; xvol3 = int(int(MaxContracts*0.5)/10)*10; } Else{ xvol1 = int(MaxContracts*0.5); xvol2 = int(MaxContracts*0.5); xvol3 = int(MaxContracts*0.5); } if CurrentContracts < CurrentContracts[1] Then x = x+1; if X == 0 Then ExitLong("bx1",AtLimit,AvgEntryPrice*1.03,"",Xvol1,1); if X == 1 Then ExitLong("bx2",AtLimit,AvgEntryPrice*1.05,"",Xvol2,1); if X == 2 Then ExitLong("bx3",AtLimit,AvgEntryPrice*1.10,"",Xvol3,1); if MaxEntries == 4 Then ExitLong("bx",AtStop,AvgEntryPrice*0.9); } Else X = 0; 즐거운 하루되세요 > 심리도박사 님이 쓴 글입니다. > 제목 : 문의드립니다. > 올려주신 식을 검증해보고있습니다. 그런데 막상돌려보면 성능보고서에는 4차매수 후 매도가 나갑니다. 1차 매수 후더라도 3%이상되면 수익실현도 될수있게 해달라고 했는데.ㅠㅠ 혹시 제가 사용을 못하는건지 한번 살펴봐 주시옵소서 > 심리도박사 님이 쓴 글입니다. > 제목 : 문의드립니다. > <매수> 1. 일봉상 이평이격도가 20일선대비 1일선이 80%이하이며, 양봉시 1차매수 100만원 2. 2차매수 1차매수후 -10%시 추가매수 100만원 3. 3차매수 2차매수후 평단가가 -10%시 추가매수 200만원 4. 4차매수 3차매수후 평단가가 -10%시 추가매수 400만원 <매도> 1. 3차매수후 종가시 평단가가 -10%이하시 전량손절 2. 평단가가 +3%시 50% 수익매도 3. 평단가가 +5%시 25% 수익매도 4. 평단가가 +10%시 25% 수익매도 5. 3%수익매도시 나머지 물량 종가 전량매도 요는 1차매수가됐는 2차매수가됐는 4차매수가됐는 평단가 대비 +3%가 된다면 수익실현을 총물량의 50%를 하게되는데 그후 +5%,+10%를 만족하지 못하더라도 종가에 전량매도 하는것입니다. 제 생각에는 +3%수익실현을 하게되면 그다음 주문은 조건부 지정가로 +5%,+10%로 주문을 내게되면 될것같은데요 ^^ 일전에 비슷하게 문의를 하였는데 아래와 같은 답변을 들었습니다. "진입시에 금액으로 수량이 지정되어 정확한 진입 수량을 알 수 없기 때문에 청산시에 비율에 의해 분할로 청산하지는 못합니다. 따라서 진입은 피라미딩으로 하고, 손절청산과 3% 수익청산으로만 식을 작성하였습니다." 그래서 다른곳에서 자문을 구했더니 "수량은 내부수식에서 진입시 1진입수량 = int(100만원 / C) 2진입수량 = int(100만원 / C) 3진입수량 = int(200만원 / C) 4진입수량 = int(400만원 / C) 와 같이 설정하신 후 총 진입수량 = 1차 + 2차 + 3차 + 4차 1차청산수량 = int(총 진입수량 * 50%) 2차청산수량 = int(총 진입수량 * 25%) 3차청산수량 = 총진입수량 - 1차청산수량 -2차청산수량 로 하셔서 청산하시면 될듯합니다. ^^ 4차 이전에 중단될때도 위에 방법을 응용하시면 충분히 자동화 가능하니 참고하세요. ^^" 위와같은 방법으로 가능하다고 합니다. 위의 수식을 이용해서 부탁드립니다. 귀찮으시겠지만 부탁드리겠습니다.^^; 안녕하세요 예스스탁입니다. 휴가중에 답변을 받으셔서 답변이 정확치 않으셨습니다. 아래 내용 참고하시기 바랍니다. input : Per(10),매수1(1000000),매수2(1000000),매수3(2000000),매수4(4000000); var : Vol1(0),vol2(0),vol3(0),vol4(0); var : X(0),xVol1(0),xvol2(0),xvol3(0); var1 = ma(c,1); var2 = ma(C,20); if CodeCategoryEx == 11 and BasePrice < 50000 Then{ vol1 = int(int((매수1)/C)/10)*10; vol2 = int(int((매수2)/C)/10)*10; vol3 = int(int((매수3)/C)/10)*10; vol4 = int(int((매수4)/C)/10)*10; } Else{ vol1 = int((매수1)/C); vol2 = int((매수2)/C); vol3 = int((매수3)/C); vol4 = int((매수4)/C); } if MarketPosition == 0 and C > O and var1 <= var2*0.8 Then buy("b1",OnClose,def,vol1); if MarketPosition == 1 Then{ if MaxEntries == 1 Then buy("b2",atlimit,AvgEntryPrice*(1-Per/100),vol2); if MaxEntries == 1 Then buy("b3",atlimit,AvgEntryPrice*(1-Per/100),vol3); if MaxEntries == 1 Then buy("b4",atlimit,AvgEntryPrice*(1-Per/100),vol4); } if MarketPosition == 1 Then{ if CodeCategoryEx == 11 and BasePrice < 50000 Then{ xvol1 = int(int(MaxContracts*0.5)/10)*10; xvol2 = int(int(MaxContracts*0.5)/10)*10; xvol3 = int(int(MaxContracts*0.5)/10)*10; } Else{ xvol1 = int(MaxContracts*0.5); xvol2 = int(MaxContracts*0.5); xvol3 = int(MaxContracts*0.5); } if CurrentContracts < CurrentContracts[1] Then x = x+1; if X == 0 Then ExitLong("bx1",AtStop,AvgEntryPrice*1.03,"",Xvol1,1); if X == 1 Then ExitLong("bx2",AtStop,AvgEntryPrice*1.05,"",Xvol2,1); if X == 2 Then ExitLong("bx3",AtStop,AvgEntryPrice*1.10,"",Xvol3,1); if MaxEntries == 4 Then ExitLong("bx",AtStop,AvgEntryPrice*0.9); } Else X = 0; 즐거운 하루되세요