커뮤니티
조건에 따른 수식작성 문의드립니다.
2017-01-11 14:46:45
107
글번호 105782
안녕하세요, 아래 조건대로 프로그램을 짜다가 문제가 있어 문의드립니다.
매도를 기준으로 하면, 제가 조건에 따라 첫번째 매도 진입은 했는데 그 이후 추가진입이 문제가 있습니다.
매도 진입전략 -> 첫번째진입 이후 24시간이내 첫번째진입가격의 고가 + 0.05 만큼의 가격 도달시 두번째 진입. 위와 같은 조건으로 이전 진입가격의 고가에서 +0.05만큼의가격 도달시 세번째진입,,등등. 단, 첫번째 진입이후 24시간이 지나면 모든 조건 reset하고 위과정 반복.
매도 청산전략 -> 첫진입과 두번째 진입을 청산하고자할 때는 진입가격 기준 -0.2 익절일 때 익절 청산, 진입가격 기준 +0.2 손절일 때 손절 청산.
단, 세번째 진입 이후부터는 60일선에 닿으면 청산, 그 이후 네번째 진입부터는 120일선에 닿으면 청산. 청산도 마찬가지로 첫번째 청산 이후 24시간이 지나면 모든 조건 reset하고 위과정 반복.
Input : Period(120);
var : Lma(0),gap(0),gapH(0),gapL(0),cnt(0),p(0),Largest(0);
var: sell_price(0),remem(0);
Lma=ma(C,120);
gap=C-Lma;
gapH=H-Lma;
gapL=Lma-L;
//매도
if gap[1]>0 Then {
if gapH[1]>=1 Then {
Largest = gapH[1];
For cnt=1 to 47 {
if gap[cnt]>0 Then {
if gapH[cnt]>=1 Then {
if gapH[cnt]>= Largest Then {
Largest=gapH[cnt];
p=cnt;
}
}
}
}
sell("S1", AtLimit, Lma+Largest);
sell_price = H;
} //end if
//추가 매도 진입
if sDate >= EntryDate(1)&& sDate<=EntryDate(1)+1 Then{ //진입이후 하루지나기 이전에만 해당
if H >= sell_price+0.05 Then{
sell("S2");
sell_price=H;
}
}
} //end if
//매수
if gap[1]<0 Then{
if gapL[1]>=1 Then{
Largest = gapL[1];
For cnt=1 to 10 {
if gap[cnt]>0 Then{
if gapL[cnt]>=1 Then{
if gapL[cnt]>= Largest Then{
Largest=gapL[cnt];
p=cnt;
}
}
}
}
Buy("B1", AtLimit, Lma-Largest);
}
}
//손절시 청산
if MarketPosition<0 Then{ //매도 진입이후
if L<=EntryPrice+0.2 && H>=EntryPrice+0.2 Then{ //매도 이후 손절
ExitShort("매도손절청산"); //매도청산(skip)
}
}
if MarketPosition>0 Then{//매수 진입이후
if L<=EntryPrice-0.2 && H>=EntryPrice-0.2 Then{ //매수이후 손절
ExitLong("매수손절청산"); //매수청산(skip)
}
}
//익절시 청산
if MarketPosition==-1 && (L <= EntryPrice-0.2 && H >= EntryPrice - 0.2) Then{ //매도진입이후 익절일때
ExitShort("매도익절청산"); //매도청산 -1
}
if MarketPosition==1 && (L <= EntryPrice+0.2 && H>=EntryPrice+0.2) Then { //매수진입이후 익절일때
ExitLong("매수익절청산"); //매수청산 1
}
번거로우시겠지만 여기서 무엇을 추가하고 고쳐야할지 알려주시면 정말 감사하겠습니다.ㅠㅠ
이 코드가 잘못되었다면 새로 작성해주시면 감사하겠습니다.
답변 1
예스스탁 예스스탁 답변
2017-01-11 17:01:29
안녕하세요
예스스탁입니다.
reset이란 표현은 어떤 내용인지 잘 모르겠습니다.
해당 내용은 제외했습니다.
진입이후 첫진입기준 24시간 안에만 추가진입이 되게
매도 추가진입조건을 수정했습니다.
매수진입쪽에는 추가진입식이 보이지 않아 추가하지 않았습니다.
조건내용은 같으므로 참고하셔서 보완하시기 바랍니다.
주석 참고하시기 바랍니다.
기존에 작성하신 내요은 삭제나 변경없이 추가만 했습니다.
Input : Period(120);
var : Lma(0),gap(0),gapH(0),gapL(0),cnt(0),p(0),Largest(0);
var: sell_price(0),remem(0),Didx(0);
if sdate != sdate[1] Then
Didx = Didx+1;
Lma=ma(C,120);
gap=C-Lma;
gapH=H-Lma;
gapL=Lma-L;
//매도
if gap[1]>0 Then {
if gapH[1]>=1 Then {
Largest = gapH[1];
For cnt=1 to 47 {
if gap[cnt]>0 Then {
if gapH[cnt]>=1 Then {
if gapH[cnt]>= Largest Then {
Largest=gapH[cnt];
p=cnt;
}
}
}
}
sell("S1", AtLimit, Lma+Largest);
sell_price = H;
} //end if
//추가 매도 진입
//진입이후 하루지나기 이전에만 해당
//매도진입후 날짜가 첫매도진입 일과 같거나 다음날에 첫진입시간 보다 이전시간에만 조건해당하면 추가매도
if MarketPosition == -1 and
(sdate == EntryDate or (sdate > EntryDate and Didx == Didx[BarsSinceEntry]+1 and stime < EntryTime)) Then{
if H >= sell_price+0.05 Then{
sell("S2");
sell_price=H;
}
}
} //end if
//매수
if gap[1]<0 Then{
if gapL[1]>=1 Then{
Largest = gapL[1];
For cnt=1 to 10 {
if gap[cnt]>0 Then{
if gapL[cnt]>=1 Then{
if gapL[cnt]>= Largest Then{
Largest=gapL[cnt];
p=cnt;
}
}
}
}
Buy("B1", AtLimit, Lma-Largest);
}
}
//손절시 청산
if MarketPosition<0 Then{ //매도 진입이후
if L<=EntryPrice+0.2 && H>=EntryPrice+0.2 Then{ //매도 이후 손절
ExitShort("매도손절청산"); //매도청산(skip)
}
#최대 2번 진입일경우는 평단가 +0.2/-0.2에 청산
if MaxEntries <= 2 then{
ExitShort("sp",atlimit,AvgEntryPrice-0.2);
ExitShort("sl",AtStop,AvgEntryPrice+0.2);
}
#최대 3번 진입일경우는 60선 터치하면 청산
if MaxEntries == 3 then{
if L > ma(c,60) Then
ExitShort("sx11",atlimit,ma(c,60));
if H < ma(c,60) Then
ExitShort("sx12",AtStop,ma(c,60));
}
#최대 4번이상 진입일경우는 120선 터치하면 청산
if MaxEntries >= 4 then{
if L > ma(c,120) Then
ExitShort("sx21",atlimit,ma(c,120));
if H < ma(c,120) Then
ExitShort("sx22",AtStop,ma(c,120));
}
}
if MarketPosition>0 Then{//매수 진입이후
if L<=EntryPrice-0.2 && H>=EntryPrice-0.2 Then{ //매수이후 손절
ExitLong("매수손절청산"); //매수청산(skip)
}
#최대 2번 진입일경우는 평단가 +0.2/-0.2에 청산
if MaxEntries <= 2 then{
ExitLong("bp",atlimit,AvgEntryPrice+0.2);
ExitLong("bl",AtStop,AvgEntryPrice-0.2);
}
#최대 3번 진입일경우는 60선 터치하면 청산
if MaxEntries == 3 then{
if L > ma(c,60) Then
ExitLong("bx11",AtStop,ma(c,60));
if H < ma(c,60) Then
ExitLong("bx12",AtLimit,ma(c,60));
}
#최대 4번이상 진입일경우는 120선 터치하면 청산
if MaxEntries >= 4 then{
if L > ma(c,120) Then
ExitLong("bx21",AtStop,ma(c,120));
if H < ma(c,120) Then
ExitLong("bx22",AtLimit,ma(c,120));
}
}
//익절시 청산
if MarketPosition==-1 && (L <= EntryPrice-0.2 && H >= EntryPrice - 0.2) Then{ //매도진입이후 익절일때
ExitShort("매도익절청산"); //매도청산 -1
}
if MarketPosition==1 && (L <= EntryPrice+0.2 && H>=EntryPrice+0.2) Then { //매수진입이후 익절일때
ExitLong("매수익절청산"); //매수청산 1
}
즐거운 하루되세요
> dy02 님이 쓴 글입니다.
> 제목 : 조건에 따른 수식작성 문의드립니다.
> 안녕하세요, 아래 조건대로 프로그램을 짜다가 문제가 있어 문의드립니다.
매도를 기준으로 하면, 제가 조건에 따라 첫번째 매도 진입은 했는데 그 이후 추가진입이 문제가 있습니다.
매도 진입전략 -> 첫번째진입 이후 24시간이내 첫번째진입가격의 고가 + 0.05 만큼의 가격 도달시 두번째 진입. 위와 같은 조건으로 이전 진입가격의 고가에서 +0.05만큼의가격 도달시 세번째진입,,등등. 단, 첫번째 진입이후 24시간이 지나면 모든 조건 reset하고 위과정 반복.
매도 청산전략 -> 첫진입과 두번째 진입을 청산하고자할 때는 진입가격 기준 -0.2 익절일 때 익절 청산, 진입가격 기준 +0.2 손절일 때 손절 청산.
단, 세번째 진입 이후부터는 60일선에 닿으면 청산, 그 이후 네번째 진입부터는 120일선에 닿으면 청산. 청산도 마찬가지로 첫번째 청산 이후 24시간이 지나면 모든 조건 reset하고 위과정 반복.
Input : Period(120);
var : Lma(0),gap(0),gapH(0),gapL(0),cnt(0),p(0),Largest(0);
var: sell_price(0),remem(0);
Lma=ma(C,120);
gap=C-Lma;
gapH=H-Lma;
gapL=Lma-L;
//매도
if gap[1]>0 Then {
if gapH[1]>=1 Then {
Largest = gapH[1];
For cnt=1 to 47 {
if gap[cnt]>0 Then {
if gapH[cnt]>=1 Then {
if gapH[cnt]>= Largest Then {
Largest=gapH[cnt];
p=cnt;
}
}
}
}
sell("S1", AtLimit, Lma+Largest);
sell_price = H;
} //end if
//추가 매도 진입
if sDate >= EntryDate(1)&& sDate<=EntryDate(1)+1 Then{ //진입이후 하루지나기 이전에만 해당
if H >= sell_price+0.05 Then{
sell("S2");
sell_price=H;
}
}
} //end if
//매수
if gap[1]<0 Then{
if gapL[1]>=1 Then{
Largest = gapL[1];
For cnt=1 to 10 {
if gap[cnt]>0 Then{
if gapL[cnt]>=1 Then{
if gapL[cnt]>= Largest Then{
Largest=gapL[cnt];
p=cnt;
}
}
}
}
Buy("B1", AtLimit, Lma-Largest);
}
}
//손절시 청산
if MarketPosition<0 Then{ //매도 진입이후
if L<=EntryPrice+0.2 && H>=EntryPrice+0.2 Then{ //매도 이후 손절
ExitShort("매도손절청산"); //매도청산(skip)
}
}
if MarketPosition>0 Then{//매수 진입이후
if L<=EntryPrice-0.2 && H>=EntryPrice-0.2 Then{ //매수이후 손절
ExitLong("매수손절청산"); //매수청산(skip)
}
}
//익절시 청산
if MarketPosition==-1 && (L <= EntryPrice-0.2 && H >= EntryPrice - 0.2) Then{ //매도진입이후 익절일때
ExitShort("매도익절청산"); //매도청산 -1
}
if MarketPosition==1 && (L <= EntryPrice+0.2 && H>=EntryPrice+0.2) Then { //매수진입이후 익절일때
ExitLong("매수익절청산"); //매수청산 1
}
번거로우시겠지만 여기서 무엇을 추가하고 고쳐야할지 알려주시면 정말 감사하겠습니다.ㅠㅠ
이 코드가 잘못되었다면 새로 작성해주시면 감사하겠습니다.
다음글
이전글