커뮤니티
질문합니다
2008-01-24 23:42:35
1139
글번호 14505
항상 행복하십시오.
무조건 제일 앞의 봉부터 현재봉까지 크로스업과 크로스다운 지점을 찾으면서 현재봉까지 와서 배열변수에 저장되어있는 값을 출력하는 식 입니다.
MACD(12,26,9)가 시그널선을 상향돌파하면 '1'을 매매신호[0]에 저장하고 이전의 크로스다운 지점에서 매매신호[0]에 저장되어있던 '-1'을 매매신호[1]로 밀어내는 식 입니다. 하향돌파 할때도 같은 원리 입니다.
그런데 크로스한 지점에서는 의도대로 되지만 한 캔들 뒤로 가면 매매신호[1]에 있던 '-1'이 '+1'로 바뀌어 버립니다. 한 캔들더 뒤로 가도 마찬가지 입니다.
원인을 추정 해보았지만 확실한 원인을 모르겠네요.
무엇이 잘못되었는지 찾아 주세요.
VAR: cnt(0);
var:SHIFTcnt(0);
ARRAY:매매신호[2](0);
FOR cnt= index downto 0
{
var:
value3(0), value4(0), value6(0),value7(0) ;
value3 = MACD(12,26);
value4 = ema(value3,9);
value6= IFF( CROSSUP(value3[cnt] , value4[cnt]) ,1,0);
value7= IFF( CROSSDOWN(value3[cnt] , value4[cnt]) ,1,0) ;
IF value6[cnt]==1 then
{
매매신호[0]= 1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
IF value7[cnt]== 1 then
{
매매신호[0]= -1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
}//FOR문 끝
Plot1(매매신호[0],"매매신호[0]",red);
Plot2(매매신호[1],"매매신호[1]",BLUE);
답변 2
예스스탁 예스스탁 답변
2008-01-25 09:07:41
안녕하세요
예스스탁압니다.
상향돌파 하향돌파 시점에서만
값을 1혹은 -1로 저장후 전값을 뒷방으로 넘겨야 하는데
매봉 뒤로 넘기게 되어 있습니다.
그러므로 상향 혹은 하향돌파이후에 [0]번방의 1 혹은 -1값이
[1]번방으로 넘어거서 해당 현상이 일어납니다.
식을 간단히 작성해 봤습니다.
3번방까지 만드시므로 for문을 돌리시지 않으셔도 됩니다.
ARRAY:매매신호[2](0);
var: value3(0), value4(0), value6(0),value7(0) ;
value3 = MACD(12,26);
value4 = ema(value3,9);
if crossup(value3,value4) Then{
매매신호[0] = 1;
매매신호[1] = 매매신호[0][1];
매매신호[2] = 매매신호[1][1];
}
if crossdown(value3,value4) then{
매매신호[0] = -1;
매매신호[1] = 매매신호[0][1];
매매신호[2] = 매매신호[1][1];
}
plot1(매매신호[0]);
plot2(매매신호[1]);
plot3(매매신호[2]);
즐거운 하루되세요
> 항해사 님이 쓴 글입니다.
> 제목 : 질문합니다
> 항상 행복하십시오.
무조건 제일 앞의 봉부터 현재봉까지 크로스업과 크로스다운 지점을 찾으면서 현재봉까지 와서 배열변수에 저장되어있는 값을 출력하는 식 입니다.
MACD(12,26,9)가 시그널선을 상향돌파하면 '1'을 매매신호[0]에 저장하고 이전의 크로스다운 지점에서 매매신호[0]에 저장되어있던 '-1'을 매매신호[1]로 밀어내는 식 입니다. 하향돌파 할때도 같은 원리 입니다.
그런데 크로스한 지점에서는 의도대로 되지만 한 캔들 뒤로 가면 매매신호[1]에 있던 '-1'이 '+1'로 바뀌어 버립니다. 한 캔들더 뒤로 가도 마찬가지 입니다.
원인을 추정 해보았지만 확실한 원인을 모르겠네요.
무엇이 잘못되었는지 찾아 주세요.
VAR: cnt(0);
var:SHIFTcnt(0);
ARRAY:매매신호[2](0);
FOR cnt= index downto 0
{
var:
value3(0), value4(0), value6(0),value7(0) ;
value3 = MACD(12,26);
value4 = ema(value3,9);
value6= IFF( CROSSUP(value3[cnt] , value4[cnt]) ,1,0);
value7= IFF( CROSSDOWN(value3[cnt] , value4[cnt]) ,1,0) ;
IF value6[cnt]==1 then
{
매매신호[0]= 1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
IF value7[cnt]== 1 then
{
매매신호[0]= -1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
}//FOR문 끝
Plot1(매매신호[0],"매매신호[0]",red);
Plot2(매매신호[1],"매매신호[1]",BLUE);
항해사
2008-01-26 23:32:05
답변 감사합니다. 그런데 실제 사용 의도는 질문한 식과 조금 다릅니다. 너무 길어서 간단하게 하다보니 식의 의도가 전달이 잘 않된것 같습니다.
왜? 조건 만족 할 때 만이 아니라 매 봉 마다 시프트가 일어나는지 이유를 알아야 하는데 질문했던 식으로 설명해주십시오.
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 질문합니다
> 안녕하세요
예스스탁압니다.
상향돌파 하향돌파 시점에서만
값을 1혹은 -1로 저장후 전값을 뒷방으로 넘겨야 하는데
매봉 뒤로 넘기게 되어 있습니다.
그러므로 상향 혹은 하향돌파이후에 [0]번방의 1 혹은 -1값이
[1]번방으로 넘어거서 해당 현상이 일어납니다.
식을 간단히 작성해 봤습니다.
3번방까지 만드시므로 for문을 돌리시지 않으셔도 됩니다.
ARRAY:매매신호[2](0);
var: value3(0), value4(0), value6(0),value7(0) ;
value3 = MACD(12,26);
value4 = ema(value3,9);
if crossup(value3,value4) Then{
매매신호[0] = 1;
매매신호[1] = 매매신호[0][1];
매매신호[2] = 매매신호[1][1];
}
if crossdown(value3,value4) then{
매매신호[0] = -1;
매매신호[1] = 매매신호[0][1];
매매신호[2] = 매매신호[1][1];
}
plot1(매매신호[0]);
plot2(매매신호[1]);
plot3(매매신호[2]);
즐거운 하루되세요
> 항해사 님이 쓴 글입니다.
> 제목 : 질문합니다
> 항상 행복하십시오.
무조건 제일 앞의 봉부터 현재봉까지 크로스업과 크로스다운 지점을 찾으면서 현재봉까지 와서 배열변수에 저장되어있는 값을 출력하는 식 입니다.
MACD(12,26,9)가 시그널선을 상향돌파하면 '1'을 매매신호[0]에 저장하고 이전의 크로스다운 지점에서 매매신호[0]에 저장되어있던 '-1'을 매매신호[1]로 밀어내는 식 입니다. 하향돌파 할때도 같은 원리 입니다.
그런데 크로스한 지점에서는 의도대로 되지만 한 캔들 뒤로 가면 매매신호[1]에 있던 '-1'이 '+1'로 바뀌어 버립니다. 한 캔들더 뒤로 가도 마찬가지 입니다.
원인을 추정 해보았지만 확실한 원인을 모르겠네요.
무엇이 잘못되었는지 찾아 주세요.
VAR: cnt(0);
var:SHIFTcnt(0);
ARRAY:매매신호[2](0);
FOR cnt= index downto 0
{
var:
value3(0), value4(0), value6(0),value7(0) ;
value3 = MACD(12,26);
value4 = ema(value3,9);
value6= IFF( CROSSUP(value3[cnt] , value4[cnt]) ,1,0);
value7= IFF( CROSSDOWN(value3[cnt] , value4[cnt]) ,1,0) ;
IF value6[cnt]==1 then
{
매매신호[0]= 1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
IF value7[cnt]== 1 then
{
매매신호[0]= -1;
FOR SHIFTcnt= 1 to 2
{
매매신호[SHIFTcnt]= 매매신호[SHIFTcnt-1][1];
}
}
}//FOR문 끝
Plot1(매매신호[0],"매매신호[0]",red);
Plot2(매매신호[1],"매매신호[1]",BLUE);