예스스탁
예스스탁 답변
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에 매수된 종목 전체(시장가)청산