커뮤니티

ReqMarketData - 옵션 종목 시세 업데이트

프로필 이미지
곰탈
2013-08-05 11:01:02
527
글번호 222486
답변완료
아래 코드는 다른 분의 문의 내용에 답변 주신 내용입니다. 차트 신호 발생 시 현재 진입한 옵션 종목의 시세를 확인하고 주문하는 내용이었습니다. 한 가지 추가로 질문 드릴 내용은 차트 신호와 관계 없이 현재 진입 중인 옵션 종목의 현재 시세를 계속 업데이트하면서 확인하려면 어떻게 해야하는지요? ============================================== var BuyCallCode; var Sig; var Request; function Chart1_OnRiseSignal(Signal) { //발생된 신호종류 저장 Sig = Signal.signalKind; //buy신호 발생하면 if (Sig == 1 ) { //ATM 콜옵션 종목코드 저장 BuyCallCode = Option.GetATMCallRecent(0); //BuyCallCode 종목객체 요청 //(종목코드는 BuyCallCode, 일봉갯수는 1개(전일것만), 수급데이터는 0개) Main.ReqMarketData(BuyCallCode, 1,0); //Request는 true(매수신호 발생 후 한번만 요청하기 위한 변수) Request = true; } } //요청한 종목객체 생성완료 function Main_OnRcvMarketData(MarketData) { //item에 수신받은 종목객체 저장 var item = MarketData; //최근 buy신호 발생되었고 //Request는 true이고 //생성된 종목객체의 종목코드가 BuyCallCode와 같으면 if (Sig == 1 && Request == true && item.code == BuyCallCode) { //Request는 false Request = false; //현재가가 전일종가보다 크면 if (item.current > item.GetPrevClose(1)); { //BuyCallPrice에 매도2호가 저장 var BuyCallPrice = item.Ask(2); //BuyCallCode종목을 BuyCallPrice에 지정가 매수주문 Account1.OrderBuy(BuyCallCode, 1, BuyCallPrice, 0); //주문 후 종목객체 삭제 Main.RemoveMarketData(item); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-08-06 18:52:40

안녕하세요 예스스탁입니다. 올리신 식은 특정옵션의 값 중 전일종가가 필요해서 따로 종목객체로 옵션종목을 생성해서 사용한 식입니다. 스크립트 객체에 옵션객체를 추가하시면 전옵션종목에 대해 실시간으로 시세를 모두 받으실 수 있습니다. 필요할때 종목코드등으로 지정해서 값을 확인하실 수 있습니다. 아래와 같이 작성하시면 옵션객체 추가없이 잔고의 옵션종목에 대해 종목객체를 요청해 사용하게 됩니다. 스팟 처음 실행시에 우선 계좌에서 옵션종목을 찾아 해당 종목들의 종목객체를 생성하게 됩니다. 이후에는 잔고에 옵션종목이 추가되면 해당 종목의 종목객체도 요청이 됩니다. 기존에 있는 종목이면 요청하지 않습니다. 생성된 종목객체는 item이란 배열변수에 저장이 됩니다. 생성순서에 따라 [0],[1],[2],[3] 순으로 배열방을 사용합니다. 종목객체 시세 업데이트 이벤트에서 엡데이트가 발생될때 어떤 배열방의 종목이 업데이트 되는지 확인하고 사용하시면 됩니다. 영문 업데이트가 게시판 금칙어라 식상의 모든 영문 업데이트는 Up*date로 되어 있습니다. *제거 하시고 저장 하신 후 참고하시기 바랍니다. 스크립트 객체화면에 계좌객체가 있어야 합니다. 객체명 Account1입니다. 속성에서 선물옵션계좌를 지정하시면 됩니다. var cnt = 0; var item = new Array(100); //스팟 처음 실행시 선물옵션계좌의 옵션종목에 대해 모두 종목객체를 요청 function Main_OnStart() { //계좌의 잔고수 var num = Account1.GetTheNumberOfBalances() for (var i = 0; i < num; i++) { //잔고 세팅 Account1.SetBalanceIndex(i); //종목코드 앞자리가 2나 3으로 시작 if (Account1.Balance.code.charAt(0)=="2" || Account1.Balance.code.charAt(0)=="3") { //종목객체 요청(과거 일봉 데이터 10개포함) Main.ReqMarketData(Account1.Balance.code, 10,0); Main.MessageList("종목코드",Account1.Balance.code,"생성요청"); } } } //스팟 처음 실행 후 선물옵션계좌에 옵션종목이 편입될때 종목객체를 요청 function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) //*제거 { //잔고에 옵션종목이 추가되면 if (sAccntNum == Account1.number && lUp*dateID == 30001 //*제거 && (sItemCode.charAt(0) =="3" || sItemCode.charAt(0) =="2")) { //종목객체 요청(과거 일봉 데이터 10개포함) Main.ReqMarketData(Account1.Balance.code, 10,0); Main.MessageList("종목코드",Account1.Balance.code,"생성요청"); } } //요청한 종목객체가 수신되면 function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체 수신 : ",MarketData.code); //수신되는 순서 카운트 cnt = cnt+1; //순서대로 item배열방에 해당 객체 저장 item[cnt] = MarketData; } //종목객체에 대해 시세 업데이트가 되면 function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { for (var ii = 0; ii < num; ii++) { //현재 업데이트 된 시세가 item의 ii방 종목과 같으면 if (sItemCode == itme[ii].code) { //메세지 출력 Main.MessageList("방번호:",ii,"/종목코드:", itme[ii].code,"/현재가:", item[ii].current) } } } 즐거운 하루되세요 > 곰탈 님이 쓴 글입니다. > 제목 : ReqMarketData - 옵션 종목 시세 업데이트 > 아래 코드는 다른 분의 문의 내용에 답변 주신 내용입니다. 차트 신호 발생 시 현재 진입한 옵션 종목의 시세를 확인하고 주문하는 내용이었습니다. 한 가지 추가로 질문 드릴 내용은 차트 신호와 관계 없이 현재 진입 중인 옵션 종목의 현재 시세를 계속 업데이트하면서 확인하려면 어떻게 해야하는지요? ============================================== var BuyCallCode; var Sig; var Request; function Chart1_OnRiseSignal(Signal) { //발생된 신호종류 저장 Sig = Signal.signalKind; //buy신호 발생하면 if (Sig == 1 ) { //ATM 콜옵션 종목코드 저장 BuyCallCode = Option.GetATMCallRecent(0); //BuyCallCode 종목객체 요청 //(종목코드는 BuyCallCode, 일봉갯수는 1개(전일것만), 수급데이터는 0개) Main.ReqMarketData(BuyCallCode, 1,0); //Request는 true(매수신호 발생 후 한번만 요청하기 위한 변수) Request = true; } } //요청한 종목객체 생성완료 function Main_OnRcvMarketData(MarketData) { //item에 수신받은 종목객체 저장 var item = MarketData; //최근 buy신호 발생되었고 //Request는 true이고 //생성된 종목객체의 종목코드가 BuyCallCode와 같으면 if (Sig == 1 && Request == true && item.code == BuyCallCode) { //Request는 false Request = false; //현재가가 전일종가보다 크면 if (item.current > item.GetPrevClose(1)); { //BuyCallPrice에 매도2호가 저장 var BuyCallPrice = item.Ask(2); //BuyCallCode종목을 BuyCallPrice에 지정가 매수주문 Account1.OrderBuy(BuyCallCode, 1, BuyCallPrice, 0); //주문 후 종목객체 삭제 Main.RemoveMarketData(item); } } }