예스스탁
예스스탁 답변
2024-08-05 17:46:27.0
안녕하세요
예스스탁입니다.
올리신 수식에 직접 수정하신 내용들이 혼합되어 있어
식을 수정을 해드리기가 어렵습니다.
종목검색 후에
기존 검색되어 보유 종목이면 수익/손실 체크해서 추가 매수하고
보유종목이 아니면 해당 종목들의 종목코드를 별도로 모아
종목객체를 생성해서 주문하게 수정해 드립니다.
아래식 참고하셔서 수정보완해 이용하시기 바랍니다.
var Req;
var BL = [] ; // 보유종목 코드 저장 리스트
var MK = [], MKreq;
var MKCnt = [];
var MKItem = [];
//종목검색이 완료
function Main_OnRcvItemList(aItemList, nCount)
{
Main.MessageList("검색완료",aItemList);
BL = [];
//검색종목수가 1개이고 이상이면
if (nCount > 0 )
{
for (var i = 0; i < aItemList.length; i++ )
{
//잔고를 셋팅
Account1.SetBalanceItem(aItemList[i],0);
if (Account1.Balance.count > 0) // 검색종목이 보유종목
{
if (MK.length > 0)
{
for (var x = 0; x < MK.length; x++ )
{
//기존 만들어진 종목객체 중 동일 종목이 있으면
if (Account1.Balance.code == MK[x].code)
{
//추가매수수량
Vol1 = Math.floor(추가매수금액/MK[x].Bid(1));
//평단가대비 -20% 이하이면 추가매수
if (Account1.Balance.current <= Account1.Balance.avgUnitCost * 0.8 )
{
Main.MessageList(Account1.Balance.code,"|보유종목 -20% 이하 추가 물타기 매수 ");
Account1.OrderBuy(Account1.Balance.code, Vol1, MK[x].Ask(2), 0);
}
//평단가대비 +5% 이상이면 추가매수
if (cond == true && Account1.Balance.current >= Account1.Balance.avgUnitCost * 1.05 )
{
Main.MessageList(Account1.Balance.code,"|보유종목 +5% 이상 추가 불타기 매수 ");
Account1.OrderBuy(Account1.Balance.code,Vol1,MK[x].Ask(2), 0);
}
}
}
}
}
else //보유종목이 아니면 BL에 종목코드 저장
{
BL.push(aItemList[i]);
}
}
if (BL > 0)
{
MKreq = 0;
Main.ReqMarketData(BL[MKReq], 0, 0);
Main.MessageList("요청",BL[MKReq],Req);
}
}
else
{
Main.MessageList("검색종목 없어 3초후 재검색");
Main.SetTimer(2, 3000);
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
//요청한 종목객체 생성이 완료되면
if (MarketData.code == BL[MKreq])
{
Main.MessageList("종목객체생성 : ",MarketData.code);
//MK배열변수에 종목객체 저장
MK[MKreq] = MarketData;
MKItem[MKreq] = MarketData.code;
MKCnt[MKreq] = 0 ;
MKreq = MKreq+1;
if (MKreq < BL.length)
{
Main.MessageList("ReqMarket : ",MKreq,BL[MKreq]);
S = Main.ReqMarketData(BL[MKreq]);
if (S == -1)
{
Main.MessageList("종목객체 생성제한 : ", Main.GetLimitedTime(0));
Main.SetTimer(4, 16000);// 타이머 4 15초 이후 간격(16초)
}
}
}
else
{
Main.MessageList("BL종목객체요청완료");
Main.SetTimer(2, 3000);
}
}
즐거운 하루되세요
> 잼스딘 님이 쓴 글입니다.
> 제목 : 도움 요청 드립니다.
> ## 검색종목이 보유종목 이고,
+/- 조건일 경우 불타기/물타기 하려 합니다.
여러 수식들을 참고해 조건 수식 작성했는데,나머지는 잘 동작하는데
이 부분만 오랜 시간 수정하며 작동 했는데 안되서 도움 요청 드립니다.
var Req;
var BL = [] ; // 보유종목 코드 저장 리스트
var MK = [], MKreq;
var MKCnt = [];
var MKItem = [];
//종목검색이 완료
function Main_OnRcvItemList(aItemList, nCount)
{
var num = Account1.GetTheNumberOfBalances();
//검색종목수가 1개 이상이면
if (nCount >= 1 )
{
ItemList = aItemList;
Count = nCount;
Main.MessageList("검색완료",ItemList);
//종목객체 생성 요청
Main.MessageList("요청전 EntryItem",EntryItem);
var include = false;
for (var i = 0; i < num.length; i++ )
{
//잔고를 셋팅
Account1.SetBalanceItem(i);
if ( Account1.Balance.code == ItemList[Req] ) // 검색종목이 보유종목
{
include = true;
}
}
if (include == true )
{
Account1.SetBalanceItem(ItemList[Req] ,0);
var cond = false;
for (var i = 0; i < MKItem.length; i++)
{
if (MKItem[i] == ItemList[Req])
{
cond = true;
}
}
if (MKCnt[i] == 0 && Account1.Balance.count > 0 )
{
Account1.SetBalance(MK[i].code, 0);
Vol1 = Math.floor(추가매수금액/MK[i].Bid(1));
if (cond == true && Account1.Balance.current <= Account1.Balance.avgUnitCost * 0.8 )
{
Main.MessageList(Account1.Balance.code,"|보유종목 -20% 이하 추가 물타기 매수 ");
MKCnt[i] = 1;
Account1.OrderBuy(MK[i].code, Vol1, MK[i].Ask(2), 0);
}
if (cond == true && Account1.Balance.current >= Account1.Balance.avgUnitCost * 1.05 )
{
Main.MessageList(Account1.Balance.code,"|보유종목 +5% 이상 추가 불타기 매수 ");
MKCnt[i] = 1;
Account1.OrderBuy(MK[i].code, Vol1,MK[i].Ask(2), 0);
}
}
}
if (include == false) // 검색종목이 보유종목 아님
{
Account1.SetBalanceItem(ItemList[Req] ,0);
var Entry = false;
for(var z = 0; z < EntryItem.length; z++)
{
if (EntryItem[z] == ItemList[Req])
{
Entry = true;
}
}
if (Entry == false )
{
if (Account1.Balance.count == 0)
{
Main.ReqMarketData(ItemList[Req], 0, 0);
Main.MessageList("요청",ItemList[Req],Req);
}
}
if (Entry == true)
{
Main.MessageList("요청x",ItemList[Req]);
}
}
Req = Req+1;
Main.SetTimer(2, 3000);//간격(4초)
}
else
{
Main.MessageList("검색종목 없어 3초후 재검색");
Search = false;
}
}
//요청한 종목객체가 생성되면
function Main_OnRcvMarketData(MarketData)
{
//요청한 종목객체 생성이 완료되면
if (MarketData.code == BL[MKreq])//a MK[MKreq] = MarketData 담기
{
Main.MessageList("종목객체생성 : ",MarketData.code);
//MK배열변수에 종목객체 저장
MK[MKreq] = MarketData;
MKItem[MKreq] = MarketData.code;
MKCnt[MKreq] = 0 ;
MKreq = MKreq+1;
if (MKreq < BL.length)
{
Main.MessageList("ReqMarket : ",MKreq,BL[MKreq]);
S = Main.ReqMarketData(BL[MKreq]);
if (S == -1)
{
Main.MessageList("종목객체 생성제한 : ", Main.GetLimitedTime(0));
Main.SetTimer(4, 16000);// 타이머 4 15초 이후 간격(16초)
}
}
else
{
Main.MessageList("BL종목객체요청완료");
}
}