커뮤니티

안녕하세요. 요청드립니다.

프로필 이미지
강지
2021-04-21 08:50:10
2634
글번호 225472
답변완료
안녕하세요. 예스스팟 입문하려고 자바스크립트 기초서적 보고 있는데, 제가 처음부터 만들기에는 쉽지않아 보여 요청드려 봅니다. 요청내용이 많아 보이는데, 혹시 전부 제공해주시기 어려우시다면 전체적인 뼈대만 이라도 부탁드립니다. 감사합니다. 매수 시간: 9:00:00 ~ 9:30:00 대상: 파워검색으로 검색된 종목순으로 최대 10종목을 실시간 (시장가)매수 투입금액: 종목당 매수금액은 계좌잔고금액의 10% 매수제한: 당일 계좌내 매매이력있는 종목 매수제한(손절/익절 종목 재매수 금지) 매도 시간: 9:00:00 ~ 11:00:00 익절손절: 익절 3% 해당종목(시장가)매도, 손절 3% 해당종목(시장가)매도 계좌청산: 당일 계좌잔고의 1% 이상 이익시 매수된 종목 전체(시장가)청산 시간청산: 11:00:00에 매수된 종목 전체(시장가)청산
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2021-05-17 16:33:39

안녕하세요 예스스탁입니다. 아래 가이드 수식 참고하셔서 수정보완해 사용하시기 바랍니다. var 매수종목수 = 10; var 종목검색타이머 = 60;//60초 var 잔고체크타이머 = 30;//30초 var Cash1; var List = [],MK = []; function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(1, 종목검색타이머*1000);//1번타이머, 주기 60초(종목검색 간격) ,1000이 1초 Main.SetTimer(2, 잔고체크타이머*1000);//2번타이머, 주기 30초(청산체크 간격) ,1000이 1초 //주문가능현금의 10% Cash1 = Account1.GetBalanceETCinfo(18)*0.1; //스팟 시작시 잔고평가금액 V1 = Account1.GetBalanceETCinfo(100); } //타이머동작 function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.MessageList("OnTimer:",nEventID); //1번타이머 if (nEventID == 1) { //9시~9시 30분 사이후이면 if (HHMMSS >= 90000 && HHMMSS < 93000) { Main.KillTimer(1); //종목검색실행 Main.ReqPowerSearch("사용자검색조건명"); } } //2번타이머 if (nEventID == 2) { //계좌보유종수 var num = Account1.GetTheNumberOfBalances(); //9시~11시 사이 if (HHMMSS >= 90000 && HHMMSS < 110000) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 1% 이상이면 전종목 전량매도 if (Account1.GetBalanceETCinfo(100) >= V1*1.01) { //2번 타이머 종료 Main.KillTimer(2); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 3% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } else //아니면 개별종목 3%익절, -3%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 3% 손실이면 시장가 매도 if (Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost*1.03 || Account1.Balance.current <= Account1.Balance.avgUnitCost*0.07)) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } } //11시이후이면 if (HHMMSS >= 110000) { //2번 타이머 종료 Main.KillTimer(2); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account1.SetBalance(i); //수량이 있고 3%수익이거나 3% 손실이면 시장가 매도 if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } //3번 타이머 if (nEventID == 3 ) { //종료 Main.KillTimer(3); //다음종목 요청 Main.ReqMarketData(List[req]); Main.MessageList(req,"종목객체요청",List[req]); } } //종목검색완료 function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("검색된 종목수",nCount); //기존 주문종목과 겹치지 않은 종목을 담을 배열변수 List = []; //검색된 종목수가 1개 이상이면 if (nCount >= 1 && MK.length < 매수종목수) { //매수가능종목수 var Number = 매수종목수-MK.length; //기존종목객체요청리스트에 없는 종목만 선별 for (var a = 0; a < nCount; a++) { var add = true; for (var b = 0; b < MK.length; b++) { if (aItemList[a] == MK[b].code) { Add = false; } } if (Add == true) { List.push(aItemList[a]); } if (List.length == Number) { break; } } Main.MessageList("종목객체를 요청할 종목수:",List.length,"|리스트 :",List); } //List갯수가 1개 이상이면 종목객체 생성 if(List.length >= 1) { //요청횟수는 초기값 0 req = 0; Main.MessageList(req,"종목객체요청",List[req]); //요청시작 Main.ReqMarketData(List[req]); } if (List.length == 0 && MK.length < 10) { Main.SetTimer(1, 종목검색타이머*1000);//종목검색타이머 재가동 } } //요청한 종목객체가 만들어지먼 function Main_OnRcvMarketData(MarketData) { if (MarketData.code == List[req]) { Main.MessageList(req,"종목객체생성",MarketData.code); //MK배열변수에 순서대로 종목객체저장 MK.push(MarketData); Account1.OrderBuy(MarketData.code,Math.floor(MM/MarketData.current),0,1); Main.MessageList(req,"매수주문",MarketData.code); //요청횟수 1증가 req = req+1; //요청횟수가 요청할종목수 미만이면 if (req < List.length) { //다음종목 요청 Main.MessageList(req,"종목객체요청",List[req]); var S = Main.ReqMarketData(List[req]); //종목객체 제한시간에 걸리면(15초에 60개) if (S == -1) { //3번타이머 15초 셋팅 Main.SetTimer(3, 15000); } } else //모두 요청했으면 { //종목객체생성 끝 Main.MessageList(req,"종목객체생성끝"); //종목검색을 위해 타이머 다시 동작 if (MK.length < 매수종목수 && HHMMSS >= 90000 && HHMMSS < 93000) { Main.SetTimer(1, 종목검색타이머*1000); } } } } 즐거운 하루되세요 > 강지 님이 쓴 글입니다. > 제목 : 안녕하세요. 요청드립니다. > 안녕하세요. 예스스팟 입문하려고 자바스크립트 기초서적 보고 있는데, 제가 처음부터 만들기에는 쉽지않아 보여 요청드려 봅니다. 요청내용이 많아 보이는데, 혹시 전부 제공해주시기 어려우시다면 전체적인 뼈대만 이라도 부탁드립니다. 감사합니다. 매수 시간: 9:00:00 ~ 9:30:00 대상: 파워검색으로 검색된 종목순으로 최대 10종목을 실시간 (시장가)매수 투입금액: 종목당 매수금액은 계좌잔고금액의 10% 매수제한: 당일 계좌내 매매이력있는 종목 매수제한(손절/익절 종목 재매수 금지) 매도 시간: 9:00:00 ~ 11:00:00 익절손절: 익절 3% 해당종목(시장가)매도, 손절 3% 해당종목(시장가)매도 계좌청산: 당일 계좌잔고의 1% 이상 이익시 매수된 종목 전체(시장가)청산 시간청산: 11:00:00에 매수된 종목 전체(시장가)청산