커뮤니티

대체거래소 시세주문

프로필 이미지
허밍스타
2025-10-29 02:36:36
139
글번호 227426
답변완료

안내해주신 공지사항 (https://www.yesstock.com/community/notice-dtl?postNo=227137&searchType=&searchValue=)봤는데 제가 사용하고 있는 코드는 종목객체속성도 없고 코드 예제에 속성도 좀 달라서 ...... ordersell, orderbuy 이 부분만 고치면 되는가요? 속성 부분이 예제랑 달라서... 수정 부탁드려요 ㅠ sor로 수정 하고 싶습니다 -------------------아래 코드 -------------------------------
var timer5 = 3; //3초 var 매수금 = 1500000; var 손절 = 0.975; var 익절 = 1.15; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 5초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account2.GetBalanceETCinfo(100); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090459 && HHMMSS < 151900) { //종목검색 수행 Main.ReqPowerSearch("메인733511") } if (nEventID == 1) { //계좌보유종수 var num = Account2.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 090459 && HHMMSS < 151900) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account2.GetBalanceETCinfo(100) >= V1*1.10) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0 && (Account2.Balance.current >= Account2.Balance.avgUnitCost*익절 || Account2.Balance.current <= Account2.Balance.avgUnitCost*손절)) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } } } } } //15시 15분이후이면 if (HHMMSS >= 152900) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count,0,1); } }

} } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //Account2.OrderBuy(MarketData.code,1,0,1); Account2.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); //Account2.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account2.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account2.SetBalance(i); if (stockCode == Account2.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 }

SOR주문
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-10-29 15:00:58

안녕하세요 예스스탁입니다. var timer5 = 3; //3초 var 매수금 = 1500000; var 손절 = 0.975; var 익절 = 1.15; var OrderList = []; var MKList = []; var req; function Main_OnStart() { //1번 타이머, 5초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; //스팟 시작시 잔고평가금액 V1 = Account2.GetBalanceETCinfo(100); } function Main_OnTimer(nEventID) { var d = new Date(); YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS >= 090459 && HHMMSS < 151900) { //종목검색 수행 Main.ReqPowerSearch("메인733511") } if (nEventID == 1) { //계좌보유종수 var num = Account2.GetTheNumberOfBalances(); //9시~15시 15분 사이 if (HHMMSS >= 090459 && HHMMSS < 151900) { //보유종목이 1개 이상 if (num >= 1) { //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도 if (Account2.GetBalanceETCinfo(100) >= V1*1.10) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell({exchangeKind:1,code:Account2.Balance.code,count:Account2.Balance.count,orderPrice:0,priceKind:1}); } } } else //아니면 개별종목 5%익절, -5%손절 체크 { //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0 && (Account2.Balance.current >= Account2.Balance.avgUnitCost*익절 || Account2.Balance.current <= Account2.Balance.avgUnitCost*손절)) { Account2.OrderSell({exchangeKind:1,code:Account2.Balance.code,count:Account2.Balance.count,orderPrice:0,priceKind:1}); } } } } } //15시 15분이후이면 if (HHMMSS >= 152900) { //1번 타이머 종료 Main.KillTimer(1); //계좌리스트의 순서대로 for (var i = 0; i < num; i++) { //잔고를 셋팅 Account2.SetBalance(i); //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도 if (Account2.Balance.count > 0) { Account2.OrderSell({exchangeKind:1,code:Account2.Balance.code,count:Account2.Balance.count,orderPrice:0,priceKind:1}); } } } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvItemList(aItemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = aItemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (aItemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(aItemList[a])) { OrderList.push(aItemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); // 계좌에 같은 종목이 있는지 확인 if (!IsStockInAccount(MarketData.code)) { // 계좌에 없는 경우에만 매수 //Account2.OrderBuy(MarketData.code,1,0,1); Account2.OrderBuy({exchangeKind:1,code:MarketData.code,count:Math.floor(매수금/MarketData.Ask(1)),orderPrice:0,priceKind:1}); //Account2.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다."); } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { // 계좌에 해당 종목이 있는지 확인하는 함수 var numberOfBalances = Account2.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account2.SetBalance(i); if (stockCode == Account2.Balance.code) { return true; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 } 즐거운 하루되세요