답변완료
예스스팟으로 종목을 매수하고 있습미다
종목매수를 자동으로 하고나서 파워종목에서 만든 다른 조건검색식으로 오늘 매수한 종목을 매도 하고 싶습미다
예스스팟 자동매수 수식은 다음과 같습미다..
var timer2 = 2; // 2초
var 매수금 = 17000000;
var 손절 = 0.80;
var 익절 = 1.20;
var OrderList = [];
var MKList = [];
var req;
var 종목수 = 1, BuyCount;
function Main_OnStart()
{
//1번 타이머, 1초
Main.SetTimer(1, timer2*1000);
// 오늘 매수한 종목 관리 배열 초기화
MKList = [];
//스팟 시작시 잔고평가금액
V1 = Account1.GetBalanceETCinfo(100);
BuyCount = 0;
}
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 >= 090005 && HHMMSS < 140010 && BuyCount < 종목수)
{
//종목검색 수행
Main.ReqPowerSearch("테스트")
}
if (nEventID == 1)
{
//계좌보유종수
var num = Account1.GetTheNumberOfBalances();
//9시~11시 15분 사이
if (HHMMSS >= 090006 && HHMMSS < 151900)
{
//보유종목이 1개 이상
if (num >= 1)
{
//계좌평가금액이 스팟시작시 평가금액대비 3% 이상이면 전종목 전량매도
if (Account1.GetBalanceETCinfo(100) >= V1*1.20)
{
//1번 타이머 종료
Main.KillTimer(1);
//계좌리스트의 순서대로
for (var i = 0; i < num; i++)
{
//잔고를 셋팅
Account1.SetBalance(i);
//수량이 있고 3%수익이거나 5% 손실이면 시장가 매도
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
else //아니면 개별종목 3%익절, -5%손절 체크
{
//계좌리스트의 순서대로
for (var i = 0; i < num; i++)
{
//잔고를 셋팅
Account1.SetBalance(i);
//수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도
if (Account1.Balance.count > 0 &&
(Account1.Balance.current >= Account1.Balance.avgUnitCost*익절 ||
Account1.Balance.current <= Account1.Balance.avgUnitCost*손절))
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
}
}
//오후10시 00분이후이면 모든 종목 전량 수익에 상관없이 매도
if (HHMMSS >= 152900)
{
//1번 타이머 종료
Main.KillTimer(1);
//계좌리스트의 순서대로
for (var i = 0; i < num; i++)
{
//잔고를 셋팅
Account1.SetBalance(i);
//수량이 있고 3%수익이거나 -5% 손실이면 시장가 매도
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (MKList.length == 0)
{
OrderList = aItemList;
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Add = false;
}
}
if (Add == true && !IsStockInAccount(aItemList[a]))
{
OrderList.push(aItemList[a]);
}
}
}
}
if (OrderList.length == 0)
{
Main.SetTimer(1, timer2*1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == OrderList[req])
{
MKList.push(MarketData);
// 계좌에 같은 종목이 있는지 확인
if (!IsStockInAccount(MarketData.code))
{
if (BuyCount < 종목수)
{
// 계좌에 없는 경우에만 매수
//Account1.OrderBuy(MarketData.code,1,0,1); 밑에 한번에 17000000 시장가에 매수
Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1);
//Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(4)),MarketData.Ask(1),0);
//지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다.
Main.MessageList(MarketData.code + " 주식을 매수합니다.");
BuyCount = BuyCount+1;
}
}
else
{
Main.MessageList( MarketData.code + " 주식은 이미 계좌에 있으므로 매수하지 않습니다.");
}
req = req+1;
if (req < OrderList.length && BuyCount < 종목수)
{
var aa = Main.ReqMarketData(OrderList[req]);
if (aa == -1)
{
Main.SetTimer(2, 15000);
}
}
else
{
Main.SetTimer(1, timer2*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; // 계좌에 같은 종목이 있으면 true 반환
}
}
return false; // 계좌에 같은 종목이 없으면 false 반환
}
오늘 매수한 종목을 파워종목 조건검색식 만족할때
시장가로 매도할수 있게
예스스팟 자바 부탁드림미다.
답변완료
예스스팟 초보자의 수정요청
아래 수식을
- 매수금 10만원 매수---> 종가 천원이상 5만원 이하종목에 한해서
1주만 시장가로 매수로 변경
- 손절은 매수가의 -10%로 변경
- 익절은 매수가의 20%로 변경
- 09시~10시까지만 작동(매수,손절,익절)
- 10시기준 자동매도(손절/익절)되지 않은 종목은 보유(수동매도 가능 ?)
- 예스스팟에 잔존종목(익절/손절이나 수동매도 후 남은 종목수)은 10개까지로 제한하여
부족한 종목 수만큼만 매수.
등의 조건들, 기타 합리적인 사항으로 추가할만한 것이 있다면 그를 반영한 수식으로
수정 부탁드립니다.
==========================================================================
var timer5 = 2; // 2초
var 매수금 = 100000;
var 손절 = 0.9;
var 익절 = 1.2;
var OrderList = [];
var MKList = [];
var req;
var 종목제한수 = 10;
function Main_OnStart()
{
// 1번 타이머, 2초
Main.SetTimer(1, timer5 * 1000);
// 오늘 매수한 종목 관리 배열 초기화
MKList = [];
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (nEventID == 1 && HHMMSS >= 090000 && HHMMSS < 100000)
{
// 종목검색 수행
Main.ReqPowerSearch("변동성 돌파전략");
}
else if (nEventID == 1 && HHMMSS >= 100000)
{
// 10:00 이후 모든 보유 종목 매도
for (var i = 0; i < MKList.length; i++)
{
Account1.OrderSell(MKList[i].code, MKList[i].quantity, 0, 1);
Main.MessageList(MKList[i].code + " 시간 종료로 매도");
}
MKList = [];
Main.KillTimer(1); // 타이머 종료
}
if (nEventID == 2)
{
Main.ReqMarketData(OrderList[req]);
}
// 손절/익절 확인 (타이머 3번으로 주기적 실행)
if (nEventID == 3)
{
CheckStopLossTakeProfit();
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >= 1)
{
if (MKList.length == 0)
{
OrderList = aItemList.slice(0, Math.min(nCount, 종목제한수));
}
else
{
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MKList.length; b++)
{
if (aItemList[a] == MKList[b].code)
{
Add = false;
}
}
if (Add && !IsStockInAccount(aItemList[a]) && OrderList.length < 종목제한수 - MKList.length)
{
OrderList.push(aItemList[a]);
}
}
}
Main.MessageList("OrderList: " + JSON.stringify(OrderList));
if (OrderList.length == 0)
{
Main.SetTimer(1, timer5 * 1000);
}
else
{
req = 0;
Main.ReqMarketData(OrderList[req]);
}
}
}
function Main_OnRcvMarketData(MarketData)
{
var d = new Date();
var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds();
if (MarketData.code == OrderList[req])
{
if (HHMMSS >= 100000)
{
Main.MessageList("매수 시간(09:00~10:00) 종료로 매수 중지");
Main.SetTimer(1, timer5 * 1000);
return;
}
if (MKList.length >= 종목제한수)
{
Main.MessageList("종목 제한 수 초과로 매수 중지");
Main.SetTimer(1, timer5 * 1000);
return;
}
if (!IsStockInAccount(MarketData.code))
{
var quantity = Math.floor(매수금 / MarketData.Ask(1));
if (quantity > 0)
{
// 계좌에 없는 경우에만 매수
Account1.OrderBuy(MarketData.code, quantity, 0, 1);
//Account1.OrderBuy(MarketData.code, 1, 0, 1); // 고정 1주 매수
//Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(1)), MarketData.Ask(1), 0); // 지정가 매수
// 지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다.
MKList.push({
code: MarketData.code,
buyPrice: MarketData.Ask(1),
quantity: quantity
});
Main.MessageList(MarketData.code + " 주식을 " + quantity + "주 매수, 매수가: " + MarketData.Ask(1));
}
else
{
Main.MessageList(MarketData.code + " 매수 수량 0, 매수 실패");
}
}
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
{
// 손절/익절 체크를 위한 타이머 시작 (10초마다 확인)
Main.SetTimer(3, 10000);
Main.SetTimer(1, timer5 * 1000);
}
}
}
function CheckStopLossTakeProfit()
{
for (var i = 0; i < MKList.length; i++)
{
var stock = MKList[i];
var marketData = Main.GetMarketData(stock.code);
if (!marketData) continue;
var currentPrice = marketData.currentPrice;
if (currentPrice <= stock.buyPrice * 손절)
{
Account1.OrderSell(stock.code, stock.quantity, 0, 1);
Main.MessageList(stock.code + " 손절(-5%)로 " + stock.quantity + "주 매도, 현재가: " + currentPrice);
MKList.splice(i, 1);
i--;
}
else if (currentPrice >= stock.buyPrice * 익절)
{
Account1.OrderSell(stock.code, stock.quantity, 0, 1);
Main.MessageList(stock.code + " 익절(+5%)로 " + stock.quantity + "주 매도, 현재가: " + currentPrice);
MKList.splice(i, 1);
i--;
}
}
}
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;
}
답변완료
옵션객체 관련
안녕하세요.
현재 옵션종목이 월물옵션, 위클리 월요일, 위클리 목요일 이렇게 3개 거래가능한데요.
제 진입 및 청산 로직상 만기가 가장 근접한 옵션종목을 선택하여 거래하고자 합니다.
즉, 월물옵션 만기가 1주일 넘게 남은경우
- 화~목까지는 위클리 목요일 옵션을 진입
- 금~월까지는 위클리 월요일 옵션을 진입
- 월물옵션 만기가 1주일 이내인 경우 화요일부터 월물 옵션 진입
이렇게 옵션객체를 선택하여 거래 및 청산을 하고자 하는데, 간단하게 로직을 예시로 기재해주실수 있을까요?
매번 도움주셔서 진심으로 감사드립니다.
추가질문으로,
예스트레이더(im증권) 사용 중인데, 정상 로그인이 되면 문자 수신이 가능한가요?
그리고 장중에 비정상적으로 hts가 꺼졌을때 문자 수신이 가능한지도 여쭈어 봅니다. 감사합니다.
답변완료
자동종목검색 매수식에 매도식 추가 부탁드려요
스팟 입문자이오니 양해바랍니다.
스팟언어로 자동
종목검색, 매수하는 코드는 찾았고
정상작동했습니다.
스탑주문의 매도 외
필요한 사항이 있어
위 종목검색 및 매수식에 추가하고 싶은데
어제의 고가, 저가, 시가, 종가
본 커뮤니티 문답을 좀 찾았고
객체 언급하셔서
직접 좀 실습처럼 뒤적거리니
종목을 특정하는 듯 보였고 (오해일 듯 합니다만)
종목 특정 아니고
자동종목으로 매수된 종목에 대하여
어제의 저가 이탈시 매도식 등을
추가하고 싶습니다.
입문자 실력없어
부록은 스팟교육자료 발췌했습니다. 부록 코드에
1. 어제 저가 이탈시 매도
2. 15:15 당일청산
3. 익절 및 손절 청산
추가해 주시기를 정중히 꼭 부탁드립니다.
부록:
var timerInterval = 5; // 5초 타이머 간격(매 5초마다 특정 작업을 수행하도록 설정)
var 매수금 = 30000; // 추매수할 금액(추가 매수 금액)
// 종목검색 후 종목객체 요청할 종목코드를 저장할 배열변수
var MKList = []; // 검색 결과로 나온 종목코드를 저장할 배열
// 종목객체가 만들어진 순서대로 종목객체를 저장할 변수
var MK = []; // 실제 종목객체(MarketData)들이 담길 배열
// 종목객체 요청 카운트 변수
var req; // MKList에서 몇 번째 종목을 요청 중인지 나타내는 인덱스
function Main_OnStart()
{
var d = new Date(); // 현재 시간 객체 생성
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
Main.MessageList(HHMMSS,"|Start"); // 예스스팟 디버깅창에 로그 출력
Main.SetTimer(1, timerInterval*1000); // 1번 타이머를 (5초 * 1000) = 5000ms 간격으로 설정
}
function Main_OnTimer(nEventID)
{
var d = new Date(); // 타이머가 호출될 때마다 현재 시간 다시 계산
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
// nEventID가 1번이고, 현재 시각이 09시00분00초(=90000) 이후라면 종목검색 요청
if (nEventID == 1 && HHMMSS >= 90000)
{
Main.MessageList(HHMMSS,"|종목검색요청"); // 종목검색을 요청한다는 로그 출력
/********* -------------- *********/
Main.ReqPowerSearch("이평선크로스"); // "super search"라는 사용자 검색식으로 종목검색 요청
/********* -------------- *********/
}
// nEventID가 2번이면, 종목객체 재요청 로직 수행
if (nEventID == 2)
{
Main.KillTimer(2); // 2번 타이머 중지
Main.MessageList(HHMMSS,"|종목객체재요청"); // 종목객체 재요청 로그
Main.ReqMarketData(MKList[req]); // req 인덱스에 해당하는 종목코드를 재요청
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
var d = new Date(); // 현재 시간 객체 생성
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
Main.KillTimer(1); // 1번 타이머 중지(연속 검색 방지 등을 위해)
Main.MessageList(HHMMSS,"|종목검색완료|검색된종목수:", nCount); // 검색 종목 수 로그
MKList = []; // MKList 초기화
// 검색 결과가 1개 이상이면
if (nCount > 0)
{
// 아직 매수된 종목객체(MK)가 전혀 없는 경우
if (MK.length == 0)
{
// 결과 전체를 MKList에 저장
MKList = aItemList;
}
else
{
// 이미 매수된 종목이 있을 경우에는 중복되지 않는 종목만 MKList에 추가
for (var a = 0; a < nCount; a++)
{
var Add = true;
for (var b = 0; b < MK.length; b++)
{
// 이미 MK에 있는 종목이면 Add를 false로
if (aItemList[a] == MK[b].code)
{
Add = false;
}
}
// 중복되지 않을 때만 MKList에 push
if (Add == true)
{
MKList.push(aItemList[a]);
}
}
}
Main.MessageList(HHMMSS,"|요청할 종목객체수:",MKList.length); // 실제로 요청할 종목 수 로그
}
// 새로 요청할 종목이 없다면(=MKList.length==0), 1번 타이머 재설정(다음 검색 대기)
if (MKList.length == 0)
{
Main.SetTimer(1, timerInterval*1000);
}
else
{
// 새로 요청할 종목이 있으면 req=0부터 시작해서 MarketData 요청
req = 0;
Main.MessageList(HHMMSS,"|종목객체요청",MKList[req]); // 첫 번째 종목 요청 로그
Main.ReqMarketData(MKList[req]); // 실제 종목객체 생성 요청
}
}
function Main_OnRcvMarketData(MarketData)
{
var d = new Date(); // 현재 시간 객체
HHMMSS = d.getHours()*10000 + d.getMinutes()*100 + d.getSeconds(); // HHMMSS 형태로 시분초 계산
// 수신된 MarketData 객체의 code가 현재 요청중인 MKList[req]와 같다면
if (MarketData.code == MKList[req])
{
Main.MessageList(HHMMSS,"|종목객체생성",MarketData.code); // 종목객체 생성 로그
Account1.OrderBuy(MarketData.code, Math.floor(매수금 / MarketData.Ask(2)), MarketData.Ask(2), 0);
//Main.MessageList(HHMMSS,"|매수주문",MarketData.code,MarketData.Ask(3)); // 매수 주문 로그
Main.MessageList(HHMMSS,"|매수주문",MarketData.code,MarketData.Close);
// 해당 종목의 종목객체를 MK 배열에 추가
MK.push(MarketData);
// 다음 종목 요청 인덱스를 1 증가
req = req + 1;
// 아직 요청할 종목이 남아 있다면
if (req < MKList.length)
{
Main.MessageList(HHMMSS,"|종목객체요청",MKList[req]); // 다음 종목 요청 로그
var S = Main.ReqMarketData(MKList[req]); // 다음 종목 요청
// 15초에 60번 이상 요청하면 시간제한(-1) 받을 수 있음
if (S == -1)
{
// 제한에 걸리면 2번 타이머를 15초 후로 설정하여 재시도
Main.MessageList(HHMMSS,"|종목객체생성 15초제한");
Main.SetTimer(2, 15000);
}
}
else
{
// 모든 종목객체를 요청 끝냈을 때
Main.MessageList(HHMMSS,"|종목객체생성끝");
// 다시 1번 타이머(검색)를 5초 간격으로 재시작
Main.SetTimer(1, timerInterval*1000);
}
}
}
답변완료
예스스팟 스크립트 질문 드립니다.
수고하십니다.
예스스팟 자동매도로 수익이 실현되고 나서 같은날 그 종목이 다시 자동매수되는 경우가 있습니다.
예스스팟 시작후 자동매도됐던 종목은 재매수 하지 않는 부분을 자바스크립트로 만들수 있을까요.
현재 쓰고 있는 자바스크립트에는 보유하고 있는 종목을 재매수 하지 않는 부분은 구현이 되어 있습니다.
var timer5 = 3; // 3초
var 매수금 =100000 ;
var 손절 = 0.95;
var 익절 = 1.03;
var OrderList = [];
var MKList = [];
var req;
function Main_OnStart(){
Main.SetTimer(1, timer5*1000); // 1번 타이머 , 3초
MKList = []; //오늘 매수한 종목관리 배열 초기화
V1 =Account1.GetBalanceETCinfo(100); // 시작시 잔고 평가 금액
}
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>090000 && HHMMSS<151500 )
{
Main.ReqPowerSearch("필필필") // 종목검색수행
}
if (nEventID==1)
{
var num = Account1.GetTheNumberOfBalances(); // 계좌보유종수
if (nEventID==1 && HHMMSS>090000 && HHMMSS<151500 )
{ // 9시 ~ 15시 15분 사이
if(num >= 1)
{ // 보유종목이 1개 이상
if(Account1.GetBalanceETCinfo(100) >=V1*1.04)
{ //계좌평가금액이 스팟시작시 평가금액대비
Main.KillTimer(1); // 1번 타이머 종료
for (var i=0; i<num; i++)
{ //계좌리스트의 순서대로
Account1.SetBalance(i); //잔고를 세팅
if(Account1.Balance.count >0)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
else
{
for (var i=0; i<num; i++)
{
Account1.SetBalance(i);
if(Account1.Balance.current >= Account1.Balance.avgUnitCost*익절)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
}
if (HHMMSS >= 151500)
{
Main.KillTimer(1);
for(var i=0; i <num; i++)
{
Account1.SetBalance(i);
if(Account1.Balance.count>0)
{ Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0,1);}
}
}
}
if(nEventID ==2){
Main.ReqMarketData(OrderList[req]);}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.KillTimer(1);
OrderList = [];
if (nCount >=1 ){
if(MKList.length == 0){
OrderList = aItemList}
else{
for(var a =0; a<nCount; a++){
var Add = true;
for (var b=0; b<MKList.length; b++){
if(aItemList[a]==MKList[b].code){
Add = false;}
}
if(Add==true && !IsStockInAccount(aItemList[a])){
OrderList.push(aItemList[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,1); // 시장가 한주를 주문한다.
// 지정가로 주문하고자 할때는 아래로 변경
Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),0,1);
//Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),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; // 계좌에 같은 종목이 없으면 폴스 반환
}