커뮤니티

예스스팟 Q&A

답변완료

검토부탁드립니다.

수고 많으십니다. 당일 15시 25분에 잔고에 있는 종목전체를 불러와, 매수10호가로 청산하고자 할때 Main.ReqMarketData(RemainObject[i], 0, 0)로 불러와 매도호가에 RemainObject[i].Bid(10)로 작성해봤는데... ReferenceError메세지가 뜨며 실행이 안되네요.... 도움 부탁드립니다. //15시 25분에 잔고에 있는 종목 전량 청산(당일청산) if (DayX == false && HHMMSS >= 152500 && RcvData >= 1) { DayX = true; Main.KillTimer(1); Main.MessageList("동시호가 잔고청산 주문실행",EntryItem); var num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); var RemainObject = []; //종목객체 설정 Main.ReqMarketData(RemainObject[i], 0, 0); Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, RemainObject[i].Bid(10),0); //잔고 매수10호가 전량청산 // Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); //시장가 Main.MessageList("동시호가 청산매도: ", Account1.Balance.code); } }
프로필 이미지
체로키
2017-11-21
2801
글번호 224251
답변완료

예스스팟 메뉴얼이 다운이 않되네요 ㅜㅜ

체크좀해주세요 바로 복구가힘들면 메일로좀보내주세요pokx890@naver.com
프로필 이미지
하얀머리
2017-11-20
2702
글번호 224250
답변완료

질문입니다.

주가지수 선물에 적용되는 시스템을 예스랭귀지로 작성을 하였습니다. 예스랭귀지는 신호를 발생시키는 역할까지만 하고 채결에는 관여하지 않는다고 들었습니다. 그래서 예스스팍을 이용하려고 합니다. 질문1. 예스랭귀지로 작성한 시스템을 창에 걸어놓고, 그 상태에서 전입과 청산만을 예스스팟으로 컨트롤할수 있나요? 즉, 예스랭귀지로 작서한 시스템을 예스스팟으로 옮기는 작업이 꼭 필요한 것인지 궁금합니다. 질문2. 예스스팟으로 진입과 청산을 컨트롤할때, 예를들어 매수진입 후 매수청산과 매도진입이 동시에 일어날 경우, 순간적으로 증거금이 부족해서 신호가 채결되지 않는 경우가 있습니다. 이럴때를 대비해서 매수청산과 매도진입 시그널이 동시에 나왔다고 하더라도, 매수청산 후 증거금이 계좌로 들어온 후 매도진입 시그널을 채결시키는 기능이 예스스팟으로 가능한지 알고 싶습니다. 꼭 알고 싶은 사항입니다. 자세한 답변 부탁드립니다. 감사합니다. 추가로 질문하나 더 드립니다. 예를들어 선물차트에서 50이평을 crossup하면 매수, crossdown하면 매도하는 시스템이 있다고 가정할때, 이를 예스랭귀지로 작성했습니다. 저는 예스스팟으로 나오는 신호는 어떻게 해서든 채결시키고 싶습니다. 예를들어 현재상태가 매수인데 매도 시그널이 발생했을 때, 만약 미채결이 발생했다고하면, 매x초(예를들어5초0마다 주문을 정정하여 그때의 현재가, 혹은 1호가에 진입시키도록하고 예스스팟을 작성하고 싶습니다. 예시로 부탁드립니다. 감사합니다.
프로필 이미지
yanartas
2017-11-22
2645
글번호 224249
답변완료

수식을 부탁드립니다..

수고가 많으신데요.. 요즘 바쁘신가 봐요... 응답이 예전보다 늦어진 느낌이 들어서요.. 수식하나 부탁을 드립니다.. A종목을 매수하자 마자 B종목을 매수하고 싶습니다.. 스팟에서 구현하여 보려 하는데 곧바로 매수가 되지 않고 일정한 시간이 지난 다음에 매수가 됩니다.. 방법을 알려 주시면 감사하겠습니다...
프로필 이미지
상현
2017-11-21
2656
글번호 224248

페리카나1235 님에 의해서 삭제되었습니다.

프로필 이미지
페리카나1235
2017-11-10
23
글번호 224247
답변완료

전반적인 사용 질문 드립니다.

안녕하세요. 예스스팟을 이제 막 관심을 가지고 시작하고 있는 사람입니다. 테스트 코드도 짜보고, 이것저것 해보고 있는 상황인데요... 궁금한 부분이 있어서 글 올립니다. 너무 기초적인 질문이라도 양해 부탁 드립니다. 검색을 했으나 명확하지 않은 부분에 대해 질문 드립니다. 1. 예스스팟 전략을 장이 마감한 이후에 (집에와서) 과거 데이터(오늘 시장데이터)를 통해 시뮬레이션 하는 것이 불가능한 것이 맞나요? 2. 다른 글을 확인해 보면, 예스랭기쥐는 1번의 시뮬레이션이 가능다고 보았습니다. 게시판 분위기가 예스스팟 보다는 예스랭기쥐를 주로 사용하시는 것 같아서 질문 드립니다. 주로 예스랭기쥐 만으로 자동시스템트레이딩을 사용하시나요? 예스랭기쥐가 강력한(?) 이유가 있나요? 3. 예스랭기쥐로 검색식 작성 -> 파워종목검색에 등록한 검색식 추가하여 사용자지정 검색 추가 -> 예스스팟에서 사용자지정 사용해서 종목 검색 및 매매 전체 그림을 위와 같이 이해하고 있습니다. 이해 한 것이 맞나요? 게시판 글을 보다보면 차트를 사용해서 시그널을 생성하고 예스스팟에서 캐치하여 매매를 처리하시는 것 같은 질문이 많은 것 같습니다. 주로 차트를 사용해서 매수/매도 포지션을 잡아 처리하시는지 혹은 이렇게 하는 큰 장점이 있는지 궁금합니다. 4. 전략 실행 시 시험적용을 하는 경우, 주문이 들어감 혹은 주문이 완료 된 것과 같은 이벤트를 받지 못하기 때문에 테스트 하기가 조금 어렵습니다. 모의투자 외에 시험적용 모드에서 위의 이벤트를 모사하는 것이 가능한가요? 고맙습니다.
프로필 이미지
후타리
2017-11-09
2653
글번호 224244
답변완료

스팟식 문의드립니다.

한국투자증권에서 해외선물 3종목을 예스트레이더 차트신호에 따라서 매매하는 식인데요 3개차트 신호대로 매매하다가 현재 총 손실이 포지션이 있던 없던간에 현재 예탁자산평가액이 스팟적용했을 시기보다 -200000만원이상 떨어졌을때 모든포지션을 청산하고 차트에 신호가 나 와도 더 이상 매매하지 않게 하려고 합니다. 진입식을 잘 작동하는데 매매정지식이 뭔가 잘못된거 같은데 확인 좀 부탁드립니다. 근데 조회를 원화 기준으로 해야하는 달러기준으로 해야하는지요? -200000만원을 원화 기준으로 해야하나요 달러기준으로 -200으로 해야하나요? 원화기준으로 매매정지 손실금액을 맞추고 싶습니다. 달러기준 조회를 햇을때는 달러로 변하고 원화조회를 햇을때는 원화 기준에 맞춰지는 건가요? var i1; var X; //스팟 시작시 function Main_OnStart() { Main.MessageList("스팟 시작"); //i1에 예수금/예탁총액 저장 i1 = Account1.GetBalanceETCinfo(4); X = 0; Main.SetTimer(1, 1000);//5초 타이머 셋팅 Main.MessageList("예수금", Account1.GetBalanceETCinfo(4)); } //------------------------------------------------------------------------------------- //차트에서 신호나오면 MarketData1 종목에 대해 주문 function Chart1_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다 { //매수진입신호 발생 if (Signal.signalKind == 1 && X == 0) { Main.MessageList("J1매수"); Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,0,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J1매수청산"); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } //매도진입신호 발생 if (Signal.signalKind == 3 && X == 0) { Main.MessageList("J1매도"); Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,0,1); } //매도청산신호 발생 if (Signal.signalKind == 4) { //잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J1매도청산"); Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } //------------------------------------------------------------------------------------- //차트에서 신호나오면 MarketData1 종목에 대해 주문 function Chart2_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다 { //매수진입신호 발생 if (Signal.signalKind == 1 && X == 0) { Main.MessageList("J2매수"); Account1.OrderBuy(Main.GetOrderCode(MarketData2.code), Signal.count,0,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J2매수청산"); Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } //매도진입신호 발생 if (Signal.signalKind == 3 && X == 0) { Main.MessageList("J2매도"); Account1.OrderSell(Main.GetOrderCode(MarketData2.code), Signal.count,0,1); } //매도청산신호 발생 if (Signal.signalKind == 4) { //잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J2매도청산"); Account1.SetBalance(Main.GetOrderCode(MarketData2.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } //------------------------------------------------------------------------------------- //차트에서 신호나오면 MarketData1 종목에 대해 주문 function Chart3_OnRiseSignal(Signal) //차트1에서 완성신호이벤트가(온라이즈시그널)) 발생하면 시그널에 그정보를 넘겨준다 { //매수진입신호 발생 if (Signal.signalKind == 1 && X == 0) { Main.MessageList("J3매수"); Account1.OrderBuy(Main.GetOrderCode(MarketData3.code), Signal.count,0,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J3매수청산"); Account1.SetBalance(Main.GetOrderCode(MarketData3.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } //매도진입신호 발생 if (Signal.signalKind == 3 && X == 0) { Main.MessageList("J3매도"); Account1.OrderSell(Main.GetOrderCode(MarketData3.code), Signal.count,0,1); } //매도청산신호 발생 if (Signal.signalKind == 4) { //잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산 Main.MessageList("J3매도청산"); Account1.SetBalance(Main.GetOrderCode(MarketData3.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } } } //--------------------------------------------------------------------- function Main_OnTimer(nEventID) { //현재 예수금/예탁총액이 스팟시작시값보다 20만원 이상 감소했으면 if (nEventID == 1 && Account1.GetBalanceETCinfo(4) <= i1-200000) { //미체결주문 전체 취소 var num1 = Account1.GetTheNumberOfUnfills(); for(i = 0; i < num1; i++) { Account1.SetUnfillIndex(i) Account1.OrderCancel(Account1.Unfill.orderNum); } //잔고 전체 종목 청산 var num2 = Account1.GetTheNumberOfBalances(); for(i = 0; i < num2; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } X = 1; Main.MessageList("진입금지요건만족"); } }
프로필 이미지
수다리
2017-11-07
2651
글번호 224243
답변완료

당일 마지막 봉을 알 수 있나요?

안녕하세요. 당일 청산을 무조건 하려고 합니다. 동시호가 전 마지막 봉 ADD되면 미체결취소+보유종목 청산을 하려고 하는데.. 질문1. 직접 시간값을 하드코딩하여 15 라는 텍스트 값을 쓰는 방법 말고 당일 장 종료 시간을 어디서 받아오거나, 마지막 봉이라는 값을 특정 변수로 알 수는 없나요? 15시라는 값을 직접 쓰게되면 가끔 특정일에 정규 장 종료 시간보다 빨리 하거나 할 결우 평소에 계속 체크하고 있다가 수정해줘야되서 혹시 다른 방법이 있나 해서 문의드립니다. 질문2. 직접 시간값을 하드코딩 해서 써야된다고 하면 정규시간에 종료되지 않는 경우를 관리할 수 있는 좋은 방법이 있을까요? 방법은 여러가지겠지만, 좋은 방법이 떠오르지 않아서 문의드립니다. 답변 부탁드립니다. 감사합니다.
프로필 이미지
데칸
2017-11-05
2644
글번호 224242
답변완료

청산 수식 수정 요청드림

아래 수식은 2계좌에서 1종목씩 거래시 합산 순수익 날때 동시 청산수식과 합산 순손실시 동시 청산 수식 입니다 그런데 합산 순수익이 날때 동시 청산이 이루어지지 않고 한 계좌만 청산이 되고 다른 계좌는 그대로 남아 있습니다. 2계좌 합산 순수익이나 순손실이 날 때 두계좌가 동시 청산 되도록 수식을 수정 요청드립니다. //계좌객체1 Account1 //계좌객체2 Account2 function Main_OnStart() { Main.SetTimer(1,5000);//5초 단위 체크 } function Main_OnTimer(nEventID) { if (nEventID == 1) { //총수익 누적할 변수 var sumPL = 0; //계좌1의 종목수 var num1 = Account1.GetTheNumberOfBalances(); //계좌2의 종목수 var num2 = Account2.GetTheNumberOfBalances(); //계좌1과 계좌2에 종목이 각 1개 이상일때만 if (num1 >= 1 && num2 >= 1) { //잔고 종목 총손익 계산 for (i = 0; i < num1; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { sumPL = sumPL + (Account1.Balance.avgUnitCost - Account1.Balance.current)*Account1.Balance.count; } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { sumPL = sumPL + (Account1.Balance.current - Account1.Balance.avgUnitCost)*Account1.Balance.count; } } //잔고 종목 총손익 계산 for (i = 0; i < num2; i++) { Account2.SetBalanceIndex(i); if (Account2.Balance.count > 0 && Account2.Balance.position == 1) { sumPL = sumPL + (Account2.Balance.avgUnitCost - Account2.Balance.current)*Account2.Balance.count; } if (Account2.Balance.count > 0 && Account2.Balance.position == 2) { sumPL = sumPL + (Account2.Balance.current - Account2.Balance.avgUnitCost)*Account2.Balance.count; } } //총손익이 특정값(0)보다 크면 전체종목 청산 if (sumPL > 0) { for (i = 0; i < num1;i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } for (i = 0; i < num2; i++) { Account2.SetBalanceIndex(i); if (Account2.Balance.count > 0 && Account2.Balance.position == 1) { Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count,0,1); } if (Account2.Balance.count > 0 && Account2.Balance.position == 2) { Account2.OrderSell(Account2.Balance.code, Account2.Balance.count,0,1); } } } //총손익이 특정값(0)보다 작으면 전체종목 청산 if (sumPL < 0) { for (i = 0; i < num;i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } for (i = 0; i < num;i++) { Account2.SetBalanceIndex(i); if (Account2.Balance.count > 0 && Account2.Balance.position == 1) { Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count,0,1); } if (Account2.Balance.count > 0 && Account2.Balance.position == 2) { Account2.OrderSell(Account2.Balance.code, Account2.Balance.count,0,1); } } } } } }
프로필 이미지
종호
2017-11-03
2686
글번호 224241
답변완료

잔고 확인 청산 방법 문의

매수청산, 매도청산의 상황에서 예를들면 이전에 인터넷이 비정상적으로 끊겨 재접속 되었을시에 잔고가 있어도 청산 주문이 나가지 않습니다. 그래서 저는 청산신호에는 무조건 잔고를 시장가로 청산하는 스팟 로직을 구현하려 하는데 쉽지가 않습니다. 1. 매수(매도)청산 신호가 나왔을때 잔고를 확인하여 모든 잔고를 시장가로 청산하는 로직 제 기존 수식에 청산부분에만 삽입,수정하려고 합니다. 부탁드립니다. 참고 기존 제 수식(선물신호->옵션매수식) //계좌객체 추가 : Account1 //챠트객체 추가 : Chart1 //예트챠트명과 일치 //옵션데이타 추가 : Option //입력변수 추가 : Near //숫자형, 진입하고자 하는 가까운 옵션값 //입력변수 추가 : Vol // 진입수량 var T; var CC, CallOrderCode; var PP, PutOrderCode; var BC, BP; function Main_OnStart() { T = 0; Main.MessageList("옵션매수 전용시작"); } function Chart1_OnRiseSignal(Signal) { // 매수신호 if (Signal.signalKind == 1) { T = 1; Main.MessageList("Buy신호 발생"); var UNum = Option.uppersATM; 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++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-Near); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //종목을 찾았으면 if (CC < 99999999) { BC = CallOrderCode; Account1.OrderBuy(BC, Vol, Option.GetAskByCode(BC, 5)+2, 0); } } //매수청산 신호 if (T==1 && Signal.signalKind == 2) { T = 0; num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 2); Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } Main.MessageList("ExitLong신호 발생"); } //매도 신호 if (Signal.signalKind == 3) { T = -1; Main.MessageList("Sell신호 발생"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-Near); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //종목을 찾았으면 if (PP < 99999999) { BP = PutOrderCode; Account1.OrderBuy(BP, Vol, Option.GetAskByCode(BP, 5)+2, 0); } } //매도청산 신호 if (T==-1 && Signal.signalKind == 4) { T = 0; num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 2); Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } Main.MessageList("ExitShort신호 발생"); } }
프로필 이미지
궁금궁금123
2017-11-01
2888
글번호 224237