커뮤니티

질문합니다

프로필 이미지
항해사
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);