커뮤니티

예스스팟 Q&A

마포만세 님에 의해서 삭제되었습니다.

프로필 이미지
마포만세
2024-02-04
2
글번호 225933
답변완료

예스스팟 전략에서 확장차트에 적용된 시스템(신호)의 입력변수의 값을 동적으로 변경가능여부?

안녕하세요. 아래 예를 들어 문의 드립니다. 예스스팟전략에 EC라는 확장차트에 Sy라는 시스템(신호)가 적용되어 있고 Sy에 Ins라는 입력변수가 있을 때 Main의 특정 이벤트(예 OnStart)처리중 이 변수의 값을 직접 변경하게 할 수 있나요? 간단한 예제로 설명 부탁드립니다.
프로필 이미지
기계학습
2024-02-02
607
글번호 225932
답변완료

여러개의 주식 객체 가져오는 방법

안녕하세요 여러개의 주식객체를 가져와서 가격을 비교하려고 합니다. 그런데 ReqPowerSearch를 이용하여 검색해보니 조건에 부합하는 객체의 코드만(267850, 000650...)을 가져오는데, 이 가져온 코드들로 종목 객체 데이터들(시가, 종가, 등등)을 가져올 순 없을까요? var ItemList= []; function Main_OnStart() { Main.ReqPowerSearch("급등식1") Main.MessageList("전일 종가대비 5% 이상 상승한 종목 가져오기"); } function Main_OnRcvItemList(aItemList, nCount, aValues) { Main.MessageList("종목이 있습니다 "); // 가져온 종목들 리스트 ItemList = aItemList Main.MessageLog(ItemList.length) }
프로필 이미지
디미트레이더
2024-02-01
615
글번호 225931

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

프로필 이미지
redcon
2024-01-31
0
글번호 225930
답변완료

확장차트생성해서 신호에 의해 매수 매도

안녕하십니까? 아래 수식으로 테스트중인 데요 종목객체 생성제한으로 더이상 검색이 안되어 차트도 만들어 지지 않습니다. 초보라서 많이 어렵습니다. 수식을 첨가해 주시면 고맙겠습니다. var 검색주기 = 30;//30초 1분 var ItemList = [],CT = [],MK = []; var HHMMSS,req; function Main_OnStart() { CTcnt = 0;//지역변수 선언 차트객체 생성 숫자를 표시 Main.MessageLog("시작"); Main.SetTimer(1, 10000);//타이머를 실행 ===> 5000을 입력하면 5초마다 이벤트가 발생 } 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(); //9시 이후에 1분간격으로 종목검색 확장차트가가 20개 이하일때 반복적으로 검색 if (nEventID == 1 && HHMMSS >= 090010 && CT.length < 20) { Main.KillTimer(1); Main.MessageList("종목검색 요청"); Main.ReqPowerSearch("검색"); } } function Main_OnRcvItemList(aItemList, nCount) { Main.MessageList("종목검색 완료 nCount : ",nCount); if (nCount > 0) { ItemList = []; //첫검색일때 if (CT.length == 0) { ItemList = aItemList; } else //두번? 이후(차트가 만들어진 종목을 제외하고 새로운 종목만 집계) { for (var i = 0; i < nCount; i++ ) { var add = true; for (var x = 0; x < CT.length; x++ ) { if (aItemList[i] == CT[x].GetCode(1)) { add = false; } } if (add == true) { ItemList.push(aItemList[i]); } } } Main.MessageList("종목검색 완료 ItemList : ",ItemList.length); //집계된 종목이 1개 이상이면 순차적으로 차트객체 요청 //종목검색 후 종목코드가 aItemList에 배열로 담겨오는데 [0]번방 부터 요청 if (ItemList.length > 0 && CT.length < 20) { req = 0; var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, //기본거래수량 설정 1, // 거래수량 100000, // 고정자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_NONE, // 피라미딩 설정여부 100, // 최대진입수량 3); // 최대진입횟수 var StopSet = new SystemStopInfo(//new StopLoss(4, CALCMETHOD_PERCENT), //new StopTrailing(2, 5, CALCMETHOD_PERCENT, 0), //new StopProfitTarget(20, CALCMETHOD_PERCENT), //new StopInactivity(0.5, 6, CALCMETHOD_PERCENT), new StopEndOfDay(151500)); //차트설정 :종목, 주기3분 분봉, 조회건수 1500 var ChartSet = new ReqChartItem(ItemList[req],3,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); var SystemSet = new SystemInfo("전략", YL_TYPE_WIZARD, null, TradeSet, null); Main.MessageList("현재차트갯수 : ",CT.length); Main.MessageList(req,"차트객체요청 : ",ItemList[req]); Main.ReqChartEx(ChartSet,SystemSet); } else { if (CT.length < 20) { Main.SetTimer(1, 검색주기*1000);//30초 } } } } function Main_OnRcvChartEx(ChartEx) { if (ItemList[req] == ChartEx.GetCode(1)) { CT[CTcnt] = ChartEx; Main.MessageList(CTcnt,"차트객체생성 : ",CT[CTcnt].GetCode(1)); Main.ReqMarketData(ItemList[req]); Main.MessageList(CTcnt,"종목객체요청 : ",ItemList[req]); } } function Main_OnRcvMarketData(MarketData) { if (ItemList[req] == MarketData.code) { Main.MessageList(CTcnt,"종목객체생성 : ",MarketData.code); MK[CTcnt] = MarketData; CTcnt = CTcnt +1; req = req + 1; if (req < ItemList.length && CT.length < 20) { var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT, //기본거래수량 설정 1, // 거래수량 100000, // 고정자산 1, // 단위수량 0, 0, CALCMETHOD_PERCENT, // 진입/청산 수수료 0, 0, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_NONE, // 피라미딩 설정여부 100, // 최대진입수량 3); // 최대진입횟수 var StopSet = new SystemStopInfo(//new StopLoss(4, CALCMETHOD_PERCENT), //new StopTrailing(2, 5, CALCMETHOD_PERCENT, 0), //new StopProfitTarget(20, CALCMETHOD_PERCENT), //new StopInactivity(0.5, 6, CALCMETHOD_PERCENT), new StopEndOfDay(151500)); var ChartSet = new ReqChartItem(ItemList[req],3,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false); var SystemSet = new SystemInfo("전략", YL_TYPE_WIZARD, null, TradeSet, null); Main.MessageList("현재차트갯수 : ",CT.length); Main.MessageList(req,"차트객체요청 : ",ItemList[req]); Main.ReqChartEx(ChartSet,SystemSet); } else { Main.MessageList("Search1 차트객체요청종료"); //만들어진 차트가 10개 이하이면 if (CT.length < 20) { Main.SetTimer(1, 검색주기*1000);//30초 } } } } //신호발생 function Main_OnRiseSignal(ChartEx, Signal) { //신호발생 종목에 대해 잔고셋팅 Account1.SetBalance(Main.GetOrderCode(Signal.code),0); //매수신호이고 잔고가 없을때만 매수 if (Signal.signalKind == 1 && Account1.Balance.count == 0) { //Account1.OrderBuy(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1); // Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,0,1); Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1); Main.MessageLog("매수주문"); //1주종목 0현재봉 0주문가격 1시장가 } if (Signal.signalKind == 2) { //전체미체결주문 갯수 var num = Account1.GetTheNumberOfUnfills(); //전체 미체결수 만큼 루프를 돌면서 for (var i = 0; i < num; i++) { //미체결을 하나씩 셋팅하고 Account1.SetUnfill(i); //미체결종목이 신호종목과 같고 미체결수량이 있으면 if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고수량만큼만 매도 if (Account1.Balance.count > 0) { //Account1.OrderSell(Main.GetOrderCode(ChartEx.GetCode(1)),1,0,1); Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1); Main.MessageLog("매도주문"); } } }
프로필 이미지
하늘구름
2024-01-28
783
글번호 225929
답변완료

증거금율 받아올수 있을까요?

현재 종목검색쪽 조회 항목들 중에 증거금율이 있는거보면 받아올수 있을거 같은데요 예스스팟이나 예스랭귀지에서 받아올수 있는 방법이 있는지 궁금합니다.
프로필 이미지
악센
2024-01-21
536
글번호 225928
답변완료

[자답] 선물매매 코드 문의

검색해 보니 이미 질문과 답변이 있군요. 감사합니다. ---------------------------------------------------------------------------- 안녕하세요? 다른 분에게 답변 주신 아래 내용에 추가로 문의 드립니다. 예스랭귀지 코드에서 조건이 만족하면 buy / sell 신호를 만들어 줄 때 1. 기존에 포지션이 없으면 1계약을 매수 또는 매도한다. 2. 기존에 매수 포지션일 때 매수 신호가 나오면 그냥 매수 포지션 1계약 유지한다. 3. 기존에 매수 포지션일 때 매도 신호가 나오면 1계약을 매도 청산하고, 1계약을 매도한다. 4. 기존에 매도 표지션일 때 매도 신호가 나오면 그냥 매도 포지션 1계약 유지한다. 5. 기존에 매도 포지션일 때 매수 신호가 나오면 1계약을 매수 청산하고, 1계약을 매수한다. 위의 조건에 만족하도록 아래 코드를 수정해 주시면 감사하겠습니다. =============================================== 1. 스크립트 객체설정 차트객체(Char1) 계좌객체(Account1) 종목객체(MarketData1) --> 미니선물로 지정 function Main_OnStart() { Main.MessageList("시작"); T = 0; } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { T = 1; Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0); } if (T == 1 && Signal.signalKind == 2) { Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0); } if (Signal.signalKind == 3) { T = -1; Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(5), 0); } if (T == -1 && Signal.signalKind == 4) { Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(5), 0); } }
프로필 이미지
원초로
2024-01-27
679
글번호 225927
답변완료

차트신호시 풋편매수 트레일링 스탑 추가

1) 체결오류 메세지 건(별첨파일 참조) 모의투자로 한달 동안 체결에 이상이 없었는데 금일 2024년 1월 19일 090200 주문가격이 하한가 미만이란 메세지를 받았습니다. 주문 건들은 모두 등가격이고 주문형식은 지정가 5를 사용하고 있습니다. 다시 한 번 주문을 내보았는데 102800 주문 건은 정상 체결되었습니다. 모의투자라서 발생할 수 있는 오류인가요? 2) 아래수식에 트레일링스탑 내용을 추가하고 싶습니다. 진입가격이 등가격까지 상승했을 때 고점에서 0.5 하락시 청산 위 조건에서 청산되지 않고 내가격 1까지 상승했을 때 고점에서 1.25 하락시 청산 항상 고맙습니다. ************************************************************************************ var UNum; var LNum; var PutCode; var PutPrice; var PP; var PutOrderCode; var PutExit; function Main_OnStart() { PutExit = false; Main.SetTimer(1, 5000); } //차트에서 신호가 발생하면 function Chart1_OnRiseSignal(Signal) { //해당 신호가 매도신호이면 if (Signal.signalKind == 3) { Main.MessageList("--------------------------------------------"); Main.MessageList("매수신호 발생"); //0.5 이하 중 가장 큰 가격을 가지는 종목을 찾음 //ATM위 행사가 갯수 UNum = Option1.uppersATM; //ATM아래 행사가 갯수 LNum = Option1.lowersATM; //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 PutPrice = new Array(UNum+LNum+1); //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var ii = -UNum; ii <= LNum; ii++) { //ii단계 풋종목이 0.5 이하이면 if (Option1.GetCurrent(1, ii) <= 0.5 ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[ii+UNum] = Option1.GetCurrent(1, ii); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[ii+UNum] = Option1.GetATMPutRecent(ii); } else //0.5 보다 크면 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[ii+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[ii+UNum] = -1; } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 PP = -1; PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageList("--------------------------------------------"); Main.MessageList("풋종목코드:",PutOrderCode,"/풋현재가 :",PP); //풋옵션종목 매수 if (PutExit == false) { //지정가 Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 5), 0); //시장가 //Account1.OrderSell(PutOrderCode, 1, 0, 1); } } if (Signal.signalKind == 4) { Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 5), 0); } }
프로필 이미지
좌오비우오비
2024-11-15
672
글번호 225926

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

프로필 이미지
만경
2024-01-17
93
글번호 225925

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

프로필 이미지
guangtie
2024-01-09
7
글번호 225919