커뮤니티

예스스팟 Q&A

답변완료

한글이 깨져 나옵니다.

한동안 예스스팟을 안보다가 다시 해보려고 편집기를 열었더니 한글이 네모로 나옵니다. 게시판 검색을 통해 폰트 파일을 내려받았지만 소용이 없습니다. 해결 방법 알려주시기 바랍니다. 감사합니다.
프로필 이미지
체결가능
2014-05-26
873
글번호 222995
답변완료

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

질문 좀 할께요. 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); } } } }
프로필 이미지
먼지의추억
2014-05-26
911
글번호 222994
답변완료

미완성 신호 발생 후 일정 시간 후 지속 여부 확인

안녕하세요. 미완성 신호가 발생한 이후 일정 시간이 지난 시점에서 다시 확인하여 미완성 신호가 여전히 유지되고 있는지 확인하고자 합니다. 1) OnRiseIncompleteSignal 이벤트에서 미완성 신호 최초 발생시 타이머를 동작시키고 2) 1분 후에 GetIncompleteSignal()을 통해 현재도 미완성 신호가 진행 중인지 확인 이렇게 생각했으나... GetIncompleteSignal()은 확인하는 시점에 미완성 신호가 살아 있는지 없어졌는지를 알려주지는 않는 것 같네요. 특정 시점에서 미완성 신호가 살아 있는지 확인하는 방법을 부탁드립니다.
프로필 이미지
곰탈
2014-05-25
898
글번호 222993
답변완료

문의 드립니다.

항상 친절하신 답변 감사드립니다. 아래 912번 문의와 관련하여 보충 문의 드립니다. 원유의 경우를 예로 들어서 질문 드리고자 합니다. A. 초기 스탑 ((손절)): 2틱 손절 A-1. 원유의 경우, 1틱이 0.01포인트. 가령 최초에 배럴당 가격 100.00달러에 매수진입했다고 가정하면, 1틱은 가격 100포인트의 0.01%. 따라서 2틱 스탑이면 0.02% 스탑임. ((= *0.0002 하락하는 경우임)) 따라서, 아래 식으로 하면 될런지요? if (MarketData1.current <= Account1.Balance.avgUnitCost *0.9998) { Entry1 = false; Account1.OrderSell(MarketData1.code, Account1.Balance.count, MarketData1.current, 1); ///// ((현재가로 시장가 청산주문하고자 합니다)). } A-2. 일단 이 주문이 나간 후, 어떤 이유에서든간에 위 주문이 체결되지 않고 남아 있다가 나중에 엉뚱하게 주문이 체결되어 버리는 일이 생기지 않도록, 이 주문이 나간 후, 이 주문이 필요없어 지면 이 미체결 주문을 취소하는 식도 같이 알려 주시면 대단히 감사하겠습니다. [[밑의 질문 항목들에서도, 그 주문이 미체결 상태에서 필요 없어 지면 그 미체결 주문을 없애 치우는 (취소하는) 식들을 포함해 주시길 부탁 드립니다.]] B. 추적 스탑: 아래와 같이 추적스탑을 하려고 하면, 식을 어떻게 작성해야 할지요? 1. 4틱 오를 때까지는((가격이 100.01 ~ 100.04)) 2틱 스탑 ((예를 들자면 아래와 같은 상황이 되겠습니다. 1틱 오르면, 즉 가격이 100.01이 되면 스탑은 99.99에 설정됨. // 2틱 오르면 가격은 100.02. 이 때 스탑은 100.00. // 3틱 오르면 가격은100.03. 이 때 스탑은 100.01. // 4틱 오르면 100.04. 스탑은 100.02)) 2. 5틱 오른 후 15틱 오를 때까지((예: 100.05 ~ 100.15))는 3틱 스탑 ((예: 100.00에 매수 진입 후 5틱 오르면 100.05. 이 때 스탑은 100.02에 설정. ~ 15틱 오르면 100.15. 스탑은 100.12)) 3. 16틱 오른 후 30틱 오를 때까지: 10틱 스탑 ((예: 16틱 오르면 가격은 100.16. => 이 때 스탑은 100.06. ~ 30틱 오르면 가격은 100.30 => 이 때 스탑은 100.20)) 4. 31틱 이상 ~ 50틱까지 오르면: 5틱 스탑 ((예: 31틱 오르면 가격은 100.31 => 이 때 스탑은 100.26)) 5. 51틱 이상 오르면 2틱 스탑 ((예: 만일 51틱 오르면 가격은 100.51 => 이 때 스탑은 100.49)) 감사합니다! 아래: 912번 식에서, 한 품목만 거래하는 경우 ((부분 복사해 옴)): var Entry1,H1,L1; function Main_OnStart() { Entry1 = false; } function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID) { //Account1계좌에 MarketData1종목이 신규로 들어오면 if (sAccntNum == Account1.number && lUp*dateID == 30001 && MarketData1.code == sItemCode) { Entry1 = true; H1 = MarketData1.current; L1 = MarketData1.current; Account1.SetBalanceItem(MarketData1.code, 0); } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID) { //MarketData1종목 진입이후 최고가/최저가 계산 if (Entry1 == true && sItemCode == MarketData1.code && lUp*dateID == 20001) { if (MarketData1.current > H1); H1 = MarketData1.current; if (MarketData1.current < L1); L1 = MarketData1.current; //매수포지션 if (Account1.Balance.position == 2) { //1% 익절 if (MarketData1.current >= Account1.Balance.avgUnitCost *1.04) { Entry1 = false; Account1.OrderSell(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } //1% 손절 if (MarketData1.current <= Account1.Balance.avgUnitCost *0.99) { Entry1 = false; Account1.OrderSell(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } //3%이상 상승후 최고가격에서 1% 하락하면 청산 if (H1 >= Account1.Balance.avgUnitCost *1.03 && MarketData1.current <= H1*0.99 ) { Entry1 = false; Account1.OrderSell(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } } //매도포지션 if (Account1.Balance.position == 2) { //4% 익절 if (MarketData1.current <= Account1.Balance.avgUnitCost *0.96) { Entry1 = false; Account1.OrderBuy(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } //1% 손절 if (MarketData1.current >= Account1.Balance.avgUnitCost *1.01) { Entry1 = false; Account1.OrderBuy(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } //3%이상 하락후 최저가격에서 1% 상승하면 청산 if (L1 <= Account1.Balance.avgUnitCost *0.97 && MarketData1.current >= L1*1.01 ) { Entry1 = false; Account1.OrderBuy(MarketData1.code, Account1.Balance.count, MarketData1.Bid(1), 2); } } }
프로필 이미지
즐겁게
2014-05-30
951
글번호 222992
답변완료

EuroFX 종가 청산 방법 샘플 예제 부탁합니다.

EuroFX 종가 청산 방법 샘플 예제 부탁합니다. 섬머타임문제로 한국시각 기준으로 종가 청산하면 차후 문제 소지가 있어서 해외선물 거래소 시각 기준으로 종가 청산 시키려고 하려면 어케 해야되나요? 참고 : 종목객체.time 의 프로퍼티에 대한 표현 방식에 따라 (messagelog , 기타 ) 시각이 다르게 찍히는거로 보임
프로필 이미지
경복궁
2014-05-22
1049
글번호 222990
답변완료

미체결 잔량이 남아 있는데도 [잔량 없는 주문] 이라는 오류 메시지 나옴

1. 지정가 주문으로 10 계약 , 매수 1 호가에 대기 주문 2. 10계약중 7 계약은 체결, 3 계약 미체결로 매수 1 호가 대기 상태 3. 매수 1호가가 올라가서 , 로직에 의해 정정주문 발생시킴 4, 정정주문 발생시키니 [잔량없는 주문] 메시지 나오면서 오류 발생됨
프로필 이미지
경복궁
2014-05-22
1062
글번호 222989
답변완료

문의

예스스팟 모의 계좌로 야간선물 지수옵션과 주식선물 그리고 ELW 거래는 불가능한가요? 안 된다면 가능하게 해주시면 안되나요?? 시뮬도 안해보고 실계좌에서 직접 테스트 한다는 건 좀 위험해 보여서요. 사고날 수 있으니...
프로필 이미지
한걸음씩
2014-05-22
979
글번호 222988
답변완료

예스스팟과 API (himt.ocx)를 연동할 수 있는 방법이 있을까요 ??

현재 api 프로그램을 통해 주문과 계좌 현황이 관리되고 있는데, 선물시스템 신호에 따라 외가 옵션 매매를 자동으로 하는 기능을 추가하고자 합니다. 그런데 선물시스템 신호는 예스스팟에서만 이벤트로 사용할 수 있어서 api 프로그램에서 직접 주문을 낼 수는 없을 것 같은데요... 혹시 상호간에 Interfacing 할 수 있는 방법이 있을지요 ?? 아니면 선물신호가 발생할 때 api에서 어떤 식으로든 이벤트를 받을 수 있을까요 ??
프로필 이미지
폴피닉스
2014-05-21
957
글번호 222986
답변완료

확장차트 - 제거 및 신호 구분

질문1) Main.ReqChartEx 함수를 통해 확장 차트를 생성한 이후에 제거하는 방법이 있는지요? 또한, 확장차트에 설정한 시스템 파라미터를 변경할 수 있나요? 예를 들어, 특정 시점에만 차트를 생성해서 시스템을 설정하여 신호를 발생시키고, 청산 후에는 생성한 차트를 제거하고자 합니다. 즉, 장중에 차트가 생성되었다 제거되는 작업이 수차례 반복되겠습니다. 질문2) Main.ReqChartEx 함수를 사용하여 3개의 확장 차트를 생성하고 시스템을 올린 후, 각 확장차트에서 발생한 Signal을 구분하여 처리할 수 있나요? 종목이 다른 경우는 ChartEx.GetCode(1)을 이용해서 구분할 수 있겠으나, 3개 확장차트가 모두 동일한 종목을 사용하고 있는 경우에 어떻게 신호를 구분하나요?
프로필 이미지
곰탈
2014-05-18
929
글번호 222983
답변완료

챠트 세팅

안녕하세요. 선물 시가기준 양옵션을 구한후 콜풋 2.0대의 옵션을 기준옵션으로 상대콜풋 옵션을 구하고 싶습니다 가령 콜 265 의 가격이 2.0에 근접, 상대 풋 265를 참고 데이타로 설정 풋 260의 상대로 콜 260의 옵션을 참조 데이타로 설정하는 확장 챠트. 아래의 수식에서는 콜을 기준으로 CoPut(상대옵션)의 행사가를 구하는게..... 감사합니다 var Start; var UNum; var LNum; var Num = 0; var CallCode; var CallPrice; var CoPut; var CallATM; var PutATM; var PutCode; var PutPrice; var CC; var PP; var PLsum; var CallOrderCode; var PutOrderCode; var OrderCode; var CallStart; var PutStart; var ChartEx1 ;//= null; var ChartEx4 ;//= null; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; Main.MessageList("시 작"); var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 5분에 if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030 { Start = 1; UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; // CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.3); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; // PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode); //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.open;//current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; //CallATM = -1; for (var j = -LNum; j <= UNum; j++) { if (Option.GetExercisePrice(0, j) == ATM) { CallATM = Option.GetATMCallRecent(j,0); CallOrderCode = Option.GetATMCallRecent(j-Num,0); } } //PutATM = -1; for (var j = -UNum; j <= LNum; j++) { if (Option.GetExercisePrice(1, j) == ATM) { PutATM = Option.GetATMPutRecent(j,0); CoPut = Option.GetATMPutRecent(j-Num,0); } } Main.MessageList("콜ATM :",CallATM ,"풋ATM :",PutATM,"상대옵션 :",CoPut); //확장 차트객체 요청 var ChartSet4 = new ReqChartItem(CallOrderCode,2, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover1",YL_TYPE_NORMAL,null,TradeSet4,null); //참조데이터 추가 var R31 = new ReqChartItem(CoPut, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R31,R32,R33); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, null, ReferDataSet4); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(2) == CoPut) { ChartEx4 = ChartEx; OrderCode = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("CoPut코드",ChartEx4.GetCode(2)); } }
프로필 이미지
파문일기
2014-05-17
866
글번호 222982