커뮤니티

다시 한번 검토해 주시면 감사하겠습니다.

프로필 이미지
치치야
2026-02-03 13:51:39
17
글번호 230297

항상 노고에 머리숙여 감사드립니다.

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));

}

답변 0