커뮤니티

수식 검증 부탁드립니다

프로필 이미지
재령
2014-08-13 00:02:27
1297
글번호 223122
답변완료
항상수고 많으십니다 ChartExe[1]은 매수차트이고 ChartExe[2]는 매도차트입니다. 전일 매도포지션이더라도 종가봉에 매도청산 예비신호 발생 시 동시호가 매도진입 불가입니다. 나머지 변수들은 올바르게 리턴하는데, 미완성봉을 리턴하는 aSignal 이 undefined 가 나오는데 이유를 알수 없습니다. 감사합니다. var aSignal ; var RcvChCount ; var ChartExe = new Array(20); var SystemSet = new Array(20); var ChartSet = new Array(20); function Main_OnStart() { Main.SetTimer(99, 3000); RcvChCount = 0 ; ChartSet[0] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[0],SystemSet[0],null); ChartSet[1] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[1],SystemSet[1],null); } function Main_OnRcvChartEx(ChartEx) { RcvChCount = RcvChCount + 1 ; ChartExe[RcvChCount] = ChartEx ; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var aSignal = ChartExe[2].GetIncompleteSignal(); Main.MessageList("종목코드1",ChartExe[1].GetCode(1) ); Main.MessageList("종목코드2",ChartExe[2].GetCode(1) ); Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() ); Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() ); if ( nEventID == 99 && HHMMDD < 090000 && ( ChartExe[2].GetOpenContracts() < 0 ) //매도청산 예비신호발생시 동시호가 매도진입 불가 && !(aSignal != null && aSignal[0].signalKind == 4 ) ) { Main.KillTimer(99); Main.MessageLog("동시호가매도조건충족:매도실행"); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-08-22 16:59:25

안녕하세요 예스스탁입니다. var aSignal; var RcvChCount =0; var ChartExe = new Array(20); var SystemSet = new Array(20); var ChartSet = new Array(20); function Main_OnStart() { RcvChCount = 0 ; ChartSet[0] = new ReqChartItem( "00000000" ,5 ,CHART_PERIOD_MINUTE, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[0],SystemSet[0],null); ChartSet[1] = new ReqChartItem( "00000000" ,5 , CHART_PERIOD_MINUTE, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[1],SystemSet[1],null); } function Main_OnRcvChartEx(ChartEx) { RcvChCount = RcvChCount + 1 ; ChartExe[RcvChCount] = ChartEx ; if (RcvChCount == 2) Main.SetTimer(99, 3000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList("종목코드1",ChartExe[1].GetCode(1) ); Main.MessageList("종목코드2",ChartExe[2].GetCode(1) ); Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() ); Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() ); var aSignal = ChartExe[2].GetIncompleteSignal(); Main.MessageList("aSignal[0]",aSignal[0]); if ( nEventID == 99 && HHMMDD < 090000 && ( ChartExe[2].GetOpenContracts() == 0 ) //매도청산 예비신호발생시 동시호가 매도진입 불가 && !(aSignal != null && aSignal[0].signalKind == 4 ) ) { Main.KillTimer(99); Main.MessageLog("동시호가매도조건충족:매도실행"); } } 전화상으로 답변을 잘못드렸습니다. 따라 미완성신호 이벤트를 사용하지 않으셔도 됩니다. 작성하신 내용에서 타이머의 셋팅만 2개차트가 모두 만들어진 이후에 셋팅되게 수정했습니다. 위와 같이 처리하시면 첨부된 그림과 같이 "동시호가매도조건충족:매도실행" 메세지 출력됩니다. 차트의 주기와 ChartExe[2].GetOpenContracts() == 0 조건은 조건만족을 시키기 위해 변경했습니다. 컴퓨터의 시간을 오전 9시 이전으로 셋팅하시면 9시 이후에도 테스트를 해보실수 있습니다. 즐거운 하루되세요 > 재령 님이 쓴 글입니다. > 제목 : 수식 검증 부탁드립니다 > 항상수고 많으십니다 ChartExe[1]은 매수차트이고 ChartExe[2]는 매도차트입니다. 전일 매도포지션이더라도 종가봉에 매도청산 예비신호 발생 시 동시호가 매도진입 불가입니다. 나머지 변수들은 올바르게 리턴하는데, 미완성봉을 리턴하는 aSignal 이 undefined 가 나오는데 이유를 알수 없습니다. 감사합니다. var aSignal ; var RcvChCount ; var ChartExe = new Array(20); var SystemSet = new Array(20); var ChartSet = new Array(20); function Main_OnStart() { Main.SetTimer(99, 3000); RcvChCount = 0 ; ChartSet[0] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[0],SystemSet[0],null); ChartSet[1] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false); SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null); Main.ReqChartEx(ChartSet[1],SystemSet[1],null); } function Main_OnRcvChartEx(ChartEx) { RcvChCount = RcvChCount + 1 ; ChartExe[RcvChCount] = ChartEx ; } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); var aSignal = ChartExe[2].GetIncompleteSignal(); Main.MessageList("종목코드1",ChartExe[1].GetCode(1) ); Main.MessageList("종목코드2",ChartExe[2].GetCode(1) ); Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() ); Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() ); if ( nEventID == 99 && HHMMDD < 090000 && ( ChartExe[2].GetOpenContracts() < 0 ) //매도청산 예비신호발생시 동시호가 매도진입 불가 && !(aSignal != null && aSignal[0].signalKind == 4 ) ) { Main.KillTimer(99); Main.MessageLog("동시호가매도조건충족:매도실행"); } }