커뮤니티

스팟식 점검 부탁드립니다.

프로필 이미지
곰발바닥
2014-03-05 14:06:17
1287
글번호 222845
답변완료
안녕하세요! 항상 수고 많으십니다. 현물 동시호가 주문에 대해 궁금한점이 있어서 문의드립니다. 테스트시간이 동시호가 시간 10분정도 밖에 안되기때문에 많은 어려움이 있습니다. 아래식은 현물 동시호가 매수주문 질문에대한 예스스탁 답변입니다. "시작"메시지 출력과 수량부분만 수정하였습니다. 혹시 수량부분에 "IncompleteSignal.count"라고 사용 가능합니까 전략실행 차트에 3종목이 항상 실행되고 있다고 가정합니다. 1. 3종목 모두 신호가 들왔을경우 "시작"만 반복 출력됩니다. 매수주문이 안나가는것 같습니다. (에러가 난다든지 주문이 안나가서 스팟식 수정하거나 장중쓰는식을 동시호가에 쓰면 가끔 동시호가 시간끝나고 주문시간 출력란에 15:00:10,15:00:15 찍힙니다.) 2. 3종목중 한종목이라도 신호가 들오지않으면 null 에러 반복적으로 계속 발생합니다. 여러종목중에서 신호 들어온 종목만 매수하고 싶습니다. 그리고 주문수량을 각종목당 계좌잔고의 수량만큼 내는식도 알고싶습니다. 어떤식으로 수정해야할까요 많은 조언 부탁드립니다. ** 참고식 ** function Main_OnStart() { Main.SetTimer(1,5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 145500 ) { Main.MessageLog("시작"); var aSignal1 = Chart1.GetIncompleteSignal(); var aSignal2 = Chart2.GetIncompleteSignal(); var aSignal3 = Chart3.GetIncompleteSignal(); if (aSignal1[0] != null && aSignal1[0].SignalKind == 1) { Account1.OrderBuy(aSignal1[0].code, 10, 0, 1); } if (aSignal2[0] != null && aSignal2[0].SignalKind == 1) { Account1.OrderBuy(aSignal2[0].code, 100, 0, 1); } if (aSignal3[0] != null && aSignal3[0].SignalKind == 1) { Account1.OrderBuy(aSignal3[0].code, IncompleteSignal.count, 0, 1); } } }
답변 2
프로필 이미지

불꽃기사

2014-03-05 20:50:37

객체정보창에 보면 기본적으로 객체의 프로퍼티나 메쏘드에 대한 설명이 있으니 그거 참고하시면 쉽게 하실 수 있어요. ^^ Main.SetTimer(1,5000); 이건 5초마다 타이머가 발생한다는 뜻이죠. 그러니 현재 시간이 HHMMSS >= 145500 이런 조건이면 무조건 참이므로 "시작"을 출력하겠죠. 객체정보 창에 GetIncompleteSignal 이 메쏘드가 미완성신호가 없으면 null 을 리턴하고 있으면 Array 객체를 리턴한다고 했으니 if 문의 비교가 잘못되어 있다고 봅니다. aSignal1[0] != null 가 아니라 aSignal1 != null 이 되어야 하는 거죠. 자바스크립트 책을 사시던지 구글링하셔서 자바스크립트 배열 객체 문법편 공부하시면 좋습니다. 또한, 잔고내용 봐서 처리하시려면 Account 객체의 SetBalanceItem 메쏘드로 할 수 있죠. 이를테면, Account1.SetBalanceItem(Signal1[0].code); Account1.OrderBuy(aSignal1[0].code, Account1.Balance.count, 0, 1); 이런 식으로요. 잔고에 없는 종목일 경우의 예외처리는 조금만 생각하시면 쉽게 할 수 있어요. ^^
프로필 이미지

예스스탁 예스스탁 답변

2014-03-14 16:56:46

안녕하세요 예스스탁입니다. 1. 시스템식의 수량이 시스템 트레이딩 설정창에서 지정하셨으면 리턴이 되지 않습니다. 수량자체를 랭귀지안에서 buy함수안에서 처리하셨다면 수량이 리턴됩니다. 시스템식 안에서 처리하셨다면 aSignal1[0].count로 리턴받아 사요할수 있습니다. 2. 1455분이 되면 타이머를 중지하셔야 합니다. 해당식이라면 1455분이후에 5초간격으로 계속 동작합니다. 3 아래 내용으로 테스트 하시기 바랍니다. function Main_OnStart() { Main.SetTimer(1,5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList("시간",HHMMSS); if (nEventID == 1 && HHMMSS >= 145500 ) { Main.KillTimer(1); Main.MessageList("시작",HHMMSS); var aSignal1 = Chart1.GetIncompleteSignal(); var aSignal2 = Chart2.GetIncompleteSignal(); var aSignal3 = Chart3.GetIncompleteSignal(); if (aSignal1 != null && aSignal1[0] != null && aSignal1[0].signalKind == 1) { Main.MessageList(aSignal1[0]); Account1.OrderBuy(aSignal1[0].code, aSignal1[0].count, 0, 1); } if (aSignal2 != null && aSignal2[0] != null && aSignal2[0].signalKind == 1) { Main.MessageList(aSignal2[0]); Account1.OrderBuy(aSignal2[0].code, aSignal2[0].count, 0, 1); } if (aSignal3 != null && aSignal3[0] != null && aSignal3[0].signalKind == 1) { Main.MessageList(aSignal3[0]); Account1.OrderBuy(aSignal3[0].code, aSignal3[0].count, 0, 1); } } } 즐거운 하루되세요 > 곰발바닥 님이 쓴 글입니다. > 제목 : 스팟식 점검 부탁드립니다. > 안녕하세요! 항상 수고 많으십니다. 현물 동시호가 주문에 대해 궁금한점이 있어서 문의드립니다. 테스트시간이 동시호가 시간 10분정도 밖에 안되기때문에 많은 어려움이 있습니다. 아래식은 현물 동시호가 매수주문 질문에대한 예스스탁 답변입니다. "시작"메시지 출력과 수량부분만 수정하였습니다. 혹시 수량부분에 "IncompleteSignal.count"라고 사용 가능합니까 전략실행 차트에 3종목이 항상 실행되고 있다고 가정합니다. 1. 3종목 모두 신호가 들왔을경우 "시작"만 반복 출력됩니다. 매수주문이 안나가는것 같습니다. (에러가 난다든지 주문이 안나가서 스팟식 수정하거나 장중쓰는식을 동시호가에 쓰면 가끔 동시호가 시간끝나고 주문시간 출력란에 15:00:10,15:00:15 찍힙니다.) 2. 3종목중 한종목이라도 신호가 들오지않으면 null 에러 반복적으로 계속 발생합니다. 여러종목중에서 신호 들어온 종목만 매수하고 싶습니다. 그리고 주문수량을 각종목당 계좌잔고의 수량만큼 내는식도 알고싶습니다. 어떤식으로 수정해야할까요 많은 조언 부탁드립니다. ** 참고식 ** function Main_OnStart() { Main.SetTimer(1,5000); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 145500 ) { Main.MessageLog("시작"); var aSignal1 = Chart1.GetIncompleteSignal(); var aSignal2 = Chart2.GetIncompleteSignal(); var aSignal3 = Chart3.GetIncompleteSignal(); if (aSignal1[0] != null && aSignal1[0].SignalKind == 1) { Account1.OrderBuy(aSignal1[0].code, 10, 0, 1); } if (aSignal2[0] != null && aSignal2[0].SignalKind == 1) { Account1.OrderBuy(aSignal2[0].code, 100, 0, 1); } if (aSignal3[0] != null && aSignal3[0].SignalKind == 1) { Account1.OrderBuy(aSignal3[0].code, IncompleteSignal.count, 0, 1); } } }