커뮤니티

수식이 이상한건지 아니면 이상한 부분이 있는지 확인 부탁드립니다.

프로필 이미지
개냥이
2013-05-08 17:50:41
201
글번호 62979
답변완료
제 시스템 식 중에 일부인데 다음과 같이 상수를 넣어야 할 것을 반복되는 부분도 있고 편의를 위해서 n을 변수로 할당해서 다음과 같이 만들어줬습니다. var : n(0),period26(26); n=2; if H[n+4] < ema(C[n+4],period26) and H[n+3] >= ema(C[n+3],period26) and H[n+2] >= ema(C[n+2],period26) and H[n+1] >= ema(C[n+1],period26) and ............ then sell(""); 그런데 분명히 진입해야 되는 부분에서 진입 안되서 점검을 하다보니 n=2로 넣는 부분을 없애고 그냥 숫자를 집어넣어서 H[n+4] 대신에 H[6] 이런식으로 만들어주니 원하는 진입신호가 제대로 나옵니다. var : period26(26); if H[6] < ema(C[6],period26) and H[5] >= ema(C[5],period26) and H[4] >= ema(C[4],period26) and H[3] >= ema(C[3],period26) and ............ then sell(""); 그런데 그전에도 비슷한 경우가 있더군요. 비슷한 경우에 문제가 되면 모르는데 동일하게 작성해줘도 어느 부분은 그냥 신호가 잘 나옵니다. 시스템을 전부 올리기는 조금 뭐하긴 한데 혹시 제가 작성한 내용이 문제될만한 부분이 있는지 아니면 다른 문제인지 모르겠네요. messagelog로 필요한 부분 데이타까지 출력해봐도 문제점을 못 찾겠습니다. 확인 부탁드립니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-05-09 10:26:23

안녕하세요 예스스탁입니다. var : n(0),period26(26); n=2; if H[n+4] < ema(C[n+4],period26) and #1번 지수이평 H[n+3] >= ema(C[n+3],period26) and #2번 지수이평 H[n+2] >= ema(C[n+2],period26) and #3번 지수이평 H[n+1] >= ema(C[n+1],period26) and #4번 지수이평 ............ then sell(""); 와 같이 작성하시면 수식이 처음에 메모리가 셋팅이 될때 n이 0이므로 1번 지수이평은 과거값이 4개봉, 2번 지수이평은 과거값이 3개봉, 3번 지수이평은 과거값이 2개봉, 4번 지수이평은 과거값이 1개봉 이 필요한 것으로 인식하여 메모리가 셋팅이 됩니다. 이후 수식에서 n에 2값이 할당되므로 만들지 않은 6,5,4,3전봉의 값을 요구하므로 잘못된 값을 리턴하게 됩니다. ema를 변수처리하시고 해당 변수에 이전값을 가져오게 작성하시면 됩니다. 또한 수식에서 함수는 작성한 수만큼 계산이 됩니다. 동일 계산식이면 해당 계산식을 변수에 할당하고 해당 변수를 사용하시면 중복계산을 피하게 되므로 수식의 가독성이 올라가게 됩니다. var : n(0),period26(26); var1 = ema(C,Period26); n=2; if H[n+4] < var1[n+4] and #1번 지수이평 H[n+3] >= var1[n+3] and #2번 지수이평 H[n+2] >= var1[n+2] and #3번 지수이평 H[n+1] >= var1[n+1] and #4번 지수이평 ............ then sell(""); 즐거운 하루되세요 > 개냥이 님이 쓴 글입니다. > 제목 : 수식이 이상한건지 아니면 이상한 부분이 있는지 확인 부탁드립니다. > 제 시스템 식 중에 일부인데 다음과 같이 상수를 넣어야 할 것을 반복되는 부분도 있고 편의를 위해서 n을 변수로 할당해서 다음과 같이 만들어줬습니다. var : n(0),period26(26); n=2; if H[n+4] < ema(C[n+4],period26) and H[n+3] >= ema(C[n+3],period26) and H[n+2] >= ema(C[n+2],period26) and H[n+1] >= ema(C[n+1],period26) and ............ then sell(""); 그런데 분명히 진입해야 되는 부분에서 진입 안되서 점검을 하다보니 n=2로 넣는 부분을 없애고 그냥 숫자를 집어넣어서 H[n+4] 대신에 H[6] 이런식으로 만들어주니 원하는 진입신호가 제대로 나옵니다. var : period26(26); if H[6] < ema(C[6],period26) and H[5] >= ema(C[5],period26) and H[4] >= ema(C[4],period26) and H[3] >= ema(C[3],period26) and ............ then sell(""); 그런데 그전에도 비슷한 경우가 있더군요. 비슷한 경우에 문제가 되면 모르는데 동일하게 작성해줘도 어느 부분은 그냥 신호가 잘 나옵니다. 시스템을 전부 올리기는 조금 뭐하긴 한데 혹시 제가 작성한 내용이 문제될만한 부분이 있는지 아니면 다른 문제인지 모르겠네요. messagelog로 필요한 부분 데이타까지 출력해봐도 문제점을 못 찾겠습니다. 확인 부탁드립니다.