커뮤니티
문의드립니다.
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;
즐거운 하루되세요