커뮤니티

시초가 주문에 대해 질문드립니다.

프로필 이미지
먼지의추억
2014-05-26 11:13:54
904
글번호 222994
답변완료

첨부 이미지

질문 좀 할께요. 1. 시초가로 시스템 신호를 스팟에서 받아서 옵션을 주문 내는 것이 가능한가요? 예) if stime == 150000 then { sell("sel-001",atstop,nextbaropen); } setstopendofday(150000); 이 시초가 매도진입신호를 스팟에서 받아서 옵션중에 2.0이하 call과 put옵션을 양매도 주문을 내고,15시에 양매도 신호를 정리할 수 잇는 건가요? 위에것이 안되면, 구현할 수 있는 시초가 양매도 방법이 있으면 알려주시면 감사하겠습니다. var CC,CallOrderCode; var PP,PutOrderCode; function Main_OnStart() { EntryStart = 0; } //차트에서 신호 발생 function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 3) //Sell신호 발생 { Main.MessageList("매도신호발생:",Signal.signalKind); var UNum = Option.uppersATM;//ATM기준 위아래 행사 갯수 var LNum = Option.lowersATM; var PutCode = new Array(UNum+LNum+1);//풋 종목 찾기////////////////////////////////////////// var PutPrice = new Array(UNum+LNum+1);//전 행사가 갯수만큼 배열변수 만듬 for (var j = -UNum; j <= LNum; j++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장 { if (Option.GetCurrent(1, j) <= 1.5)//2.5이하이면 해당종목의 현재가와 종목코드를 저장하고 { PutPrice[j+UNum] = Option.GetCurrent(1, j); PutCode[j+UNum] = Option.GetATMPutRecent(j); } else { PutPrice[j+UNum] = -1;//2.0보다 크면 모두 -1를 저장 PutCode[j+UNum] = -1; } } PP = -1; PutOrderCode = -1; // PutPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장 for (var jj = -UNum; jj <= LNum; jj++)// 동일 방번호의 PutCode를 PutOrderCode에 저장 { if (PutPrice[jj+UNum] > PP) { PP = PutPrice[jj+UNum]; PutOrderCode = PutCode[jj+UNum]; } } if (PP > 0) { EntryStart = 1; Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 5), 0);//풋매도(1계약,매수5호가) Main.MessageList("풋매도",PutOrderCode); } var UNum = Option.uppersATM; //ATM기준 위아래 행사 갯수 var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); //콜 종목 찾기////////////////////////////////////////// var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장 { if (Option.GetCurrent(0, i) <= 1.5) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; //2.0보다 크면 모두 -1를 저장 CallCode[i+LNum] = -1; } } CC = -1; CallOrderCode = -1; for (var ii = -LNum; ii <= UNum; ii++) { if (CallPrice[ii+LNum] > CC) // CallPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장 { CC = CallPrice[ii+LNum]; CallOrderCode = CallCode[ii+LNum]; // 동일 방번호의 CallCode를 CallOrderCode에 저장 } } if (CC > 0) { EntryStart = 1; Account1.OrderSell(CallOrderCode, 1, Option.GetBidByCode(CallOrderCode, 5), 0); //콜매도(1계약, 매수5호가) Main.MessageList("콜매도",CallOrderCode); } } if (EntryStart == 1 && Signal.signalKind == 4) //ExitShort신호 발생 { Main.MessageList("매도청산 신호발생:",Signal.signalKind); Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 5), 0); //콜 매도청산(매수주문, 1계약, 매도5호가) Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 5), 0); //풋 매도청산(매수주문, 1계약, 매도5호가) Main.MessageList("전체청산",CallOrderCode); } } function Main_OnStart() { Main.SetTimer(3, 1000); Main.MessageList("스팟시작 - 타이머셋팅(1초)") } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= 90000) { //잔고갯수 var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.code.charAt(0) == "2" && Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost*2.5) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.code.charAt(0) == "3" && Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost*2.0) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-06-02 17:42:55

> 먼지의추억 님이 쓴 글입니다. > 제목 : 시초가 주문에 대해 질문드립니다. > 질문 좀 할께요. 1. 시초가로 시스템 신호를 스팟에서 받아서 옵션을 주문 내는 것이 가능한가요? 예) if stime == 150000 then { sell("sel-001",atstop,nextbaropen); } setstopendofday(150000); 이 시초가 매도진입신호를 스팟에서 받아서 옵션중에 2.0이하 call과 put옵션을 양매도 주문을 내고,15시에 양매도 신호를 정리할 수 잇는 건가요? 위에것이 안되면, 구현할 수 있는 시초가 양매도 방법이 있으면 알려주시면 감사하겠습니다. var CC,CallOrderCode; var PP,PutOrderCode; function Main_OnStart() { EntryStart = 0; } //차트에서 신호 발생 function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 3) //Sell신호 발생 { Main.MessageList("매도신호발생:",Signal.signalKind); var UNum = Option.uppersATM;//ATM기준 위아래 행사 갯수 var LNum = Option.lowersATM; var PutCode = new Array(UNum+LNum+1);//풋 종목 찾기////////////////////////////////////////// var PutPrice = new Array(UNum+LNum+1);//전 행사가 갯수만큼 배열변수 만듬 for (var j = -UNum; j <= LNum; j++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장 { if (Option.GetCurrent(1, j) <= 1.5)//2.5이하이면 해당종목의 현재가와 종목코드를 저장하고 { PutPrice[j+UNum] = Option.GetCurrent(1, j); PutCode[j+UNum] = Option.GetATMPutRecent(j); } else { PutPrice[j+UNum] = -1;//2.0보다 크면 모두 -1를 저장 PutCode[j+UNum] = -1; } } PP = -1; PutOrderCode = -1; // PutPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장 for (var jj = -UNum; jj <= LNum; jj++)// 동일 방번호의 PutCode를 PutOrderCode에 저장 { if (PutPrice[jj+UNum] > PP) { PP = PutPrice[jj+UNum]; PutOrderCode = PutCode[jj+UNum]; } } if (PP > 0) { EntryStart = 1; Account1.OrderSell(PutOrderCode, 1, Option.GetBidByCode(PutOrderCode, 5), 0);//풋매도(1계약,매수5호가) Main.MessageList("풋매도",PutOrderCode); } var UNum = Option.uppersATM; //ATM기준 위아래 행사 갯수 var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); //콜 종목 찾기////////////////////////////////////////// var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) //전 행사가의 콜을 불러와 가장 낮은 행사가부터 0번방을 시작으로 값을 저장 { if (Option.GetCurrent(0, i) <= 1.5) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; //2.0보다 크면 모두 -1를 저장 CallCode[i+LNum] = -1; } } CC = -1; CallOrderCode = -1; for (var ii = -LNum; ii <= UNum; ii++) { if (CallPrice[ii+LNum] > CC) // CallPrice의 모든 방의 값중 가장 큰값을 찾아 CC에 저장 { CC = CallPrice[ii+LNum]; CallOrderCode = CallCode[ii+LNum]; // 동일 방번호의 CallCode를 CallOrderCode에 저장 } } if (CC > 0) { EntryStart = 1; Account1.OrderSell(CallOrderCode, 1, Option.GetBidByCode(CallOrderCode, 5), 0); //콜매도(1계약, 매수5호가) Main.MessageList("콜매도",CallOrderCode); } } if (EntryStart == 1 && Signal.signalKind == 4) //ExitShort신호 발생 { Main.MessageList("매도청산 신호발생:",Signal.signalKind); Account1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(CallOrderCode, 5), 0); //콜 매도청산(매수주문, 1계약, 매도5호가) Account1.OrderBuy(PutOrderCode, 1, Option.GetAskByCode(PutOrderCode, 5), 0); //풋 매도청산(매수주문, 1계약, 매도5호가) Main.MessageList("전체청산",CallOrderCode); } } function Main_OnStart() { Main.SetTimer(3, 1000); Main.MessageList("스팟시작 - 타이머셋팅(1초)") } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (HHMMSS >= 90000) { //잔고갯수 var num = Account1.GetTheNumberOfBalances(); for (var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.code.charAt(0) == "2" && Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost*2.5) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } if (Account1.Balance.code.charAt(0) == "3" && Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost*2.0) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } }