예스스탁
예스스탁 답변
2024-12-18 16:23:42.0
안녕하세요
예스스탁입니다.
1
스팟 수식 답변은 가이드 입니다.
아래 내용 참고하시기 바랍니다.
2
수식 내에 게시판 금칙어가 있습니다.
영문 업데이트가 Up*date와 같이 중간에 *이 추가되어 있으므로 *삭제하시기 바랍니다.
3
var 최대보유종목수 = 3;
var 타이머간격 = 5; // 5초
var 매수금 = 100000;
var 수량 = 1;
var 익절 = 5, 손절 = -5;
var OrderList = [];
var BuyList = [];
var MKList = [],MKorder = [];
var req;
function Main_OnStart()
{
// 1번 타이머, 5초
Main.SetTimer(1, 타이머간격*1000);
Main.SetTimer(99, 1*1000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
YYYYMMDD = d.getFullYear()*10000+(d.getMonth()+1)*100+d.getDate();
HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500)
{
// 종목검색 실행
if (MKList.length < 최대보유종목수)
{
Main.ReqPowerSearch("5_20 돌파");
}
else
{
Main.SetTimer(1, 타이머간격*1000);
}
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
if (nEventID == 99 && MKList.length > 0)
{
for (var i = 0; i < MKList.length;i++)
{
Account1.SetBalance(MKList[i],0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2 && MKorder[i] == 1)
{
if (MKList[i].current >= Account1.Balance.avgUnitCost *(1+익절/100) ||
MKList[i].current <= Account1.Balance.avgUnitCost *(1+손절/100) )
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
MKorder[i] = -1;
}
}
}
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (BuyList.length == 0)
{
OrderList = aItemList;
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < BuyList.length; b++)
{
if (aItemList[a] == BuyList[b])
{
Add = false;
}
}
if (Add == true)
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, 타이머간격*1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
MKorder.push(1);
BuyList.push(MarketData.code);
//Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); // 10만원 시장가 주문
// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); // 10만원 지정가 주문
// 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다.
Account1.OrderBuy(MarketData.code,수량,0,1); // 1주를 시장가 주문
req = req+1;
if (req < OrderList.length && MKList.length < 최대보유종목수)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, 타이머간격*1000);
}
}
}
//계좌이벤트
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*삭제
{
//종목삭제(청산)
if (MKList.length > 0 && sAccntNum == Account1.number && lUp*dateID == 30002)//*삭제
{
for (var i = 0; i < MKList.length; i++)
{
if (MKList[i].code == sItemCode)
{
Main.RemoveObject(MKList[i])
MKList.splice(i,1);
}
}
}
}
즐거운 하루되세요
> 비밀통로 님이 쓴 글입니다.
> 제목 : 보완 부탁드립니다...^^
> 아래와 같이 보완 부탁드립니다.
1) 매수 수량을 수시로 변경해서 사용 할 수 있도록 조건을 추가 해주세요.
// Account1.OrderBuy(MarketData.code,1,0,1); // n주를 시장가 주문
- n주 부분에 수량을 임의로 바꾸어 쓸 수 있도록
2) 매수 후 손절 기준에 오면 자동 매도할 수 있도록 조건을 추가 해주세요.
- 매수가 기준 -5%( 수치를 변경해서 사용할 수 있도록 해주세요)
3) 매수 후 익절 기준에 오면 자동 매도할 수 있도록 조건을 추가 해주세요.
- 매수가 기준 +5%( 수치를 변경해서 사용할 수 있도록 해주세요)