첨부 이미지
그림1
그림2
이전에 게시된 내용으로 공부하고 있습니다.
아래코드로 실험을 해보면 매수가 1백만원 이상으로 진행되는 것 같습니다.
첨부 화면2에 보시면 계속해서 동일 종목을 제시한 금액보다 많이 반복하여 매수하는 것 같습니다.
100만원까지만 매수할 수 있도록 정정하려면 어떻게 하면 될까요??
항상 감사합니다.
var BL = [];
var MK = [];
var ID = [];
var Num = [];
var Fill = [];
var req,MKreq;
var n1 = 60;//60초
var n2 = 5;//%
var mm = 1000000;//매수금액
var n3 = 30;//30종목
var run;
function Main_OnStart()
{
req = 0;
CTreq = 0;
MKreq = 0;
Main.SetTimer(1, n1*1000);
fillcnt = 0;
run= true;
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && run == true)
{
//타이머 종료
Main.KillTimer(1);
Main.MessageList("OnTimer --> ReqPowerSearch");
Main.ReqPowerSearch("test이평1");
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList("Main_OnRcvItemList : ",nCount);
if ( run == true)
{
if (nCount <= 0) //검색된 종목이 없으면
{
//타이머 다시 셋팅
Main.SetTimer(1, n1*1000);
}
else
{
BL = [];
if (MK.length == 0)
{
BL = aItemList;
Main.MessageList("BL:",BL);
}
else
{
for(var a = 0 ; a < aItemList.length ; a++)
{
var add = true;
for(var b = 0 ; b < MK.length ; b++)
{
if (aItemList[a] == MK[b].code)
{
add = false;
}
}
if (add == true)
{
BL.push(aItemList[a]);
}
}
Main.MessageList("BL:",BL);
}
Main.MessageList("시간",HHMMSS,"BL : ",BL.length);
if (BL.length > 0)
{
//차트 요청
req = 0;
Main.ReqMarketData(BL[req]);
}
else //없으면 타이머 다시 셋팅
{
Main.SetTimer(1, n1*1000);//1번 타이머, 60초
}
}
}
}
function Main_OnRcvMarketData(MarketData)
{
if (run == true)
{
if (MarketData.code == BL[req])
{
MK[MKreq] = MarketData;
ID[MKreq] = 0;
Num[MKreq] = 0;
Fill[MKreq] = 0;
Main.MessageList("RcvMarket : ",req,MK[MKreq].code);
MKreq = MKreq+1;
req = req+1;
if (req < BL.length)
{
Main.MessageList("ReqMarket : ",req,BL[req]);
Main.ReqMarketData(BL[req]);
}
else
{
Main.MessageList("종목객체요청완료");
Main.SetTimer(1, n1*1000);//1번 타이머, 60초
}
}
}
}
function Main_OnU*pdateMarket(sItemCode, lU*pdateID)//*제거
{
if (lU*pdateID == 20001)//*제거
{
for(var i = 0 ; i < MK.length ; i++)
{
if (sItemCode == MK[i].code && ID[i] == 0 && MK[i].current <= MK[i].open*(1+n2/100))// 5%이상으로 정정
{
var vol = Math.floor(mm/MK[i].current);
ID[i] = Act1.OrderBuy(MK[i].code,vol,MK[i].current, 0);
}
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
for(var i = 0 ; i < ID.length ; i++)
{
if (OrderResponse.orderID == ID[i])
{
Num[i] = OrderResponse.orderNum;
}
}
}
function Main_OnNotifyFill(NotifyFill)
{
for(var i = 0 ; i < Num.length ; i++)
{
if (Fill[i] == 0 && NotifyFill.orderNum == Num[i])
{
Fill[i] = 1;
FillCnt = FillCnt+1;
if (Fillcnt == n3)
{
run = false;
}
}
}
if (run == false)
{
//타이머 종료
Main.KillTimer(1);
var nufill = Account1.GetTheNumberOfUnfills()
for(var i = 0 ; i < Num.length ; i++)
{
Act1.SetUnfill(Num[i]);
if (Act1.Unfill.count > 0 && Fill[i] == 0)
{
Act1.OrderCancel(Num[i]);
}
}
}
}
답변 1
예스스탁
예스스탁 답변
2020-04-22 09:30:32
안녕하세요
예스스탁입니다.
해당수식은 주문후 발급된 주문아이디를 변수에 저장해서
해당 종목에 대한 반복주문을 제어하게 됩니다.
시험적용은 주문아이디가 발급되지 않아 변수에 값이 0이 유지되어
반복적으로 발생하게 됩니다.
즐거운 하루되세요
> 짱짱해야지 님이 쓴 글입니다.
> 제목 : 질문
> 이전에 게시된 내용으로 공부하고 있습니다.
아래코드로 실험을 해보면 매수가 1백만원 이상으로 진행되는 것 같습니다.
첨부 화면2에 보시면 계속해서 동일 종목을 제시한 금액보다 많이 반복하여 매수하는 것 같습니다.
100만원까지만 매수할 수 있도록 정정하려면 어떻게 하면 될까요??
항상 감사합니다.
var BL = [];
var MK = [];
var ID = [];
var Num = [];
var Fill = [];
var req,MKreq;
var n1 = 60;//60초
var n2 = 5;//%
var mm = 1000000;//매수금액
var n3 = 30;//30종목
var run;
function Main_OnStart()
{
req = 0;
CTreq = 0;
MKreq = 0;
Main.SetTimer(1, n1*1000);
fillcnt = 0;
run= true;
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && run == true)
{
//타이머 종료
Main.KillTimer(1);
Main.MessageList("OnTimer --> ReqPowerSearch");
Main.ReqPowerSearch("test이평1");
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList("Main_OnRcvItemList : ",nCount);
if ( run == true)
{
if (nCount <= 0) //검색된 종목이 없으면
{
//타이머 다시 셋팅
Main.SetTimer(1, n1*1000);
}
else
{
BL = [];
if (MK.length == 0)
{
BL = aItemList;
Main.MessageList("BL:",BL);
}
else
{
for(var a = 0 ; a < aItemList.length ; a++)
{
var add = true;
for(var b = 0 ; b < MK.length ; b++)
{
if (aItemList[a] == MK[b].code)
{
add = false;
}
}
if (add == true)
{
BL.push(aItemList[a]);
}
}
Main.MessageList("BL:",BL);
}
Main.MessageList("시간",HHMMSS,"BL : ",BL.length);
if (BL.length > 0)
{
//차트 요청
req = 0;
Main.ReqMarketData(BL[req]);
}
else //없으면 타이머 다시 셋팅
{
Main.SetTimer(1, n1*1000);//1번 타이머, 60초
}
}
}
}
function Main_OnRcvMarketData(MarketData)
{
if (run == true)
{
if (MarketData.code == BL[req])
{
MK[MKreq] = MarketData;
ID[MKreq] = 0;
Num[MKreq] = 0;
Fill[MKreq] = 0;
Main.MessageList("RcvMarket : ",req,MK[MKreq].code);
MKreq = MKreq+1;
req = req+1;
if (req < BL.length)
{
Main.MessageList("ReqMarket : ",req,BL[req]);
Main.ReqMarketData(BL[req]);
}
else
{
Main.MessageList("종목객체요청완료");
Main.SetTimer(1, n1*1000);//1번 타이머, 60초
}
}
}
}
function Main_OnU*pdateMarket(sItemCode, lU*pdateID)//*제거
{
if (lU*pdateID == 20001)//*제거
{
for(var i = 0 ; i < MK.length ; i++)
{
if (sItemCode == MK[i].code && ID[i] == 0 && MK[i].current <= MK[i].open*(1+n2/100))// 5%이상으로 정정
{
var vol = Math.floor(mm/MK[i].current);
ID[i] = Act1.OrderBuy(MK[i].code,vol,MK[i].current, 0);
}
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
for(var i = 0 ; i < ID.length ; i++)
{
if (OrderResponse.orderID == ID[i])
{
Num[i] = OrderResponse.orderNum;
}
}
}
function Main_OnNotifyFill(NotifyFill)
{
for(var i = 0 ; i < Num.length ; i++)
{
if (Fill[i] == 0 && NotifyFill.orderNum == Num[i])
{
Fill[i] = 1;
FillCnt = FillCnt+1;
if (Fillcnt == n3)
{
run = false;
}
}
}
if (run == false)
{
//타이머 종료
Main.KillTimer(1);
var nufill = Account1.GetTheNumberOfUnfills()
for(var i = 0 ; i < Num.length ; i++)
{
Act1.SetUnfill(Num[i]);
if (Act1.Unfill.count > 0 && Fill[i] == 0)
{
Act1.OrderCancel(Num[i]);
}
}
}
}