커뮤니티

예스스팟 Q&A

답변완료

종목객체 사용과 관련하여 질문드립니다.

늘 도움을 주셔서 고맙습니다. 호가가 다음과 같이 구성되어 있을 때 즉, 실제 호가창이 비어있을 경우에 Ask(1), Bid(1)의 값은 어떤 값이 return되는지요? (매도호가) (매수호가) ... 매도4호가 1000 매도3호가 900 매도2호가 800 매도1호가 (없음) (없음)매수1호가 500 매수2호가 400 매수3호가 300 매수4호가 ...
프로필 이미지
영화사랑
2019-01-08
3218
글번호 224706
답변완료

틱봉 재조회

틱봉으로 하다보면 HTS상에서 재조회값과 기존 놔두는값의 갭이 점점 벌어지는 현상이 생기는데 예스스팟에서는 재정렬된 값을 다시 불러올수있나요?
프로필 이미지
ckwgak
2019-01-08
2994
글번호 224705
답변완료

예스트레이더를 활용해서

수고가 많으십니다 저는 예스트레이더를 이용하여 시장가주문이 아닌 지정가주문(시스템 매매 설정창에서 종가로 설정)으로 시스템트레이딩을 하려고 합니다. 그런데, 이럴 경우 가장 문제가 미체결이 발생할 경우 그 다음부터 제가 수동으로 개입하지 않으면 원하는 수량의 매매가 안되고 수량이 자꾸 꼬인다는 것입니다. 그래서 이를 해결하고자 예스스팟을 이용하려고 합니다. 그런데, 저는 예스스팟의 수식작성법을 전혀 몰라서 도움을 받고자 합니다. 예스트레이더로 매매수식은 작성완료했습니다. 그리고, 유진투자선물에서 해외선물을 매매할 계획입니다. 한번 매매할 때 마다 9계약씩 매매한다고 가정하겠습니다. 피라미딩은 적용하지 않습니다. 제가 원하는 것은... 예스트레이더의 매매신호에 따라 지정가로 주문이 발생하되, 앞전 매매신호에서 혹시 미체결이 발생하더라도 자동으로 현재 잔고를 확인하여 잔고만큼만 청산하고 새로운 9계약이 진입되도록 하고자 합니다. 그리고, 이렇게 새로운 매매신호가 발생하면 앞선 미체결(부분 미체결 포함)은 자동취소가 되도록 하고 싶습니다. 참고로, 제가 현재 작성한 예스트레이더의 매매수식은 하나의 시스템식안에 매수되는 경우가 몇가지 있고(매수명 : 매수A, 매수B, ... 등), 매도되는 경우에도 몇가지(매도명 : 매도A, 매도B, ... 등)가 있습니다. 제가 수동으로 개입하지 않더라도 예스트레이더 신호를 이용하여 지정가 매매를 할수 있도록 예스스팟 수식을 만들어 주시면 감사하겠습니다.
프로필 이미지
기똥찬
2019-01-21
3034
글번호 224704
답변완료

문의 수정

매수 전략 거래소 코스닥 일봉 5봉전 종가가 5%이상 15%이내 종목 전일 음봉 당일 1분봉 1봉전 거래량 보다 50%이상이면 매수 100만원 매수 매도 전략 매수후 2% 이상 이익이면 50%매도 나머지 50% 1분봉 이평3-5 DC 면 매도 부탁 합니다
프로필 이미지
청심
2019-01-07
2969
글번호 224703
답변완료

GetTheNumberOfBalances 명령시 갯수가 0인 이유?

Account1 계좌객체에 계좌를 선택하고, 아래코드를 실행하면 잔고갯수가 0 나오는데, 이유를 알 수 있을까요? 참고로 잔고 캡쳐 이미지 첨부합니다. var num = Account1.GetTheNumberOfBalances(); Main.MessageList("<<<", num, Account1.number); 혹시, 중복접속시에는 알 수 없는것인가요? PC 1에서 주문 및 체결 PC 2에서 위 코드를 실행하면 어떻게 되나요?
프로필 이미지
디코
2019-01-04
3050
글번호 224701
답변완료

설정시간 신호유지

아래의 수식에서 미완성신호가 발생 후 계속하여 미완성신호가 유지되고 있는 동안만 타이머가 작동하도록 하고자 하나, 타이머 설정시간보다 아주짧게 미완성신호가 발생 한다음 소멸하여도 타이머는 계속 작동하여 주문이 접수체결 됩니다. 이를 타이머가 설정 된 시간동안 미완성신호가 계속유지되고 있을 때에만 주문이 접수체결 되도록 아래의 수식을 변경하여 주시면 감사 하겠습니다. 즉, 타임어 설정시간이 5초인경우 1. 5초 미만 미완성신호 발생 후 소멸시 -------> 주문접수/체결 발생하지 않음. 2. 5초간 미완성신호가 계속유지되고 있을때 만 --------> 주문접수 / 체결 됨 var T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(KP.code); } function C1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)) if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1) { T = 1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(1,5000); } if (T >= 0 && A1.Balance.position == 1 && IncompleteSignal.signalKind == 3) { T = 0; Main.KillTimer(1); Main.SetTimer(2,5000); } if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3) { T = -1; if(A1.Balance.position == 0) VV = 1; else VV = 2; Main.SetTimer(2,5000); } if (T <= 0 && A1.Balance.position == 2 && IncompleteSignal.signalKind == 1) { T = 0; Main.KillTimer(2); Main.SetTimer(1,5000); } } function Main_OnTimer(nEventID) { //마지막봉 미완성 신호정보 셋팅 var Incom = C1.GetIncompleteSignal(); if (nEventID == 1 && T == 1) { Main.KillTimer(1); A1.OrderBuy(KP.code, VV, KP.Ask(2),2); Main.MessageLog("매수진입"); } if (nEventID == 1 && T == 0) { Main.KillTimer(1); Main.MessageLog("중복매수진입금지"); } if (nEventID == 2 && T == -1) { Main.KillTimer(2); A1.OrderSell(KP.code, VV, KP.Bid(2),2); Main.MessageLog("매도진입"); } if (nEventID == 2 && T == 0) { Main.KillTimer(2); Main.MessageLog("중복매도진입금지"); } }
프로필 이미지
너무조아
2019-01-02
3150
글번호 224700
답변완료

검색에 필요한 데이터가 부족합니다 (10313) 은 언제나오나요?

검색에 필요한 데이터가 부족합니다 (10313) 은 언제나오나요? 장전 혹은 장시작한지 얼마 안되서 그런가요? 혹은 오늘 10시부터 시작해서 그런가요? 원래 파워종목검색에서 나오던 종목들을 검색해보니 검색에 필요한 데이터가 부족합니다 (10313) 라고 나옵니다.
프로필 이미지
단테
2019-01-02
3339
글번호 224699
답변완료

질문드립니다.

아래는 친절히 답해주셔서 잘 사용하고 있습니다. 감사합니다. 1. 종목검색을 9시에 시작하고 원하는시간을 설정하여 종목검색을 종료할 수 있었으면 좋겠습니다. 2. 관심종목에 넣은 종목을 매매하고싶습니다. 3. 아래 스톱셋 기능을 제거하고 싶습니다. 4. 2%수익시 종목의 80%를 시장가로 청산하는 청산식이 추가되었으면 좋겠습니다. 감사합니다.아래는 로직입니다. var reqItemList = []; //검색되서 차트요청한 종목에 대해 종목코드를 저장할 배열변수 var ItemList = []; //검색된 종목 중 reqItemList에 없는 종목에 대해 종목코드를 저장한 배열변수장 var Count; //요청할 종목갯수 var ReqCount; //종목검색 후 차트객체 요청한 종목갯수 function Main_OnStart() { Main.MessageList("스팟시작"); Main.MessageList("종목검색시작"); Main.ReqPowerSearch("급등주검색"); Main.SetTimer(2, 180000);//2번 타이머(180초) } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색완료 : 검색된 종목수 : ",nCount); //ItemList 변수 초기화 ItemList = []; //검색종목수가 1개 이상일떄만 수행 if (nCount > 0) { //reqItemList에 저장된 종목코드가 한개도 없을때 if (reqItemList.length == 0) { //ItemList 배열변수에 aItemList를 차례대로 모두 옮김 Count = 0; for (var i = 0; i < nCount; i++) { ItemList.push(aItemList[i]); Count = Count+1; } } else//reqItemList에 저장된 종목코드가 한개이상일때 { //검색된 종목 중 reqItemList에 없는 종목만 ItemList에 담음 Count = 0; for (var i = 0; i < nCount; i++) { var add = true; for (var z = 0; z < reqItemList.length; z++) { if (aItemList[i] == reqItemList[z]) { add = false; Main.MessageList("이미 차트생성된 종목 : ",aItemList[i]); } } if (add == true) { ItemList.push(aItemList[i]); Count = Count+1; } } } //생성할 종목수가 1개 이상일떄 if (Count > 0) { Main.MessageList("차트객체 생성시작 : 생성할 종목수 : ",Count,ItemList); Main.SetTimer(1, 1000); ReqCount = 0; } } } function Main_OnTimer(nEventID) { if (nEventID == 2) { Main.MessageList("종목검색시작"); Main.ReqPowerSearch("급등주검색"); Main.SetTimer(2, 180000);//2번 타이머(180초) } if (nEventID == 1) { var StopSet = new SystemStopInfo( new StopLoss(5, CALCMETHOD_PERCENT, 0), new StopTrailing(5, 7, CALCMETHOD_PERCENT, 0), new StopProfitTarget(10, CALCMETHOD_PERCENT, 0), //new StopInactivity(0.5, 6, CALCMETHOD_PERCENT, 0xFFDA93), new StopEndOfDay(230000)); var ChartSet = new ReqChartItem(ItemList[ReqCount],2,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,StopSet); var SystemSet = new SystemInfo("##단타", YL_TYPE_NORMAL, null, null, null); Main.ReqChartEx(ChartSet,SystemSet); //생성요청한 종목에 대해 reqItemList에 종목코드 추가 reqItemList.push(ItemList[ReqCount]); Main.MessageLog("확장차트생성_"+ItemList[ReqCount]); ReqCount = ReqCount+1; if (ReqCount == Count) { Main.KillTimer(1); Main.MessageList("차트객체 생성완료 : 생성된 종목수 : ",ReqCount); } } } //신호발생 function Main_OnRiseSignal(ChartEx, Signal) { //신호발생 종목에 대해 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(Signal.code),0); //매수신호이고 잔고가 없을때만 매수 if (Signal.signalKind == 1 && Account1.Balance.count == 0) { Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1); Main.MessageLog("매수주문"); } if (Signal.signalKind == 2) { //전체미체결주문 갯수 var num = Account1.GetTheNumberOfUnfills(); //전체 미체결수 만큼 루프를 돌면서 for (var i = 0; i < num; i++) { //미체결을 하나씩 셋팅하고 Account1.SetUnfill(i); //미체결종목이 신호종목과 같고 미체결수량이 있으면 if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); } if (Account1.Balance.count > 0) { Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,ChartEx.GetClose(1,0),1); Main.MessageList("매도주문"); } //잔고수량만큼만 시장가매도 } }
프로필 이미지
stockric
2019-01-18
3136
글번호 224698
답변완료

새해복 많이 받으세요. 수식부탁드립니다.

안녕하세요. 미리 감사의 말씀 드립니다. 1. A 시스템의 직전거래가 손실일 경우에만, 진입하고 싶습니다.(시스템과 같은방향, 같은종목 진입입니다.) 2. 처음 진입은 1계약 진입하며, 손실거래시 다음 진입은 2계약 진입합니다. ( 계약수를 1계약씩 계속 늘리고 싶습니다.) 3. 수익 거래시 계약수는 1계약으로 초기화 합니다. 4. 본전거래는 손실거래로 취급합니다.
프로필 이미지
율담
2018-12-31
3108
글번호 224697
답변완료

간헐적으로 가원장이 제대로 로드되지 않습니다.

간헐적으로 가원장이 불러지지 않는데요. 어떻게 해결하면 좋은지 궁금해서요. 프로그램을 시작하자마자 A1.Refresh(); bal = A1.GetBalanceETCinfo(20); 을 실행하는데요. bal 이 -1일때가 있습니다. 간헐적으로 안되서 -1이 생길때마다 타이머를 실행시켜서 다시 저 루틴을 실행하게 했는데요. 한번 -1이 나오면, 계속 -1이 나오더라고요. 다시 껐다 키는 방법밖에 없는건가요? 매크로로 돌리다보니 다시 껐다키면 여러모로 많이 불편해서요. 예스스팟내에서 해결할 수 있는 방법이 있는지 궁금합니다.
프로필 이미지
단테
2018-12-29
3056
글번호 224696