커뮤니티

예스스팟 Q&A

답변완료

매수매도식 부탁드립니다.

매수 종목 선정 1. tt5~tt6에 검색식1에서 xx1 개의 종목이 검색될 때까지 반복조회한다. (xx1 개 검색되면 검색종료) 종목 매수 방법 2. 1에서 1종목 이상 검색되면 검색된 종목이 아래 조건이 되면 매수한다. if (현재가 >= 어제종가의 10% - nn틱) ==> oderbuy((어제종가의 10% - mm틱), 지정가) (xx2 개의 종목이 매수되면 매수 종료) 3. tt6 직후 미체결 매수 취소한다. 매도 종목 선정(매수 다음날 매수한다.) 4. 보유종목 모두 5. 보유종목 중 관심종목1에 있는 종목만 종목 매도 방법 6. 4와 5중 선택한 방법으로 매도 종목을 선정한다. 7. if (시가 >= 매수단가) ==> tt1 ~ tt2 에 nn1회 분할매도 if (시가 < 매수단가) ==> tt3 ~ tt4 에 nn2회 분할매도 분할매도 방법 총 cnt회 매도 마지막 매도는 시장가, 나머지회차는 최우선 1회차 보유량/cnt --2회차 직전 미체결 매도 취소 2회차 (새로 갱신된 보유량)/(cnt - 1) . . --m회차 직전 미체결 매도 취소 m회차 (새로 갱신된 보유량)/(cnt - m + 1) . . --cnt회차 직전 미체결 매도 취소 cnt회차 (새로 갱신된 보유량)/1
프로필 이미지
cs아빠
2019-09-26
3653
글번호 225007

wait113 님에 의해서 삭제되었습니다.

프로필 이미지
wait113
2019-09-24
1
글번호 225006
답변완료

체결내역 데이터베이스 저장 관련 문의

질문 있습니다. for 문을 돌아가면서 분할매수한 종목들을 데이터베이스에 저장하는 코드를 작성했는데, 각 분할 차수의 마지막 종목만 들어가네요? for (var i = 1 ; i < buycount+1 ; i++) { ID = A1.OrderBuy(Main.GetOrderCode(ItemCode[i]), Math.floor(EachBal/ItemPrice[i]/InputVar1)- Math.floor((EachBal/ItemPrice[i])/InputVar1)%ItemUnits[i],Item[i].Bid(1),0); Main.MessageLog("ID: "+ ID +" 분할 매수 종목 : "+ Item[i].code + " 매수가: " + Item[i].Bid(1)); } 위와 같이 for문 돌면서 주문을 내고요, ID 정상적으로 찍히는 것은 로그로 확인했습니다. 한 종목 주문이 들어갈 때마다 주문응답객체가 생성되고, 체결되면 체결통보객체가 생성되므로, 아래 코드처럼 처리하면 데이터베이스에 순차적으로 저장될 것이라고 생각했습니다. function Main_OnOrderResponse(OrderResponse) { if(OrderResponse.orderID == ID && OrderResponse.orderKind == 1) { OrderNum_s.push(OrderResponse.orderNum); //매도주문 목록에 주문번호 저장 } else if(OrderResponse.orderID == ID && OrderResponse.orderKind == 2) { OrderNum_b.push(OrderResponse.orderNum); //매수주문 목록에 주문번호 저장 } } function Main_OnNotifyFill(NotifyFill) { var checkOrderBuy = OrderNum_b.indexOf(NotifyFill.orderNum); var checkOrderSell = OrderNum_s.indexOf(NotifyFill.orderNum); if( checkOrderSell != -1 && NotifyFill.orderKind == 1) //주문번호가 매도주문목록에 있으면 진행 { var stockcode = NotifyFill.code; var sellcount = NotifyFill.fillCount; var sellprice = NotifyFill.fillPrice; var orderkind = 1; var ordernumber = NotifyFill.orderNum; D1.Inse rt("db_fill VALUES (" + y_date + ", '"+ stockcode +"', 'A" + stockcode +"', "+ sellcount +", "+ sellprice +", " + orderkind + ", "+ ordernumber +")"); } else if(checkOrderBuy != -1 && NotifyFill.orderKind == 2) //주문번호가 매수주문목록에 있으면 진행 { var stockcode = NotifyFill.code; var buycount = NotifyFill.fillCount; var buyprice = NotifyFill.fillPrice; var orderkind = 2; var ordernumber = NotifyFill.orderNum; D1.Inse rt("db_fill VALUES (" + logdate + ", '"+ stockcode +"', 'A" + stockcode +"', "+ buycount +", "+ buyprice +", " + orderkind + ", "+ ordernumber +")"); } } 실제로 돌려보니까 각 회차 마지막 종목만 기록이 됩니다. 질문 1) 마지막 회차만 기록되는 원인이 혹시 for 문을 다 돌고 나서야 Main_OnOrderResponse가 작동하기 때문인가요? 질문 2) 주문응답객체와 체결통보객체는 새로운 주문/체결이 나올 때마다 기존의 것이 삭제되고 갱신되나요? 아니면 스팟 종료 시까지 축적되나요? 질문 3) 위의 경우처럼 for 문을 돌면서 주문이 들어가는 경우, 구동되는 다른 스팟 전략과 구별해서 이 스팟에서 체결된 주문만 데이터베이스에 기록되게 하려면, 어떤 방법을 추천하시나요? 질문 4) 혹시 OrderReplace로 정정 주문이 들어간 경우에도 주문응답객체가 생성되나요?
프로필 이미지
다인아빠
2019-09-23
3518
글번호 225005

토그 님에 의해서 삭제되었습니다.

프로필 이미지
토그
2019-09-20
3
글번호 225004
답변완료

화면데이터와 그리드 객체 사용법

예스 spot 전략 편집기에 '화면데이터' 창이 있는데 메뉴얼에보면 화면객체 목록을 표시한다고만 나와있고 자세한 설명이 없습니다. 여기 게시글에도 내용이 전혀 없네요. 화면데이터 창과 화면객체 사용법을 알고 싶습니다. 그리고 마찬가지로 그리드객체가 있던데 이 것의 사용법도 알고 싶습니다. 그리드 객체는 글자색 배경색 변경 기능도 있는데 이게 화면에 표시되는 형식인가요? 간단한 예제와 함께 화면객체, 그리드객체 사용법 부탇드립니다.
프로필 이미지
nollae
2019-09-20
3592
글번호 225003
답변완료

ChartEx 정보 property 요청

function Main_OnStart() { var chartItem = new ReqChartItem("00000000", 30, CHART_PERIOD_SECOND, 5000, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(chartItem, sysInfo); } function Main_OnRcvChartEx(ChartEx) { // 여기서 ChartEx 의 정보를 얻고 싶다. } 이런 수식에서... ChartEx의 주기 등을 얻을 수 있었으면 좋겠습니다. 지금은 ChartEx.GetCode(1) 외에는 정보를 얻을 수 있는 게 없습니다.
프로필 이미지
idnotbe
2019-09-17
3483
글번호 224999
답변완료

ReqChartItem 초 설정 제약 완화 요청

var sysInfo = new SystemInfo(systemName,YL_TYPE_NORMAL); var chartItem30 = new ReqChartItem("00000000", 30, CHART_PERIOD_SECOND, 5000, CHART_REQCOUNT_BAR, false, false); var chartItem90 = new ReqChartItem("00000000", 90, CHART_PERIOD_SECOND, 5000, CHART_REQCOUNT_BAR, false, false); Main.ReqChartEx(chartItem30, sysInfo); Main.ReqChartEx(chartItem90, sysInfo); 위에 30초 차트는 정상 생성되고, 아시겠지만 아래 90초 차트는 60초가 넘는다고 에러 메시지가 뜹니다. 그냥 예스트레이더에서의 차트 설정과 마찬가지로, 60초가 넘어도 허용해주시면 안되나요?
프로필 이미지
idnotbe
2019-09-17
3578
글번호 224998

cs아빠 님에 의해서 삭제되었습니다.

프로필 이미지
cs아빠
2019-09-16
5
글번호 224997
답변완료

매도, 매도식 부탁드립니다.2

================================================================================== ****매수대상 선정 방법 선택 매수시 아래 방법으로 종목선정 1. 매수 대상 선정 방법1: a. 관심종목2에 저장된 종목 호출 b. 파워종목검색 2. 매수 대상 선정 방법2: c. (a or b) 방법으로 선정된 종목 중 관심종목3에 저장된 종목을 제외 d. (a or b) 방법으로 선정된 종목 중 파워종목검색의 조건을 만족하는 종목만 선정 (((d의 검색식은 과거의 조건으로 검색하므로, 검색당일에는 검색 내용이 달라지지 않을 예정입니다.))) *****매수방식을 조합할 수 있게 부탁드립니다***** if (inputvar1 == 1 ) ==> a+c if (inputvar1 == 2 ) ==> a+d if (inputvar1 == 3 ) ==> b+c if (inputvar1 == 4 ) ==> b+d ================================================================================== ****매수방법선택 아래의 (1-1+1-2)와 (2-1+2-2)중 선택한 방법으로 tt3 ~ tt4 시간 사이에 매수한다. 종목당 매수금액 = 총매수금액/선정된 종목개수 매수후 매수량의 xx%만큼 익절 tp%, 손절 sl%를 설정한다. 선택한 종목을 tt3 ~ tt4 시간 사이에 1-1. 전일 종가대비 >= -dd% 이면 전일 종가대비 -nn1%에 매수주문 (종가대비 -nn1%에 해당하는 가격의 지정가) 1-2. 전일 종가대비 < -dd% 이면 전일 종가대비 -nn2%에 매수주문 (현재가 대비 -nn2%에 해당하는 가격의 매수3호가) 선택한 종목을 tt3 ~ tt4 시간 사이에 2-1. nn2 회 분할 매수한다. 2-2. 마지막 매수직후 미체결 취소후 취소량 만큼 현재가 매수. ****매수방법도 1, 2중에 선택하도록 부탁드립니다. 예1) if(inputvar2 == 1) ==> 매수방법 (1-1+1-2)로 매수 예2) if(inputvar2 == 2) ==> 매수방법 (2-1+2-2)로 매수 ================================================================================== ****당일 매도 3. 보유종목중 관심종목4에 있는 종목은 매도에서 제외한다. 4. tt5 직전 미체결 매수 취소 5. tt5~tt6까지 cnt2 회 분할매도한다. 6. 매번 매도전 미체결 매도를 취소한다. 7. 매번 매도량는 잔고/(남은 매도 회차) 로 한다. 예) 총 cnt2 회 매도 일때. 1회차 매도: 잔고수량/cnt2 2회차 매도: 갱신된 잔고수량/(cnt2-1) mm2회차 매도: 갱신된 잔고수량/(cnt2-mm2+1) cnt2회차 매도 : 갱신된 잔고수량/1 8. 마지막 회차매도시에는 전량매도 한다. (마지막회차만 시장가, 나머지 매도는 매도1호가+1틱) ================================================================================== ****매수 다음날 오전 매도 9. 보유종목중 관심종목1에 있는 종목은 매도에서 제외한다. 10. tt1~tt2까지 cnt1 회 분할매도한다. 11. 매번 매도전 미체결 매도를 취소한다. 12. 매번 매도량는 잔고/(남은 매도 회차) 로 한다. 예) 총 cnt1 회 매도 일때. 1회차 매도: 잔고수량/cnt1 2회차 매도: 갱신된 잔고수량/(cnt1-1) mm1회차 매도: 갱신된 잔고수량/(cnt1-mm1+1) cnt1회차 매도 : 갱신된 잔고수량/1 13. 마지막 회차매도시에는 전량매도 한다. (마지막회차만 시장가, 나머지 매도는 매도1호가+1틱) $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 매매 당일 시간순서는 (tt1-tt2), (tt3-tt4), (tt5-tt6) 순입니다. 모든 매수, 매도는 관심종목에서 호출한 종목만을 대상으로 한다(<-- 가능한 방법이라면 실현되도록 부탁드립니다.*****
프로필 이미지
cs아빠
2019-10-01
3629
글번호 224996
답변완료

홈페이지에 있는 예스스팟 안내서 관련해서 질문드립니다.

예제 3번이 스팟전략이 [예스스팟 모니터]에 적용하면 삼성전자를 매수1호가에 1주 매수주문하고 해당 주문에 대한 주문응답이 수신된 후 60초 후에도 미체결 상태이면 매도2호가로 정정주문을 발생합니다. 라는 문제인데 해당 파일에선 코딩을 var ID; var Number; function Main_OnStart() { ID = A1.OrderBuy(SSE.code, 1, F1.Bid(1), 0); } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == ID) { Number = OrderResponse.orderNum; Main.SetTimer(1, 60000); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { A1.OrderReplacePrice(Number,F1.Ask(2)); Main.KillTimer(1); } } function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == Number) Main.KillTimer(1); } 이렇게 해 놓았더라구요 A1은 계좌고. 그런데 똑같이 만들어서 돌려보니 ID = A1.OrderBuy(SSE.code, 1, F1.Bid(1), 0); <-- 이 부분에서 에러가 뜹니다 기타 에러요. 주문에서부터 오류가 생성되니 당연히 밑의 코드들은 돌아가지 않구요. 이거 어떻게 해결하나요?
프로필 이미지
예스랭귀지
2019-09-09
3458
글번호 224988