커뮤니티
다시 한번 검토해 주시면 감사하겠습니다.
항상 노고에 머리숙여 감사드립니다.
1.글번호 229848
수식어 사용해 보니 다음날 분할매수가 되지 않터라구요
그래서 챗-지피티을 이용해서 작성해 보았습니다.
이게 맞는지 점검해 주시면 감사하겠습니다.
위 조건이 힘드시면 2번 해당하는 수식어 부탁 드립니다.
2.당일 분할매수 조건 말고, 보유종목들중에 마이너스 조건에 맞게 다음날 부터 분할매수 할수 있게끔 부탁드립니다.
var timer5 = 2;
var 매수금 = 500000;
var OrderList = [];
var MKList = [];
var B = [], P = [], S = [];
var SC = 1, req = 0;
function Main_OnStart()
{
// 이전 상태 복원
if (Main.GetUserValue("XB") != "")
{
B = JSON.parse(Main.GetUserValue("XB"));
P = JSON.parse(Main.GetUserValue("XP"));
S = JSON.parse(Main.GetUserValue("XS"));
}
OrderList = [];
if (S.length > 0)
{
OrderList = S;
SC = 0;
req = 0;
Main.ReqMarketData(OrderList[req]);
}
else
{
SC = 1;
Main.SetTimer(1, timer5 * 1000);
Main.SetTimer(3, 1000);
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds();
if (nEventID == 1 && HHMMSS > 090300 && HHMMSS < 151500)
{
Main.ReqPowerSearch("test");
}
if (nEventID == 3 && MKList.length > 0)
{
for (var i = 0; i < MKList.length; i++)
{
Account1.SetBalance(MKList[i].code, 0);
if (Account1.Balance.count <= 0) continue;
var avg = Account1.Balance.avgUnitCost;
var cur = MKList[i].current;
if (
(B[i] == 1 && cur <= avg * 0.97) ||
(B[i] == 2 && cur <= avg * 0.95) ||
(B[i] == 3 && cur <= avg * 0.92)
)
{
Account1.OrderBuy(
MKList[i].code,
Math.floor(매수금 / MKList[i].Ask(5)),
MKList[i].Ask(5),
0
);
B[i]++;
Main.MessageList(MKList[i].code, "분할매수", B[i] - 1, "차");
continue;
}
if (B[i] >= 4 && cur <= avg * 0.85)
{
B[i] = -1;
Account1.OrderSell(
MKList[i].code,
Account1.Balance.count,
MKList[i].Bid(5),
0
);
Main.MessageList(MKList[i].code, "분할완료 후 손절 -15%");
continue;
}
if (cur >= avg * 1.11)
{
B[i] = -1;
Account1.OrderSell(
MKList[i].code,
Account1.Balance.count,
MKList[i].Bid(5),
0
);
Main.MessageList(MKList[i].code, "익절");
continue;
}
}
}
}
function Main_OnRcvItemList(altemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
for (var i = 0; i < nCount; i++)
{
if (!IsStockInAccount(altemList[i]) && S.indexOf(altemList[i]) == -1)
{
OrderList.push(altemList[i]);
}
}
if (OrderList.length > 0)
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
else
{
Main.SetTimer(1, timer5 * 1000);
}
}
/* =======================
MarketData 수신
======================= */
function Main_OnRcvMarketData(MarketData)
{
for (var i = 0; i < MKList.length; i++)
{
if (MKList[i].code == MarketData.code)
{
MKList[i] = MarketData;
return;
}
}
MKList.push(MarketData);
if (!IsStockInAccount(MarketData.code))
{
Account1.OrderBuy(
MarketData.code,
Math.floor(매수금 / MarketData.Ask(5)),
MarketData.Ask(5),
0
);
B.push(1);
P.push(MarketData.current);
S.push(MarketData.code);
Main.MessageList(MarketData.code, "신규매수");
}
}
function IsStockInAccount(stockCode)
{
var cnt = Account1.GetTheNumberOfBalances();
for (var i = 0; i < cnt; i++)
{
Account1.SetBalance(i);
if (Account1.Balance.code == stockCode)
return true;
}
return false;
}
/* =======================
스팟 종료
======================= */
function Main_OnClose()
{
for (var i = B.length - 1; i >= 0; i--)
{
if (B[i] == -1)
{
B.splice(i, 1);
P.splice(i, 1);
S.splice(i, 1);
}
}
Main.SetUserValue("XB", JSON.stringify(B));
Main.SetUserValue("XP", JSON.stringify(P));
Main.SetUserValue("XS", JSON.stringify(S));
}