var ItemList;
var Count;
var ReqCount;
var X1 = false
var OrderList = [];
var MKList = [];
var req;
var OrderCode;
function Main_OnStart()
{
Main.SetTimer(1, 3000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//9시01분~15시20분 사이
if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000)
{
Main.MessageLog("스팟시작");
Main.MessageLog("종목검색시작");
Main.ReqPowerSearch("하이업 지표5선")
}
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)
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, 3000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
var MM = Account1.GetBalanceETCinfo(0);
MKList.push(MarketData);
Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0);
req = req+1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 3000);
}
}
else
{
Main.SetTimer(1, 3000);
}
if (Account1.Balance.count >= 1)
Main.KillTimer(1);
if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033)
{
X1 = true;
Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0);
} }
}
위 스팟수식을 만들어서 사용중인데
매수후 3.3% 이상이면 매도를 해야하는데 안합니다.
어디가 잘못된걸까요???
그리고 1종목 이상 검색이되면 스팟을 멈추고 싶어요
답변 1
예스스탁
예스스탁 답변
2024-02-14 15:36:58.0
안녕하세요
예스스탁입니다.
1
function Main_OnRcvMarketData(MarketData)
위 이벤트는 종목객체가 만들지는 순간에만 동작하는 이벤트입니다.
만들어진 종목객체의 시세가 발생하면 알려주는 이벤트는 별도로 존재합니다.
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)
영문 업데이트가 게시판 금칙어라 up*date와 같이 중간에 별이 추가되었습니다.
아래식에서는 모두 삭제하고 사용하셔야 합니다.
2
var ItemList;
var Count;
var ReqCount;
var X1 = false
var OrderList = [];
var MKList = [];
var req;
var OrderCode;
var OD = [];
function Main_OnStart()
{
Main.SetTimer(1, 3000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//9시01분~15시20분 사이
if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000)
{
Main.MessageLog("스팟시작");
Main.MessageLog("종목검색시작");
Main.ReqPowerSearch("하이업 지표5선")
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
//한종목이상 검색되면 검색하는 타이머는 종료
if (nCount >= 1)
{
Main.KillTimer(1);
OrderList = aItemList;
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
var MM = Account1.GetBalanceETCinfo(0);
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
OD.Push(1);//주문 흐름 저장변수 매수는 1
Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0);
req = req+1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 3000);
}
}
else
{
Main.MessageList("객체생성완료")
}
}
}
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제
{
//체결시세가 수신되면
if (lUp*dateID == 20001)//*삭제
{
//주문한 종목들 시세
for (var i = 0; i < MKList.length; i++)
{
//MKList종목들 중 어느종목인지 찾고
if (sItemCode == MKList[i].code)
{
//잔고셋팅
Account1.SetBalance(MKList[i].code,0);
//평단가 대비 3.3이상이면
if (OD[i] == 1 && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033)
{
//OD값은 2로 변경하고(매수후 한번 매도하기 위함)
OD[i] = 2;
//매도주문
Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0);
}
}
}
}
}
즐거운 하루되세요
> 철판때기 님이 쓴 글입니다.
> 제목 : 수식질문 드립니다 도와주세요~~~
> var ItemList;
var Count;
var ReqCount;
var X1 = false
var OrderList = [];
var MKList = [];
var req;
var OrderCode;
function Main_OnStart()
{
Main.SetTimer(1, 3000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//9시01분~15시20분 사이
if (nEventID == 1 && HHMMSS >= 90100 && HHMMSS < 152000)
{
Main.MessageLog("스팟시작");
Main.MessageLog("종목검색시작");
Main.ReqPowerSearch("하이업 지표5선")
}
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)
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, 3000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
var MM = Account1.GetBalanceETCinfo(0);
MKList.push(MarketData);
Account1.OrderBuy(MarketData.code,Math.floor((MM*0.99)/ MarketData.Ask(1)),MarketData.Ask(1),0);
req = req+1;
if (req < OrderList.length)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 3000);
}
}
else
{
Main.SetTimer(1, 3000);
}
if (Account1.Balance.count >= 1)
Main.KillTimer(1);
if (X1 == false && Account1.Balance.count > 0 && Account1.Balance.current >= Account1.Balance.avgUnitCost*1.033)
{
X1 = true;
Account1.OrderSell(Account1.Balance.code,Math.floor(Account1.Balance.current),MarketData.Bid(1),0);
} }
}
위 스팟수식을 만들어서 사용중인데
매수후 3.3% 이상이면 매도를 해야하는데 안합니다.
어디가 잘못된걸까요???
그리고 1종목 이상 검색이되면 스팟을 멈추고 싶어요