커뮤니티

수식 부탁드립니다.

프로필 이미지
치치야
2025-12-31 10:20:59
99
글번호 229512
답변완료

스팟문의는 예스스팟 Q&A에 올려 주시기 바랍니다.

스팟은 기본적으로 저희가 완성식을 작성해 드리지는 않습니다.

질문 올리신면 가이드식으로 답변드리며

답변받으시는데 시간이 좀 걸리실 수 있습니다.




안녕하세요. 이 수식어에 분할 매수 수식어가 필요합니다. 부탁드립니다.


보유종목 중 마이너스에 매수하기

1차매수후- 신규종목

2차매수- -3%

3차매수- -5%

4차매수- -8%

+3% 전량익절


보유종목중 2.3.4차에 도달하지 않았더라도 +3% 익절시 전량 매도

var timer5 = 2; // 2초

var 매수금 = 500000;

var OrderList = [];

var MKList = [];

var req;

function Main_OnStart()

{

Main.SetTimer(1, timer5*1000);

MKList =[];

}

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 > 090300 && HHMMSS < 151500)

{

Main.ReqPowerSearch("test");

}

if (nEventID == 2)

{

Main.ReqMarketData(OrderList[req]);

}

}

function Main_OnRcvItemList(altemList, nCount)

{

Main.KillTimer(1);

OrderList = [];

if (nCount >= 1)

{

if (MKList.length == 0)

{

OrderList = altemList;

}

else

{

for (var a = 0; a < nCount; a++)

{

var Add = true;

for (var b = 0; b < MKList.length; b++)

{

if (altemList[a] == MKList[b].code)

{

Add = false;

}

}

if (Add == true && !IsStockInAccount(altemList[a]))

{

OrderList.push(altemList[a]);

}

}

}

}

if (OrderList.length == 0)

{

Main.SetTimer(1, timer5*1000);

}

else

{

req = 0;

Main.ReqMarketData(OrderList[req]);

}

}

function Main_OnRcvMarketData(MarketData)

{

if (MarketData.code == OrderList[req])

{

MKList.push(MarketData);

if (!IsStockInAccount(MarketData.code)) {

//Account1.OrderBuy(MarketData.code,1,0,2);

// Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1);

Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(5)),MarketData.Ask(5),0);

Main.MessageList(MarketData.code + " 주식을 매수합니다.");

} else {

Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다.");

}

req = req+1;

if (req < OrderList.length)

{

var aa = Main.ReqMarketData(OrderList[req]);

if (aa == -1)

{

Main.SetTimer(2, 15000);

}

}

else

{

Main.SetTimer(1, timer5*1000);

}

}

}

function IsStockInAccount(stockCode) {

var numberOfBalances = Account1.GetTheNumberOfBalances();

for (var i = 0; i < numberOfBalances; i++) {

Account1.SetBalance(i);

if (stockCode == Account1.Balance.code) {

return true;

}

}

return false;

}

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-01-13 10:03:44

안녕하세요 예스스탁입니다. 아래 수식 참고하시기 바랍니다. var timer5 = 2; // 2초 var 매수금 = 500000; var OrderList = []; var MKList = []; var B = [], P = []; var req; function Main_OnStart() { Main.SetTimer(1, timer5*1000); Main.SetTimer(3, 1000); MKList =[]; } 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 > 090300 && HHMMSS < 151500) { Main.ReqPowerSearch("test"); } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } if (nEventID == 3 && MKList.length > 0) { for (var i = 0; i < MKList.length; i++) { //Main.MessageList(MKList[i].code,B[i],MKList[i].current,P[i]); if (B[i] == 1 && MKList[i].current <= P[i]*0.97 || B[i] == 2 && MKList[i].current <= P[i]*0.95 || B[i] == 3 && MKList[i].current <= P[i]*0.92) { Account1.OrderBuy(MKList[i].code,Math.floor(매수금/MKList[i].Ask(5)),MKList[i].Ask(5),0); B[i] = B[i]+1; Main.MessageList(MKList[i].code,"추가매수:",B[i],"차"); } if (B[i] >= 1) { Account1.SetBalance(MKList[i].code, 0); if (Account1.Balance.count > 0 && MKList[i].current >= Account1.Balance.avgUnitCost*1.03) { B[i] = -1; Account1.OrderSell(MKList[i].code,Account1.Balance.count,MKList[i].Bid(5),0); Main.MessageList(MKList[i].code,"익절:"); } } } } } function Main_OnRcvItemList(altemList, nCount) { Main.KillTimer(1); OrderList = []; if (nCount >= 1) { if (MKList.length == 0) { OrderList = altemList; } else { for (var a = 0; a < nCount; a++) { var Add = true; for (var b = 0; b < MKList.length; b++) { if (altemList[a] == MKList[b].code) { Add = false; } } if (Add == true && !IsStockInAccount(altemList[a])) { OrderList.push(altemList[a]); } } } } if (OrderList.length == 0) { Main.SetTimer(1, timer5*1000); } else { req = 0; Main.ReqMarketData(OrderList[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); if (!IsStockInAccount(MarketData.code)) { //Account1.OrderBuy(MarketData.code,1,0,2); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1); Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(5)),MarketData.Ask(5),0); Main.MessageList(MarketData.code," 주식을 매수합니다.",MarketData.current); B.push(1); P.push(MarketData.current) } else { Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다."); B.push(0); P.push(0); } req = req+1; if (req < OrderList.length) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, timer5*1000); } } } function IsStockInAccount(stockCode) { var numberOfBalances = Account1.GetTheNumberOfBalances(); for (var i = 0; i < numberOfBalances; i++) { Account1.SetBalance(i); if (stockCode == Account1.Balance.code) { return true; } } return false; } 즐거운 하루 되세요