커뮤니티
질문드립니다.
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);
}