커뮤니티
질문드립니다.
2017-07-03 22:59:10
176
글번호 110963
var : WH(0),WL(0),Dcnt(0);
#영업일 기준으로 한주의 시작
if DayOfWeek(bdate) < DayOfWeek(bdate[1]) Then{
WH = H;#주간 최고가를 저장할 변수(초기값 해당봉고가)
WL = L;#주간 최저가를 저장할 변수(초기값 해당봉저가)
Dcnt = 0; #주간 날짜수를 저장할 변수(초기값0)
}
#영업일이 변경되면 1씩 증가
if bdate != bdate[1] Then
Dcnt = Dcnt+1;
#WH에 저장된 값보다 큰 고가가 발생하면 WH에 값을 현재봉 고가로 변경
if H > WH Then
WH = H;
#WL에 저장된 값보다 작은 저가가 발생하면 WL에 값을 현재봉 저가로 변경
if L < WL Then
WL = L;
#주간 첫날이면
if Dcnt == 1 then{
var1 = max(WH,dayhigh(1));
var2 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.236)+log10(max(WH,dayhigh(1))));
var3 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.382)+log10(max(WH,dayhigh(1))));
var4 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.500)+log10(max(WH,dayhigh(1))));
var5 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.618)+log10(max(WH,dayhigh(1))));
var6 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.764)+log10(max(WH,dayhigh(1))));
var7 = min(WL,daylow(1));
}
else{#두번째 날부터
var1 = WH;
var2 = 10^(((log10(WH)-log10(WL))*-0.236)+log10(WH));
var3 = 10^(((log10(WH)-log10(WL))*-0.382)+log10(WH));
var4 = 10^(((log10(WH)-log10(WL))*-0.500)+log10(WH));
var5 = 10^(((log10(WH)-log10(WL))*-0.618)+log10(WH));
var6 = 10^(((log10(WH)-log10(WL))*-0.764)+log10(WH));
var7 = WL;
}
If DayOpen > Close Then
Sell();
if MarketPosition == -1 then{
if countif(CrossDown(c,var3),BarsSinceEntry) >= 1 and crossup(C,var3) Then
ExitShort();
if countif(CrossDown(c,var4),BarsSinceEntry) >= 1 and crossup(C,var4) Then
ExitShort();
if countif(CrossDown(c,var5),BarsSinceEntry) >= 1 and crossup(C,var5) Then
ExitShort();
if CrossDown(c,var6) Then
ExitShort();
if stime == 050000 or (stime > 050000 and stime< 050000) then{
exitlong();
exitshort();}
SetStopLoss(12*PriceScale);
}
올려주신 수식인데요. 당일청산 넣고 했습니다. 근데 사진을 보시면 청산과 진입이 동시에 되고있습니다. barssinceEntry로 경과봉수를 count하지만 crossdown과 crossup이 같이 일어날 수 없고 동시에 신호가 나오면 신호가 나오는즉슨 팔 수 밖에 없지않나요? 실제로 봉갯수를 보면 0개에 진입과 청산이 되고있음을 볼 수 있습니다.
2. 매도시그널이 12틱에 온전히 안되는 이유가 무엇인지요?
3. 사진과 같이 종가가 var선 어디서 시작할지 모르는데 저렇게 쭉 나열해놓으면 종가가 어디에 위치하든 위치하는 시점부터 (위에선을 배제한체) 라인을 구분하여 진입하여 청산하는건가요? 거기서 에러가뜨면 동시 진입, 청산이 이루어지지 않을까 싶은데요.
- 1. dhffueidoa.png (0.07 MB)
답변 2
예스스탁 예스스탁 답변
2017-07-04 14:25:38
안녕하세요
예스스탁입니다.
1
현재 작성하신 진입의 형태는 종가가 시초가보다 작기만 하면 진입하는 내용으로
청산신호봉의 종가가 시초가보다 작으면 같은봉에 신호가 들어갈수 있습니다.
진입식에 포지션확인 조건 추개해서 청산후에 들어가게 하시거나 하셔야 합니다.
2
PointStop으로 지정하셔야 합니다.
SetStopLoss(12*PriceScale,PointStop);
함수 도움말 참고하시기 바랍니다.
If MarketPosition == 0 and DayOpen > Close Then
Sell();
if MarketPosition == -1 then{
if countif(CrossDown(c,var3),BarsSinceEntry) >= 1 and crossup(C,var3) Then
ExitShort();
if countif(CrossDown(c,var4),BarsSinceEntry) >= 1 and crossup(C,var4) Then
ExitShort();
if countif(CrossDown(c,var5),BarsSinceEntry) >= 1 and crossup(C,var5) Then
ExitShort();
if CrossDown(c,var6) Then
ExitShort();
if stime == 050000 or (stime > 050000 and stime[1] < 050000) then{
exitlong();
exitshort();
}
}
SetStopLoss(12*PriceScale,PointStop);
3
진입이 어느봉에서 발생하든지 진입 후
지정한 라인을 하향이탈한 봉이 있고 해당 라인을 다시 상향돌파하면 청산합니다.
즐거운 하루되세요
> stockric 님이 쓴 글입니다.
> 제목 : 질문드립니다.
> var : WH(0),WL(0),Dcnt(0);
#영업일 기준으로 한주의 시작
if DayOfWeek(bdate) < DayOfWeek(bdate[1]) Then{
WH = H;#주간 최고가를 저장할 변수(초기값 해당봉고가)
WL = L;#주간 최저가를 저장할 변수(초기값 해당봉저가)
Dcnt = 0; #주간 날짜수를 저장할 변수(초기값0)
}
#영업일이 변경되면 1씩 증가
if bdate != bdate[1] Then
Dcnt = Dcnt+1;
#WH에 저장된 값보다 큰 고가가 발생하면 WH에 값을 현재봉 고가로 변경
if H > WH Then
WH = H;
#WL에 저장된 값보다 작은 저가가 발생하면 WL에 값을 현재봉 저가로 변경
if L < WL Then
WL = L;
#주간 첫날이면
if Dcnt == 1 then{
var1 = max(WH,dayhigh(1));
var2 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.236)+log10(max(WH,dayhigh(1))));
var3 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.382)+log10(max(WH,dayhigh(1))));
var4 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.500)+log10(max(WH,dayhigh(1))));
var5 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.618)+log10(max(WH,dayhigh(1))));
var6 = 10^(((log10(max(WH,dayhigh(1)))-log10(min(WL,daylow(1))))*-0.764)+log10(max(WH,dayhigh(1))));
var7 = min(WL,daylow(1));
}
else{#두번째 날부터
var1 = WH;
var2 = 10^(((log10(WH)-log10(WL))*-0.236)+log10(WH));
var3 = 10^(((log10(WH)-log10(WL))*-0.382)+log10(WH));
var4 = 10^(((log10(WH)-log10(WL))*-0.500)+log10(WH));
var5 = 10^(((log10(WH)-log10(WL))*-0.618)+log10(WH));
var6 = 10^(((log10(WH)-log10(WL))*-0.764)+log10(WH));
var7 = WL;
}
If DayOpen > Close Then
Sell();
if MarketPosition == -1 then{
if countif(CrossDown(c,var3),BarsSinceEntry) >= 1 and crossup(C,var3) Then
ExitShort();
if countif(CrossDown(c,var4),BarsSinceEntry) >= 1 and crossup(C,var4) Then
ExitShort();
if countif(CrossDown(c,var5),BarsSinceEntry) >= 1 and crossup(C,var5) Then
ExitShort();
if CrossDown(c,var6) Then
ExitShort();
if stime == 050000 or (stime > 050000 and stime< 050000) then{
exitlong();
exitshort();}
SetStopLoss(12*PriceScale);
}
올려주신 수식인데요. 당일청산 넣고 했습니다. 근데 사진을 보시면 청산과 진입이 동시에 되고있습니다. barssinceEntry로 경과봉수를 count하지만 crossdown과 crossup이 같이 일어날 수 없고 동시에 신호가 나오면 신호가 나오는즉슨 팔 수 밖에 없지않나요? 실제로 봉갯수를 보면 0개에 진입과 청산이 되고있음을 볼 수 있습니다.
2. 매도시그널이 12틱에 온전히 안되는 이유가 무엇인지요?
3. 사진과 같이 종가가 var선 어디서 시작할지 모르는데 저렇게 쭉 나열해놓으면 종가가 어디에 위치하든 위치하는 시점부터 (위에선을 배제한체) 라인을 구분하여 진입하여 청산하는건가요? 거기서 에러가뜨면 동시 진입, 청산이 이루어지지 않을까 싶은데요.
stockric
2017-07-04 14:36:57
답변감사합니다. 포지션확인후 진입은 마켓포지션 == 2 then으로 넣어도 괜찮을런지요. 전전봉값을 반환시키게되나요? 아니면 그냥 조건만족후 청산된 전전봉인가요? 틀렸으면 로직 부탁드립니다 .감사합니다.
다음글
이전글