커뮤니티

예스스팟 Q&A

답변완료

일봉 및 시간별 봉 데이터를 활용해서 시그널을 짜고싶은데

매매 시그널 작성하는 것 시도하려고하는데요. 쓱 둘러보니 봉단위 코딩이 가능한것 같은데. 일별 거래량으로 조건을 설정하다가 조건이 충족된 기업들 중에서 오후 2시까지의 거래량이 충족됐을때 매매 시그널을 발동시키고싶은데, 이런 코딩이 가능한가요?
프로필 이미지
부처스탁
2781
글번호 225477
답변완료

수식 설명좀 부탁합니다.

이수식이 무엇을 말하는지 아시는분있으면 쉽게 한글로 풀이좀 해주세요.. indip = input(1,type=bool,title="Use current timeframe?") tf = (indip==0?(input('60',type=resolution,title="Timeframe (only if previous opt is unflagged)")):period) Timeframem = (tf=='D'?'M':(tf=='240'?'W':(tf=='120'?'W':(tf=='60'?'W':(tf=='15'?'640':(tf=='5'?'360':'na')))))) Timeframed = (tf=='D'?'2W':(tf=='240'?'2D':(tf=='120'?'2D':(tf=='60'?'D':(tf=='15'?'360':(tf=='5'?'180':'na')))))) Timeframeh = (tf=='D'?'W':(tf=='240'?'D':(tf=='120'?'D':(tf=='60'?'720':(tf=='15'?'180':(tf=='5'?'90':'na')))))) chm = security(tickerid, Timeframem, open) chm1 = security(tickerid, Timeframem, close) defm = (chm1/chm) -1 chd = security(tickerid, Timeframed, open) chd1 = security(tickerid, Timeframed, close) defd = (chd1/chd) -1 chh = security(tickerid, Timeframeh, open) chh1 = security(tickerid, Timeframeh, close) defh = (chh1/chh) -1 output = defm>0?(defd>defh?defd:defh):(defd>defh?defh:defd) plot(output,linewidth=2,color=output>0?lime:red,transp=50,style=area) plot(defh,color=defh>0?lime:red,transp=0,linewidth=1) plot(defh,color=defh>0?lime:red,transp=75,style=area) hline(0)
프로필 이미지
힘내라
2829
글번호 225476

퀀트드래곤 님에 의해서 삭제되었습니다.

프로필 이미지
퀀트드래곤
12
글번호 225475
답변완료

수식 수정 및 질문

아래수식을 게시판에서 받아서 모의로 실행하면 안돼는게 있어서 질문드립니다. 1. 관심종목등록이 안되네요. 2. 종목검색중 검색되다가 -1로 시간초과후 멈춤니다. 3. 매수주문은 들어가는데 체결이 안됩니다. 원인이 무엇인지 설명부탁드리며, 수식보완 부탁합니다. var 검색주기 = 60;//60초 var 종목수 = 50; var 매수금액 = 1000000; var ItemList = [],MK = [],HH = []; var HHMMSS,req; function Main_OnStart() { Main.SetTimer(1, 60000); Main.MessageList("start"); } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 이후에 2분간격으로 종목검색 50종목 이하 if (nEventID == 1 && HHMMSS >= 090100 && MK.length < 종목수) { Main.KillTimer(1); Main.MessageList("종목검색 요청"); Main.ReqPowerSearch("단타A"); } } // 검색종목 관심등록 function Main_OnRcvItemList(aItemList, nCount) { if (nCount > 0) { Main.SendInterests("관심단타A", aItemList, false); Main.MessageList("관심종목 등록"); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색 완료 nCount : ",nCount,MK.length); Main.MessageList("종목검색 완료 aItemList : ",aItemList); if (nCount > 0) { ItemList = []; //첫검색일때 if (MK.length == 0) { ItemList = aItemList; } else //두번쨰 이후(차트가 만들어진 종목을 제외하고 새로운 종목만 집계) { for (var i = 0; i < nCount; i++ ) { var add = true; for (var x = 0; x < MK.length; x++ ) { if (aItemList[i] == MK[x].code) { add = false; } } if (add == true) { ItemList.push(aItemList[i]); } } } if (ItemList.length > 0 && MK.length < 종목수) { req = 0; Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { if (MK.length < 종목수) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == ItemList[req]) { Main.MessageList("종목객체생성:",req,MarketData.code); MK.push(MarketData); HH.push(MK[req].current);//최고가 초기값은 현재가 Main.MessageList("매수주문:",MarketData.code); //매도5호가로 매수금액만큼 매수주문 Account1.OrderBuy(MarketData.code,Math.floor(매수금액/MarketData.Ask(5)),MarketData.Ask(5),0); req = req+1; if (req < ItemList.length && MK.length < 종목수) { Main.MessageList("종목객체요청 : ",ItemList[req]); Main.ReqMarketData(ItemList[req]); } else { Main.MessageList("종목객체생성완료"); if (MK.length < 50) { Main.SetTimer(1, 검색주기*1000); } } } } function Main_OnUp*ateMarket(sItemCode, lUp*ateID) { if (lUp*ateID == 20001) { for (var i = 0; i < MK.length; i++) { //업데이트된 종목을 찾아 if (MK[i].code == sItemCode && HH[i] > 0) { //현재가가 저장된 최고가 보다 크면 최고가를 현재가로 변경 if (MK[i].current > HH[i]) { HH[i] = MK[i].current; } //잔고셋팅 Account1.SetBalance(MK[i].code, 0); //최고가는 평단가 대비 20이상 크고 현재가가 평단가 대비 15% 이하로 내려오면 매수5호가로 전량 매도 if (HH[i] >= Account1.Balance.avgUnitCost*1.20 && MK[i].current <= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MK[i].Bid(5),0); //HH[i]는 -1로 저장하여 이후 감시하지 않게 함 HH[i] = -1; Main.MessageList("종목객체삭제 : ",S); var S = Main.RemoveObject(MK[i]); MK.splice(i,1); } } } } }
프로필 이미지
다낚아
2649
글번호 225473
답변완료

안녕하세요. 요청드립니다.

안녕하세요. 예스스팟 입문하려고 자바스크립트 기초서적 보고 있는데, 제가 처음부터 만들기에는 쉽지않아 보여 요청드려 봅니다. 요청내용이 많아 보이는데, 혹시 전부 제공해주시기 어려우시다면 전체적인 뼈대만 이라도 부탁드립니다. 감사합니다. 매수 시간: 9:00:00 ~ 9:30:00 대상: 파워검색으로 검색된 종목순으로 최대 10종목을 실시간 (시장가)매수 투입금액: 종목당 매수금액은 계좌잔고금액의 10% 매수제한: 당일 계좌내 매매이력있는 종목 매수제한(손절/익절 종목 재매수 금지) 매도 시간: 9:00:00 ~ 11:00:00 익절손절: 익절 3% 해당종목(시장가)매도, 손절 3% 해당종목(시장가)매도 계좌청산: 당일 계좌잔고의 1% 이상 이익시 매수된 종목 전체(시장가)청산 시간청산: 11:00:00에 매수된 종목 전체(시장가)청산
프로필 이미지
강지
2632
글번호 225472
답변완료

조회대상종목이 아닙니다

항상 수고 많으십니다. 기존에 매매한 종목을 엑셀이나 데이터베이스에 저장해서 장 시작전에 종목객체를 생성하고 있습니다 종목합병의 이슈에 의해서 기존의 종목코드가 없어지게 되는 경우가 있는데요 이러한 경우 종목객체의 생성이 되지 않습니다. 이를테면 동성화학 같은경우는 종목합병에 의해서 종목코드가 없어진 경우인데요. 다음과 같은 에러메세지가 생성되고 다른종목도 덩달아 종목객체 생성이 되지 않으며 수식이 먹통이 됩니다. TypeError : "005190"는 조회대상종목이 아닙니다. 이를 일일이 확인 할 수 없는 상황인데요 이를 피해갈 수 있는 수식을 부탁 드립니다.
프로필 이미지
재령
2642
글번호 225465
답변완료

수식부탁합니다.

안녕하세요 많은 도움 받고있습니다. 당일 콜,풋 양매도한 전량을 종목에 상관없이 당일 15시 5분에 콜풋 모두 청산하는 식 원합니다. 아래 식은 전일 양매도한 걸 당일 15시 5분에 청산하는식이나 정상작동되지 않습니다. var CallOrderCode,PutOrderCode; var Entry, Exit; function Main_OnStart() { Entry = false; Exit = false; Main.SetTimer(1, 5000); } function Main_OnTimer(nEventID) { if (nEventID <= 1) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //15시 10분 if (Entry == false && HHMMSS >= 151000 ) { Entry = true; //차트가 매수유지봉 if (Chart1.GetOpenContracts() > 0) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호유지"); var UNum = Option.uppersATM; var LNum = Option.lowersATM; ================================ 중략 ======================================== { Account1.OrderSell(CallOrderCode, 1, 0, 1); Account1.OrderSell(PutOrderCode, 1, 0, 1); Main.SetUserValue("CallOrderCode", CallOrderCode); Main.SetUserValue("PutOrderCode", PutOrderCode); } } } //15시 5분 if (Exit == false && HHMMSS >= 150500 ) { Exit = true; //내부파일의 값을 가져와 변수에 저장 var PreDayCall = Main.GetUserValue("CallOrderCode"); var PreDayPut = Main.GetUserValue("PutOrderCode"); //PreDayCall에 값이 있으면 if (PreDayCall != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayCall,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("CallOrderCode", ""); } } //PreDayPutl에 값이 있으면 if (PreDayPut != "") { //잔고셋팅후 매도포지션이면 청산하고 //내부파일의 값을 빈공간으로 만듬 Account1.SetBalanceItem(PreDayPut,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); Main.SetUserValue("PutOrderCode", ""); } } //모두 수행후 값을 빈공간으로 만듬 Main.SetUserValue("CallOrderCode", ""); Main.SetUserValue("PutOrderCode", ""); }
프로필 이미지
팡팡
2860
글번호 225464

팡팡 님에 의해서 삭제되었습니다.

프로필 이미지
팡팡
2
글번호 225463
답변완료

금액 기준 수량

외부입력변수 EntryVol에 기입한 금액에 따른 주식 수량(Vol)을 매수하는 식을 작성하였는데, 수량을 입력시키라는 에러 메시지와 함께 매수 주문이 안나가네요. 아래의 스팟 검토 부탁드립니다. var BL = [],req; var CT = [],MK = []; function Main_OnStart() { //처음 시작시 step은 0 step = 0; //시작시점의 보유종목수 var num = Account1.GetTheNumberOfBalances(); //보유종목이 1개 이상이면 보유종목의 종목코드를 BL변수에 순차적으로 저장 if (num > 0) { BL = []; for(var i = 0 ; i < num ; i++) { Account1.SetBalance(i); BL.push(Account1.Balance.code); } Main.MessageList("BL : ",BL); if (BL.length >= 1) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); // 최대진입횟수 var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } } else //보유종목이 없으면 바로 1분 타이머 시작 { Main.MessageList("보유종목없음"); Main.SetTimer(1, 10000);//1번 타이머, 60초 } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == BL[req]) { Main.MessageList("차트객체생성 :",ChartEx.GetCode(1)); CT.push(ChartEx); Main.ReqMarketData(BL[req]); Main.MessageList("종목객체요청 :",BL[req]); } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == BL[req]) { Main.MessageList("종목객체생성 :",MarketData.code); MK.push(MarketData); req = req+1; if (req < BL.length) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); Main.MessageList("차트객체요청 :",BL[req]); } else { Main.SetTimer(1, 10000);//1번 타이머, 60초 Main.MessageList("보유종목차트생성완료",CT.length,MK.length); } } } function Main_OnTimer(nEventID) { if (nEventID == 1) { //타이머 종료 Main.KillTimer(1); Main.ReqPowerSearch("PSearch"); } } function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목이 없으면 if (nCount == 0) { //타이머 다시 셋팅 Main.SetTimer(1, 100000);//1번 타이머, 60초 } //검색된 종목이 있으면 if (nCount >= 1) { //검색된 종목과 기존 만든 차트들의 종목코드를 비교해 //차트가 만들어 지지 않은 종목이면 BL변수에 종목코드 추가 BL = []; for(var i = 0 ; i < aItemList.length ; i++) { var add = true; for(var z = 0 ; z < CT.length ; z++) { if (aItemList[i] == CT[z].GetCode(1)) { add = false; break; } } if (add == true) { BL.push(aItemList[i]); } } Main.MessageList("BL : ",BL); //차트 생성해야할 종목이 있으면 차트요청 if (BL.length >= 1) { req = 0; //차트 요청 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, 1, // 거래수량 123456789, // 자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 100000, // 최대진입수량 10); var ChartSet = new ReqChartItem(BL[req],5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false); var SymSet = new SystemInfo("[현물]WayPointStock01_H_Signal",YL_TYPE_NORMAL,null,TradeSet); Main.ReqChartEx(ChartSet, SymSet); } else //없으면 타이머 다시 셋팅 { Main.SetTimer(1, 100000);//1번 타이머, 60초 } } } //생성된 차트들에서 신호가 발생하면 function Main_OnRiseSignal(ChartEx, Signal) { //매수신호 발생 if (Signal.signalKind == 1) { //EntryVol 금액 시장가 매수 var Vol = Math.floor(EntryVol/Signal.price); Account1.OrderBuy(Signal.code, Vol,Signal.price,1); } //매수청산신호 발생 if (Signal.signalKind == 2) { //잔고셋팅 Account1.SetBalance(Signal.code,0); //보유수량이 있으면 if (Account1.Balance.count > 0) { //전량 시장가 매도 Account1.OrderSell(Signal.code, Account1.Balance.count,Signal.price,1); } } }
프로필 이미지
몬스터
2973
글번호 225460
답변완료

단기과열 종목 알 수 있는 방법 문의

하이투자증권 YES TRADER를 사용중입니다. 4/5일 한화투자증권은 단기과열종목으로 지정되어 30분마다 단일가 거래를 하였는데요. 단기과열 종목으로 지정되어 즉각적으로 매매를 못하고, 30분 단일가 거래를 하는 종목을 Yes Spot 에서 어떻게 하면 판단할 수 있을까요? 이런 종목들은 거래를 하지 않고, 다른 종목들로 거래를 하려고 합니다. - YES TRADER의 [3202]파워종목검색의 설정 항목에는 단기과열종목 체크박스가 없습니다. - 차트 객체를 불러와서 봉의 시간 간격을 구하는 방법 말고 좀 더 간편하게 알 수 있는 방법은 없을까요?
프로필 이미지
브라이언7
2973
글번호 225459