커뮤니티
예스스팟 Q&A
답변완료
GetPrevVolume(1) 의 거래량 문의
안녕하세요
GetPrevVolume(1)를 이용해서 DATA를 얻으려고 하는데
삼성전자 005930을 MarektData1 객체명에 일간데이터 사용, 조회건수 100 으로 설정 하고
MarketData1.GetPrevVolume(1)로 메세지로그를 남겨보니
41801757050798080 이라는 숫자가 리턴됩니다.
이 숫자가 맞는 걸까요?
이렇게 나올 수가 없는데 제가 뭘 잘못햇는지 알려주세요~
2023-07-22
902
글번호 225813
답변완료
문의 드립니다.
안녕하세요.
조건검색도 수식으로 표현해서 할 수 있나요?
예를 들어서 아래 수식이 정확한건 아니지만 이런 형식으로 할 수 있나요?
var : st(090000),et(100000);
cond1 = time > st and time < et and c > o ;
if cond1[3] = true and c > o then 종목검색완료
2023-07-17
1007
글번호 225812
답변완료
확장차트에 타종목/타주기 참조데이터 표시
담당자님 안녕하세요. 항상 도움 주셔서 감사하게도 조금씩 발전하고 있습니다.
다름이아니라, 현재 예스랭귀지에서 신호 발생 시 예스스팟으로 주문을 하는 시스템을 개발중인데, 예스랭귀지에서 참조데이터로 data2를 활용하는 로직을 사용하였습니다.
예스스팟의 확장차트에 data2를 함께 띄워서 data2를 활용하는 예스랭귀지 코드를 활용하는 방법이 있을까요?
메뉴얼에는 참조데이터로 수급만 가져올수 있는것으로 보이는데, 제가 필요한건 지수이며, 예스랭귀지 코드로 거래 종목과 data2로 불러온 지수를 연동하여 매매가되는 로직으로 작성한 수식을 예스스팟에서 적용하고 싶습니다.
혹시 가능하지 않다면 다른 방법으로라도 유사하게 구현하는 방법을 알려주시면 큰 도움이될것 같습니다.
감사합니다.
2023-07-12
1090
글번호 225811
관리자에 의해 프로그램 사용법 QnA로 이동되었습니다
2023-06-30
5
글번호 225810
답변완료
문의_pointless
차트 c sell주문 미니옵션 풋옵션 매수 ok 차트 c "c"이름 청산으로 청산 주문이 나가긴 했는데 첨부 메세지 뜨면서 오류가 발생했습니다. 수식 오류 수정 부탁드립니다. *************************************************************************** var UNum; var LNum; var CallCode; var CallPrice; var PutCode; var PutPrice; var CC; var PP; var CallOrderCode; var PutOrderCode; var CallExit,PutExit; var X1,X2; var BID,BNUM,PLCheck; function Main_OnStart() { CallExit = false; PutExit = false; Main.SetTimer(1, 5000); } //차트에서 신호가 발생하면 function Chart1_OnRiseSignal(Signal) { //해당 신호가 매도신호이면 if (Signal.signalKind == 3) { PutOrderCode = Option1.GetATMPutRecent(1);//*** 풋옵션 외가격-1 을 찾는다 //풋옵션종목 매수 if (PutExit == false) { //지정가 Account1.OrderBuy(PutOrderCode, 1, Option1.GetAskByCode(PutOrderCode, 2), 0); //시장가 //Account1.OrderBuy(PutOrderCode, 1, 0, 1); PLCheck = false; X1 = false; X2 = false; Main.SetTimer(1, 1000);//1초 타이머 } } if (Signal.signalKind == 4 && Signal.name == "c") { X1 = true; //1) if (X1 == true || X2 == true) { Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 2), 0); PLCheck = false; } } } function Chart2_OnRiseSignal(Signal) { s2 = Signal.signalKind; if (Signal.signalKind == 4 && Signal.name == "d") { X2 = true; //1) if (X1 == true || X2 == true) { Account1.OrderSell(PutOrderCode, 1, Option1.GetBidByCode(PutOrderCode, 2), 0); PLCheck = false; } } }
2023-06-29
1069
글번호 225809
답변완료
SetUserValue 바로 저장 기능
사용자가 필요한 경우 변수를 main.SetUserValue()를 통해 저장하고
이후 예스스팟이 다시 시작할 때 main.GetUserValue()를 통해 불러와 잘 사용하고 있습니다.
그런데, 가끔 예기치 못한 오류(?)로 예스트레이더가 종료되는 경우가 있습니다.
이 후 프로그램을 다시 시작하면 위 함수로 저장된 값을 제대로 불러오지 못할 때가
있습니다. 아마도 저장이 되지 않는 것 같습니다.
다른 QnA에 보니까 바로 저장을 하지 않고 종료되는 시점에 저장을 하므로
바로 저장을 하고자 하면 3번째 인자로 1을 사용하여 main.SetUserValue()를 사용하라고
해서, 그렇게 3번째 인자로 1을 주고 main.SetUserValue()를 호출하면 응답이 없이 예스트레이더가 멈추는 현상(계속 모래시계)이 발생합니다.
뭐가 문제일까요?
2023-06-27
1065
글번호 225803
답변완료
강조 수식의 엑셀 수신
하이켄 아시 같은 강조수식을 엑셀로 뽑아낼 수 있을까요?
예를 들면 마젠타는 +1, 사이언은 -1 이런식으로요.. 답변 감사드립니다
2023-06-09
954
글번호 225802
답변완료
2414번 추가 질문입니다.
안녕하세요. 전에 작성해주신 수식에 대해서 추가 문의 드립니다.
제가 구상했던 시스템 운영 방식에 거의 다다른 것 같습니다.
큰 도움 주셔서 너무 감사합니다. 즐거운 하루 보내세요.
------------------------------------------------------------------------------------
1. 미완성 신호로 매도하는 부분을 작성해주셨는데, 미완성 신호로 매수하는 부분 추가
(제가 내용을 추가 했는데 확인 부탁드립니다.)
2. 미완성 신호로 매수된 경우, 원래 익일 시가에 완성신호로 매수되는 금번차수 매수 금지
(미완성 1차 매수 시 완성 1차 매수 금지, 미완성 2차 매수시 완성 2차 매수 금지)
var ItemList;
var Count;
var ReqCount;
var d;
var H;
var CT = [];
function Main_OnStart()  
{
      Main.MessageLog("스팟시작");
      d = new Date();
      h = d.getDate();
      //지정한 관심그룹의 종목수(관심그룹지정 필요)
      Count = Main.GetItemCountOfInterest("관심종목1");
      Main.MessageList("지정관심그룹 종목수 : ", Count);
      ItemList = [];      
      //관심그룹 종목코드를 ItemList로 옮김
      for(var i = 0 ; i < Count ; i++)
      {
            //관심그룹지정 필요
            ItemList.push(Main.GetItemCodeInInterest("관심종목1", i));
      }
      //관심종목이 1개 이상이면 
      if (Count > 0)
    {
            //첫종목부터 요청시작
            //요청갯수 카운트 변수는 초기값 0
            ReqCount = 0;
            
            var TradeSet =  new SystemTradeInfo(TRADE_FIXCAPITAL,
                                             1,                         // 거래수량
                                             100000000,                 // 자산
                                             1,                         // 단위수량
                                             0, 0, CALCMETHOD_PERCENT,  // 진입/청산 수수료
                                             0, 0, CALCMETHOD_POINT,    // 진입/청산 슬리피지
                                             PYRAMIDING_ENTRY,          // 피라미딩 설정여부(다른진입신호만 허용)
                                             100000,                      // 최대진입수량
                                             20);                       // 최대진입횟수
            var ChartSet = new ReqChartItem(ItemList[ReqCount],1,CHART_PERIOD_DAILY,1000,CHART_REQCOUNT_BAR,true,false);
            /////SystemInfo(name,kind,inputVar,tradeInfo,stopInfo)
            var SystemSet  = new SystemInfo("YL_시스템(일봉)", YL_TYPE_NORMAL, null, TradeSet);
            //차트객체 요청
            Main.ReqChartEx(ChartSet,SystemSet);
            Main.MessageList("확장차트생성요청:",ItemList[ReqCount]);
            //1벝 타이머 10초 세팅
            Main.SetTimer(1, 10000);
      }
}  
//차트객체 수신
function Main_OnRcvChartEx(ChartEx)
{
      //방금 요청한 종목이 맞는지 확인
      if (ChartEx.GetCode(1) == ItemList[ReqCount])   
      {
            Main.MessageList("확장차트생성완료:",ChartEx.GetCode(1));
            //차트객체를 순차적으로 CT배열변수에 저장
            CT.push(ChartEx);
            
            //요청갯수 1증가
            ReqCount = ReqCount+1;
               
            //요청갯수가 Count 미만이면
            if (ReqCount < Count)
            {
                  //다음종목 요청
                  var TradeSet =  new SystemTradeInfo(TRADE_FIXCAPITAL,
                                                   1,                         // 거래수량
                                                   100000000,                 // 자산
                                                   1,                         // 단위수량
                                                   0, 0, CALCMETHOD_PERCENT,  // 진입/청산 수수료
                                                   0, 0, CALCMETHOD_POINT,    // 진입/청산 슬리피지
                                                   PYRAMIDING_ENTRY,          // 피라미딩 설정여부(다른진입신호만 허용)
                                                   100000,                      // 최대진입수량
                                                   20);                       // 최대진입횟수
                  var ChartSet = new ReqChartItem(ItemList[ReqCount],1,CHART_PERIOD_DAILY,1000,CHART_REQCOUNT_BAR,true,false);
                  /////SystemInfo(name,kind,inputVar,tradeInfo,stopInfo)
                  var SystemSet  = new SystemInfo("YL_시스템(일봉)", YL_TYPE_NORMAL, null, TradeSet);
                  Main.ReqChartEx(ChartSet,SystemSet);
                  Main.MessageList("확장차트생성요청:",ItemList[ReqCount]);                  
            }
            else//아니면
            {
                  //종목객체생성 종료
                  Main.MessageList("종목객체생성완료");      
            }
      }
}
//타이머 동작
function Main_OnTimer(nEventID)
{
      //1번 타이머 동작
      if (nEventID == 1)
      {
            var d = new Date();
            HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
            //15시 25분이 되면
            if (HHMMSS >= 152500)
            {
                  //타이머종료
                  Main.KillTimer(1);
#######################################추가#####################################
                  //생성된 전체차트에서 미완성 매수신호 있는 것을 확인하고 
                  //미완성매수신호가 있고 잔고에 보유수량이 없으면 매수
                  for (var i = 0; i < CT.length; i++)
                  {
                        ///마지막봉의 미완성 신호 정보를 가져와 저장
                        var Incom2 = CT[i].GetIncompleteSignal();
                        //미완성 정보가 있고 매수 신호이면
                        if (Incom2[0] != null && Incom2[0].signalKind == 1) 
                        {
                              Account1.SetBalance(Incom2[0].code, 0)
                              if (Account1.Balance.count > 0)
                              {
                                    Account1.OrderBuy(Incom2[0].code, Incom2[0].count, Incom2[0].price, 0);
                              }
                        }
                  }
##############################################################################
                  //생성된 전체차트에서 미완성 매도신호 있는 것을 확인하고 
                  //미완성매도신호가 있고 잔고에 보유수량이 있으면 전량 매도
                  for (var i = 0; i < CT.length; i++)
                  {
                        ///마지막봉의 미완성 신호 정보를 가져와 저장
                        var Incom = CT[i].GetIncompleteSignal();
                        //미완성 정보가 있고 매수청산 신호이면
                        if (Incom[0] != null && Incom[0].signalKind == 2) 
                        {
                              Account1.SetBalance(Incom[0].code, 0)
                              if (Account1.Balance.count > 0)
                              {
                                    Account1.OrderSell(Incom[0].code, Account1.Balance.count, Incom[0].price, 0);
                              }
                        }
                  }
            }
      }
}
//신호발생
function Main_OnRiseSignal(ChartEx, Signal)
{
      //신호발생 종목에 대해 잔고셋팅
      Account1.SetBalance(Main.GetOrderCode(Signal.code),0);
     
 
###############################추가 요청#######################################  
#### 미완성 신호로 매수된 경우, 익일 시가에 완성신호로 금번 차수 매수 금지#####
########## 다음 차수 매수는 익일에 나오지 않습니다.###########################
      //매수신호 시 매수 
      if (Signal.signalKind == 1) ////// && Account1.Balance.count == 0)
      {
            Account1.OrderBuy(Main.GetOrderCode(Signal.code), Signal.count, Signal.price, 0);      
            Main.MessageList("매수주문9");
      }
      if (Signal.signalKind == 2)
      {
            //전체미체결주문 갯수
            var num = Account1.GetTheNumberOfUnfills();
            //전체 미체결수 만큼 루프를 돌면서
            for (var i = 0; i < num; i++)
            {
                  //미체결을 하나씩 셋팅하고 Account1.GetTotalAmount(nCategory, nTradeKind)
                  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(Signal.code), Signal.count, Signal.price, 0);
                  Main.MessageList("매도주문");  
            }
      }
}
2023-05-18
1106
글번호 225801
주식승부 님에 의해서 삭제되었습니다.
2023-05-15
0
글번호 225800
답변완료
예스스팟을 이용한 핸드폰버전 개발
예스스팟을 이용한 전략을 핸드폰용으로도 개발이 가능한지 문의 드립니다.
만약 현재는 안된다면 차후에라도 가능하게 될런지도 궁금합니다.
2023-05-12
1141
글번호 225799