커뮤니티
22784 문제있습니다
2012-02-06 14:14:35
375
글번호 47402
22784 글 답변으로 신호가 정확히 발생하고있다 라고 하셨는데, 문제 발생합니다.
코스피200연결선물 CME 기준이고요, 첨부파일 보시면 스크린 샷에 b1신호가 18시에 나온 것을 확인할 수 있습니다. 모두 나열한 것이 아닌데도 20여개의 b1거래 중 4개가 나왔으면 적은 횟수가 아닙니다. 밑에 질문드린 그대로 다시 확인 부탁드립니다.
///////////////////////////////////////////////////////////////////
안녕하세요
예스스탁입니다.
테스트해본 결과 신호가 정확히 발생하고 있습니다.
야간장 첫봉에는 b0, 첫봉이 아니면 b1신호만 발생합니다.
테스트한 수식입니다.
input : 채널기간(10);
var : BarCountInDay(0),idx(0);
if BarIndex <= 0 then
{
BarCountInDay = 0;
}
else
{
if stime == 180000 then
{BarCountInDay = 0;}
else
{BarCountInDay = BarCountInDay + 1;}
}
idx = BarCountInDay;
// 첫 봉에 진입하면 OnClose로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx==0 then buy("b0",OnClose);
// 첫 봉이 아니면 AtStop으로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx!=0 Then buy("b1",AtStop,highest(H,채널기간)[1]+0.05);
SetStopLoss(0.2,PointStop);
즐거운 하루되세요
> 하얀마음흑구 님이 쓴 글입니다.
> 제목 : 다시 질문드립니다.
> 밑에 답변주신 것 감사합니다. 알려주신 사용자 함수를 바탕으로 간단한 시스템을 적용해 보았는데 문제가 있어 다시 질문드립니다. CME기준입니다.
// 이게 밑에서 알려주신 사용자 함수입니다.
var : BarCountInDay(0),idx(0);
if BarIndex <= 0 then
{
BarCountInDay = 0;
}
else
{
if stime == 180000 then
{BarCountInDay = 0;}
else
{BarCountInDay = BarCountInDay + 1;}
}
idx = BarCountInDay;
// 첫 봉에 진입하면 OnClose로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx==0 then buy("b0",OnClose);
// 첫 봉이 아니면 AtStop으로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx!=0 Then buy("b1",AtStop,highest(H,채널기간)[1]+0.05);
이게 작성해본 로직인데요, 저는 첫 봉일때는 "b0"의 신호만 나와야하고 첫 봉이 아닐때는 "b1"의 신호만 나오는 것을 가정하고 만들었습니다. 그러나 idx!=0 부분이 제대로 역할을 못하는 것인지 첫 봉인데도 불구하고 "b1" 신호가 섞여나오고 있습니다.
*** 진입논리를 바꾸지 않는 가정하에 첫봉에는 "b0"의 신호만 나오도록 하려면 어떻게 해야할까요?
- 1. 발생신호.JPG (0.25 MB)
답변 1
예스스탁 예스스탁 답변
2012-02-06 17:09:22
안녕하세요
예스스탁입니다.
차트가 CME로만 되어 있으신것 같습니다.
atstop은 현재봉의 if조건이 만족하면 다음봉을 감시하게 되므로
만약 5분봉 차트에서 4시 55분에 조건이 만족하면 다음봉(18시봉)에
신호가 발생할 수 있습니다.
b1신호를 아래와 같이 변경하시면 됩니다.
새벽의 마지막봉에 if문이 만족하지 못하도록
b1의 if문의 시간을 (stime >= 90000 or stime < 45500)로 변경했습니다.
input : 채널기간(10);
var : BarCountInDay(0),idx(0);
if BarIndex <= 0 then
{
BarCountInDay = 0;
}
else
{
if stime == 180000 then
{BarCountInDay = 0;}
else
{BarCountInDay = BarCountInDay + 1;}
}
idx = BarCountInDay;
// 첫 봉에 진입하면 OnClose로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx==0 then buy("b0",OnClose);
// 첫 봉이 아니면 AtStop으로 진입하는 로직
If (stime >= 90000 or stime < 45500) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx!=0 Then buy("b1",AtStop,highest(H,채널기간)[1]+0.05);
SetStopLoss(0.2,PointStop);
즐거운 하루되세요
> 하얀마음흑구 님이 쓴 글입니다.
> 제목 : 22784 문제있습니다
> 22784 글 답변으로 신호가 정확히 발생하고있다 라고 하셨는데, 문제 발생합니다.
코스피200연결선물 CME 기준이고요, 첨부파일 보시면 스크린 샷에 b1신호가 18시에 나온 것을 확인할 수 있습니다. 모두 나열한 것이 아닌데도 20여개의 b1거래 중 4개가 나왔으면 적은 횟수가 아닙니다. 밑에 질문드린 그대로 다시 확인 부탁드립니다.
///////////////////////////////////////////////////////////////////
안녕하세요
예스스탁입니다.
테스트해본 결과 신호가 정확히 발생하고 있습니다.
야간장 첫봉에는 b0, 첫봉이 아니면 b1신호만 발생합니다.
테스트한 수식입니다.
input : 채널기간(10);
var : BarCountInDay(0),idx(0);
if BarIndex <= 0 then
{
BarCountInDay = 0;
}
else
{
if stime == 180000 then
{BarCountInDay = 0;}
else
{BarCountInDay = BarCountInDay + 1;}
}
idx = BarCountInDay;
// 첫 봉에 진입하면 OnClose로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx==0 then buy("b0",OnClose);
// 첫 봉이 아니면 AtStop으로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx!=0 Then buy("b1",AtStop,highest(H,채널기간)[1]+0.05);
SetStopLoss(0.2,PointStop);
즐거운 하루되세요
> 하얀마음흑구 님이 쓴 글입니다.
> 제목 : 다시 질문드립니다.
> 밑에 답변주신 것 감사합니다. 알려주신 사용자 함수를 바탕으로 간단한 시스템을 적용해 보았는데 문제가 있어 다시 질문드립니다. CME기준입니다.
// 이게 밑에서 알려주신 사용자 함수입니다.
var : BarCountInDay(0),idx(0);
if BarIndex <= 0 then
{
BarCountInDay = 0;
}
else
{
if stime == 180000 then
{BarCountInDay = 0;}
else
{BarCountInDay = BarCountInDay + 1;}
}
idx = BarCountInDay;
// 첫 봉에 진입하면 OnClose로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx==0 then buy("b0",OnClose);
// 첫 봉이 아니면 AtStop으로 진입하는 로직
If (stime >= 90000 or stime < 50000) and MarketPosition == 0 and H < highest(H,채널기간)[1] Then if idx!=0 Then buy("b1",AtStop,highest(H,채널기간)[1]+0.05);
이게 작성해본 로직인데요, 저는 첫 봉일때는 "b0"의 신호만 나와야하고 첫 봉이 아닐때는 "b1"의 신호만 나오는 것을 가정하고 만들었습니다. 그러나 idx!=0 부분이 제대로 역할을 못하는 것인지 첫 봉인데도 불구하고 "b1" 신호가 섞여나오고 있습니다.
*** 진입논리를 바꾸지 않는 가정하에 첫봉에는 "b0"의 신호만 나오도록 하려면 어떻게 해야할까요?