커뮤니티

예스스팟 Q&A

답변완료

조회제한 및 주문호가문의

Q1. 아래 수식이 랜덤하게 조회제한에 걸립니다. 조회수제한인지, 주문제한인지는 모르겠습니다. 계좌에 보유종목이 많을때(20종목+), 일때 spot을 실행하자마자 제한이걸려 멈춰버립니다. 제한이 걸리지 않게 코드수정부탁드립니다. Q1-2. 계좌내 최대종목수를 20종목이하로 제한하고 싶습니다. Main.SetTimer(1, 1000*60); //60초 로 제한했음에도 불구하고, 제한에 걸립니다. Q2. ordersSell로 익절조건을 추가했는데, '호가단위가 맞지 않다'고 나옵니다 아래 코드에 2% 익절조건으로 호가단위를 맞출 방법을 문의드립니다. profitB == 1.02 //외부입력변수 if(cond == true){ A.OrderSell(A.Balance.code, A.Balance.count, Math.floor(A.Balance.avgUnitCost * profitB/100)*100, 0); Q3. kosdaq 지수 전일종가가 3일선, 5일선, 10일선 위에 있을때만, orderbuy 조건을 활성화 하고 싶습니다. 확장차트객체를 사용하지 않고서도 가능할까요? ---------------원본 수식코드------- //1. 시세/파워종목검색에서 임의의 사용자검색조건을 설정한다 //2. 사용자검색조건식을 이용하여 일정시간마다 종목을 검색한다 //3. 기존의 미체결 주문을 취소주문한다 //4. 현재 보유하고 있는 잔고종목이 새로 검색된 종목에 없는 경우 현재가로 청산주문낸다 //5. 검색된 종목들을 차례대로 종목객체 생성한다 //6. 생성된 종목객체가 잔고에 없으면 100,000원씩 매도 1호가에 매수주문한다. (단, 100,000원 이상인 종목은 1주 주문)) //7. 생성되었던 객체를 삭제한다 //8. 일정시간 경과 후 다시 종목검색을 하여 위의 과정을 반복한다 /* function getHHMMSSS() { var d = new Date(); HHMMSSS = d.getHours()+":"+ d.getMinutes()+":"+ d.getSeconds(), SSS = d.getMilliseconds(); // 1/1000초 if(SSS < 10) SSS = "00" + SSS; else if (SSS < 100) SSS = "00" + SSS; return HHMMSSS + "." + SSS;} */ var gEntryMoney = 1000000, //종목당 매수금액 gaItemList = [], //검색된 종목들을 담은 배열변수 gItemCnt, //종목객체 생성할 종목수 gRegCnt; //종목객체 생성을 요청한 건수 function Main_OnStart() { Main.MessageList(getHHMMSSS(), "시작"); //2. 사용자검색조건식을 이용하여 일정시간마다 종목을 검색한다 Main.ReqPowerSearch("#전고점돌파(30)"); Main.SetTimer(1, 1000*60); //60초마다 종목검 } function Main_OnRcvItemList(aItemList, nCount) { //3.기존의 미체결 주문을 취소주문한다 var num = A.GetTheNumberOfUnfills(); for(var i = 0; i < num ; i++){ A.SetUnfillIndex(i); A.OrderCancel(A.Unfill.orderNum); //Main.MessageList(getHHMMSSS(), "취소된 미체결주문 종목코드:", A.Unfill.code); } //4. 현재 보유하고 있는 잔고종목이 새로 검색된 종목에 없는 경우 현재가로 청산주문낸다 if(nCount >= 1){ gaItemList = aItemList; Main.MessageList(getHHMMSSS(), "종목검색된 종목수와 종목", nCount, gaItemList); var num = A.GetTheNumberOfBalances(); for(var i = 0; i < num ; i++){ A.SetBalanceIndex(i); //Main.MessageList(getHHMMSSS(), "보유잔고 종목", i + 1, A.Balance.code, A.Balance.count); //검색된 종목과 잔고종목의 종목코드들을 비교하여 같은 종목코드가 있으면 true 아니면 false var cond = false; for(var j = 0; j < gaItemList.length; j++){ // for문으로 잔고코드에 번호 부여 0부터 종목수 if(A.Balance.code == gaItemList[j]){ cond = true; gaItemList.splice(j, 1); //배열변수명.splice(배열에서 삭제할 부분의 처음 인덱스, 삭제할 크기) break; //break문 : for문이나 while문을 빠져나옴 } } //cond이 false이면 매도 if(cond == false){ A.OrderSell(A.Balance.code, A.Balance.count, A.Balance.current, 0); //Main.MessageList(getHHMMSSS(), "청산주문된 종목코드:", A.Balance.code); } if(cond == true){ A.OrderSell(A.Balance.code, A.Balance.count, A.Balance.current , 0);//계좌안에 있으면서, 종목 Main.MessageList (getHHMMSSS (), "[체결잔고 익절 매도주문]", A.Balance. code,"평단가:", A.Balance.avgUnitCost, "매도가격:", Math.floor(A.Balance.avgUnitCost * profitB)); } } //5. 검색된 종목들을 차례대로 종목객체 생성한다 gReqCnt = 0; gItemCnt = gaItemList.length; if(gItemCnt > 0){ Main.ReqMarketData(gaItemList[gReqCnt], 0, 0); } } } function Main_OnRcvMarketData(MD) { // Main.MessageList(getHHMMSSS(), "종목객체 생성", MD.code, MD.name); //6. 생성된 종목객체가 잔고에 없으면 1,000,000원씩 매도 1호가에 매수주문한다.(단, 100,000원 이상인 종목은 1주 주문)) var EntryVol; if(MD.current < gEntryMoney){ EntryVol = Math.floor(gEntryMoney/MD.current); } else{ EntryVol = 1; } A.OrderBuy(MD.code, EntryVol, MD.Ask(1), 0); //Main.MessageList(getHHMMSSS(), "매수주문 종목과 수량:", MD.code, EntryVol); //7. 생성되었던 객체를 삭제한다 // Main.MessageList(getHHMMSSS(), "종목객체 삭제:", MD.code); Main.RemoveMarketData(MD); gReqCnt++; if(gReqCnt < gItemCnt){ var TimeLimit = Main.ReqMarketData(gaItemList[gReqCnt], 0, 0); if(TimeLimit == -1){ Main.SetTimer(2, Main.GetLimitedTime(0) + 100); } } else if(gReqCnt == gItemCnt){ Main.MessageList(getHHMMSSS(), "매수주문 종료"); } } function Main_OnNotifyFill(NF) { Main.MessageList(getHHMMSSS(), "NF:", NF); } function Main_OnTimer(nEventID) { //8. 일정시간 경과 후 다시 종목검색을 하여 위의 과정을 반복한다 if(nEventID == 1){ Main.MessageList(getHHMMSSS(), "종목검색 재시작"); Main.ReqPowerSearch("#전고점돌파(30)"); } //조회시잔이 제한된 경우 if(nEventID == 2){ Main.ReqMarketData(gaItemList[gReqCnt], 0, 0); } }
프로필 이미지
하운드독
2021-12-08
1699
글번호 225592

관리자에 의해 자유게시판으로 이동되었습니다

프로필 이미지
유샘
2021-12-01
7
글번호 225591
0
답변완료

예수금잔고 통화를 USD로 표현

수고하십니다. 스팟에서 예수금잔고 통화를 USD로 표현하고 싶습니다. 어찌하나요? 예수금잔고 = 계좌.GetBalanceETCinfo(0);
프로필 이미지
후왕
2021-11-30
1719
글번호 225590
답변완료

썸머타임 알려주세요

수고하십니다.스팟에서 썸머타임 True / False로 표시하고 싶은데 전략 작성좀 해주세요
프로필 이미지
후왕
2021-11-30
1669
글번호 225589
답변완료

안녕하세요

수식을 직접 기입하여 종목찾기를 하면 잘 나오지 않습니다 특별한 메카니즘이 있는지요 ? 그냥 수식명이 나오다가 안나오다가,,종목이 잘 나오지 않는데 종목명이 잘 바뀌어지지도 않구여 ..ㅜㅜ 도아주십시요
프로필 이미지
사는게먼지
2021-11-17
1718
글번호 225588
답변완료

수식 문의합니다

많은 도움 받고 있습니다. 종목에 관계 없이 매수, 매도한 잔고를 5초마다 합산해서 -50만원에 손절, 50만원에 익절 하는식 원합니다. 예시는 매도포지션 일때 청산식인데 매도와 매수한 가격을 합산하여 청산하는 식 원합니다. 예시) 옵션매도포지션 전체 손익계산 var num = A1.GetTheNumberOfBalances(); var PLsum = 0; for(var i = 0; i < num; i++) { //잔고셋팅 A1.SetBalanceIndex(i); //매도포지션이고 옵션종목이고 if (A1.Balance.position == 1 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3")) { //각 옵션매도종목의 (평균단가-현재가)*수량*50만원을 누적 PLsum = PLsum + ((A1.Balance.avgUnitCost - A1.Balance.current)*A1.Balance.count)*250000; } } //손익이 +50만원이상이거나 -50만원 이하이면 if (PLsum >= 100000 || PLsum <= -100000) { for(var i = 0; i < num; i++) { //잔고셋팅 A1.SetBalanceIndex(i); //매도포지션이고 옵션종목이고 if (A1.Balance.position == 1 && (A1.Balance.code.substring(0,1) == "2" || A1.Balance.code.substring(0,1) == "3")) { A1.OrderBuy(A1.Balance.code, A1.Balance.count, 0,1); } } }
프로필 이미지
팡팡
2021-11-16
1851
글번호 225587

와사비 님에 의해서 삭제되었습니다.

프로필 이미지
와사비
2021-11-04
6
글번호 225576

온고지신 님에 의해서 삭제되었습니다.

프로필 이미지
온고지신
2021-11-04
0
글번호 225575
답변완료

동일 종목, 다른 주기 확장차트간 식별 문제

안녕하세요. 아래와 같이 동일 종목 확장차트 2개 중 하나는 20분, 다른 하나는 3분으로 주기 설정해서 새로운 바가 추가될때 각 주기 차트별로 로직을 구현하고자 합니다. 그런데 종목이 같으면, 주기에 따른 식별이 않되는데 다른 방법이 있을까요? function Main_OnBarAppended(ChartEx_, nData_) { switch (ChartEx_.GetCode(1)) { case C1_20m.GetCode(1): .... break; case C2_3m.GetCode(1): .... break; }
프로필 이미지
개똥이
2021-11-04
1769
글번호 225574

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

프로필 이미지
후왕
2021-10-31
23
글번호 225573