예스스탁
예스스탁 답변
2025-04-30 16:45:24.0
안녕하세요
예스스탁입니다.
아래 가이드 내용을 참고하시기 바랍니다.
수식내 영문 업데이트가 게시판 금칙어로 Up*date와 같이 중간에 *이 삽입되어 있습니다.
삭제하고 적용해 보시기 바랍니다.
스크립트 객체설정
계좌객체 추가 --> 객체명 Account1, 계좌번호 지정
//대상종목
var List = ["005930","000660","373220","207940","005380"];
var 기준시간 = 90500;
var req,MK = [],BuyCode,BID,BNUM,EH;
function Main_OnStart()
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS < 기준시간)
{
req = 0;
if (List.length > 0)
{
Main.ReqMarketData(List[req]);
Main.MessageList("종목객체요청:",List[req]);
}
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == List[req])
{
Main.MessageList("종목객체생성:",MarketData.code);
MK.push(MarketData);
req = req+1;
if (req < List.length)
{
Main.ReqMarketData(List[req]);
Main.MessageList("종목객체요청:",List[req]);
}
else
{
Main.MessageList("종목객체생성완료");
Main.SetTimer(1, 1000);
}
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
var sortList = [];
if (nEventID == 1 && HHMMSS >= 기준시간)
{
//9시5분
Main.KillTimer(1);
// 각종목의 당일거래대금,종목코드,등락률을 저장
for (var i = 0; i < List.length; i++)
{
sortList[i] = new Array(MK[i].moneyTotal,MK[i].code,(MK[i].current-MK[i].prevClose)/MK[i].prevClose*100);
}
//거래대금 기준 내림차순 정렬;
sortList.sort(CompareForSort);
//0~2만 남기고 나머지 배열 삭제
sortList.splice(3);
//거래대금을 앞으로 이동
for (var i = 0; i < sortList.length; i++)
{
sortList[i][0] = sortList[i][2];
}
//거래대금 기준 내림차순 정렬
sortList.sort(CompareForSort);
BuyCode = sortList[0][1];
Main.MessageList("기준시간도달",HHMMSS,"매수종목",BuyCode);
//등락률 가장 높은 종목을 매수
for (var i = 0; i < MK.length; i++)
{
if (MK[i].code == BuyCode)
{
BID = Account1.OrderBuy(MK[i].code, 1, MK[i].Ask(3),0);
EH = 0;
}
}
}
}
function CompareForSort(a, b)
{
//내림차순
return( a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : 0 );
//오름차순
//return( a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 );
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNUM = OrderResponse.orderNum;
Main.MessageList("Main_OnOrderResponse",BNUM);
}
}
function Main_OnNotifyFill(NotifyFill)
{
if (EH == 0 && NotifyFill.orderNum == BNUM)
{
EH = NotifyFill.fillPrice;
Main.MessageList("EH 초기값",EH);
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제
{
//BuyCode종목 체결시세 수신
if (lUp*dateID == 20001 && sItemCode == BuyCode && EH > 0)//*삭제
{
for (var i = 0; i < MK.length; i++)
{
if (MK[i].code == BuyCode)
{
Account1.SetBalance(MK[i].code ,0);
if (MK[i].current > EH)
{
EH = MK[i].current;
Main.MessageList("EH 갱신",EH);
}
//진입 후 최고가가 평단가대비 +5%이상이고 현재가가 최고가대비 -1% 이하이면 청산
if (Account1.Balance.count > 0 &&
EH >= Account1.Balance.avgUnitCost*1.05 &&
MK[i].current <= HH*0.99)
{
//매수3호가로 전량 청산
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(3),0);
EH = 0;
}
//진입 후 평단가대비 -3%이상 하락하면 청산
if (Account1.Balance.count > 0 &&
MK[i].current <= Account1.Balance.avgUnitCost*0.97)
{
//매수3호가로 전량 청산
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(3),0);
EH = 0;
}
}
}
}
}
즐거운 하루되세요
> 여름가을 님이 쓴 글입니다.
> 제목 : 문의드립니다
> 삼성전자
sk하이닉스
LG에너지솔루션
삼성바이오로직스
현대차
예를 들어
5종목을 가지고
아래와 같이 매매하고싶습니다
1
당일 거래대금 누적지표를 만들고
9시 5분에
5종목의 거래대금을 비교하여
상위3개 종목을 고른다
2
상위3개 종목중
종가가 전일종가대비 등락률이 가장 큰 종목을
1회 매수진입
3
손절가 -3% 청산
TS 5%수익이상일때 1% 하락시 청산
감사합니다