예스스탁
예스스탁 답변
2019-09-10 15:08:57
안녕하세요
예스스탁입니다.
아래 내용 참고하셔서 수정보완해 완성하시기 바랍니다.
KO200지수는 스크립트객체화면에 MarketData1로 추가하시면 됩니다.
var List;
var ListCnt;
var RcvCount;
var ItemCode = new Array(200);
var PPrice = new Array(200);
var RcvCount = 0;
var Ymoney;
var num,Slist = [],Avg = [],Vol = [],req;
function Main_OnStart()
{
Main.SetTimer(1, 5000);
step = 0;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (HHMMSS > 84500 && HHMMSS < 85500)
{
Main.KillTimer(1);
// 보유종목수
num = Account1.GetTheNumberOfBalances();
//1개 이상이면
if (num >= 1)
{
step = 1;
//보유종목의 종목코드와 평단가, 수량을 각 배열변수 동일방번호에 추가
for (var i = 0; i < num; i++)
{
Account1.SetBalance(i);
Slist.push(Account1.Balance.code);
Avg.push(Account1.Balance.avgUnitCost);
Vol.push(Account1.Balance.count);
}
//첫종목부터 종목객체 요청
req = 0;
Main.ReqMarketData(Slist[req]);
}
else //보유종목이 없으면 종목검색요청
{
//하이는 16,nh는 20이 D+2 예수금입니다.
if (Account1.GetBalanceETCinfo(16) >= Account1.GetBalanceETCinfo(100)*(1/10) &&
MarketData1.GetPrevClose(1) < MarketData1.GetPrevClose(2))
{
step = 2
Main.MessageLog("종목검색");
Main.ReqPowerSearch("test1")
}
}
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
step = 3;
List = aItemList;
ListCnt = nCount;
for (var i = 0; i < nCount; i++)
{
Main.ReqMarketData(List[i], 0, 0);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (step == 1)
{
if (MarketData.code == Slist[req])
{
if (MarketData.prevClose >= Avg[req]*1.03)
{
Account1.OrderSell(Slist[req],Vol[req],MarketData.prevClose,0);
}
}
req = req+1;
if (req < num)
{
Main.ReqMarketData(Slist[req]);
}
else //종목객체 요청이 끝났으면 종목검색
{
//하이는 16,nh는 20이 D+2 예수금입니다.
if (Account1.GetBalanceETCinfo(16) >= Account1.GetBalanceETCinfo(100)*(1/10))
{
step = 2
Main.MessageLog("종목검색");
Main.ReqPowerSearch("test1")
}
}
}
if (step == 3)
{
RcvCount = RcvCount+1;
ItemCode[RcvCount] = MarketData.code;
PPrice[RcvCount] = MarketData.prevClose;
var BuyCount = 0;
if (RcvCount == ListCnt)
{
for (var ii = 1; ii <= RcvCount; ii++)
{
var HH = -1;
var Hi = -1;
for (var iii = 1; iii <= RcvCount; iii++)
{
if (PPrice[iii] > HH)
{
HH = PPrice[iii];
Hi = iii;
}
}
//매수주문
if (Hi > -1)
{
Account1.SetBalance(ItemCode[Hi],0);
if (Account1.Balance.count < 100 && BuyCount < 5)
{
Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0);
BuyCount = BuyCount+1;
}
ItemCode[Hi] = -1;
PPrice[Hi] = -1;
}
if (BuyCount == 5)
{
break;
}
}
}
}
}
즐거운 명절되시길 바랍니다.
> 새로운세상 님이 쓴 글입니다.
> 제목 : 수식 수정 부탁드립니다
> 안녕하세요~
다음 수식 수정 부탁드립니다.
1) 현재 아래의 수식을 자동으로 설정하였을 경우, 8시30분 이전 주식시장 주문가능시간전에
HTS에 접속을 하면 주문 오류가 발생합니다. ---> 주문가능 시간전이므로 당연함
(8시30분 이후 접속시는 정상주문 됨)
---> 접속시간에 관계없이, 8시45분~ 8시55분 사이에 'test1'의 종목검색 및 매수주문이
발생하도록 수정 부탁드립니다.
2) 장개시전 매수 주문시 다음 조건을 추가하고 싶습니다.
* 장개시전 계좌의 D+2 예수금 잔고가 주식평가자산을 포함한 순자산액의 1/10 이상일 때라는 조건
* 매수시 'K200 지수의 전일저가가 전전일저가보다 작을 때' 라는 조건
* 현재 작성된 수식은 검색된 종목들중 전일종가가 가장 높은 종목부터 순차적으로
5종목 이하로 매수하도록 작성되어 있습니다.
---> 이때 만약 잔고에 해당 종목들의 잔고가 미결제 포함하여 100주 미만이라면
매수주문이 발생하고, 100주 이상이라면 건너뛰고 가격이 높은 순으로 검색된
종목중 다음 가격이 높은 종목으로 순연하여 5종목 이하로 주문되도록 하고 싶습니다.
3) 8시45분 ~ 8시55분에 잔고에 있는 종목들중 평균매입가격대비 전일종가 기준으로
30% 이상 상승한 종목들이 있다면, 해당종목들의 전체 수량을 전일종가로
매도주문 내고 싶습니다.
---> 매도시 수량은 3일 결제로 인한 전일의 미결제 수량 포함입니다.
4) 당일 매수 및 매도 주문에 대한 정정과 취소는 없습니다.
즉, 개장전 주문이 장종료시까지 유지됩니다.
차트는 사용하지 않습니다.
다음 수식은 일봉기준으로 종목검색후, 장개시전 고가순으로 5종목 매수주문
< 스크립트 객체 >
- Main
- Account1
- Vol
---------------------
var List;
var ListCnt;
var RcvCount;
var ItemCode = new Array(200);
var PPrice = new Array(200);
var RcvCount = 0;
var Ymoney;
function Main_OnStart()
{
Main.ReqPowerSearch("test1")
Ymoney = Account1.GetBalanceETCinfo(0); // D+2 예수금을 불러오는지요?
Main.MessageLog("종목검색");
}
function Main_OnRcvItemList(aItemList, nCount)
{
List = aItemList;
ListCnt = nCount;
for (var i = 0; i < nCount; i++)
{
Main.ReqMarketData(List[i], 0, 0);
}
}
function Main_OnRcvMarketData(MarketData)
{
RcvCount = RcvCount+1;
ItemCode[RcvCount] = MarketData.code;
PPrice[RcvCount] = MarketData.prevClose;
if (RcvCount == ListCnt)
{
for (var ii = 1; ii <= 5; ii++)
{
var HH = -1;
var Hi = -1;
for (var iii = 1; iii <= RcvCount; iii++)
{
if (PPrice[iii] > HH)
{
HH = PPrice[iii];
Hi = iii;
}
}
//매수주문
if (Hi > -1)
{
Account1.OrderBuy(ItemCode[Hi], Vol, PPrice[Hi], 0);
ItemCode[Hi] = -1;
PPrice[Hi] = -1;
}
}
}
}
감사합니다 !!