커뮤니티

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

프로필 이미지
치치야
2026-02-03 13:51:39
96
글번호 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));

}

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-02-10 12:50:06

안녕하세요 예스스탁입니다. 죄송하지만 해당 내용부터는 사용자분이 수정보완해 보셔야 합니다.

스팟은 실시간에서 테스트를 하면서 식을 완성해야 하므로 식작성에 시간이 많이 소모됩니다.
업무상 시간을 많이 할애해 드리기는 어려워
스팟수식변은 작성상 흐름정도를 파악할 수 있는 가이드만 드리고 있습니다.

가이드를 참고하셔서 사용자분이 식을 완성해 사용하셔야 합니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요