커뮤니티

예스스팟 관련

프로필 이미지
victor
2026-03-29 20:19:29
644
글번호 231322
답변완료

안녕하세요.

몇 개월전부터 대표님 무료 강의를 몇 번씩 들으며 자동매매를 실행 하고 있습니다.

매수는 조건검색식으로 매수는 하는 데 매도 관련해서 아래와 같이 매도를 하고 싶은 데 구현 하고 싶은 데  한계가 있어 도움을 요청합니다.

(현재  익절 5% 선절 3%로 셋팅 되어 있음)


1. 3분봉 기준 볼린저 밴드 (20,1.5) 상한선 이탈시 70% 매도

2. 3분봉 기준 볼린저 밴드(20,0.8) 상한선 이탈시 100% 매도

3. 거래시간이 9시부터 되어 있는 데 8시 대체 거래시간에도 매수가 가능 하면 셋팅 을 해 주시면 감사하겠습니다.




ar timer5 = 5; //5초

var 매수금 = 50000;

var 손절 = 0.97;

var 익절 = 1.05;

var OrderList = [];

var MKList = [];

var req;


function Main_OnStart()

{

   //1번 타이머, 1초

      Main.SetTimer(1, timer5*1000);

  // 오늘 매수한 종목 관리 배열 초기화

   MKList = [];

}



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 <152000)

      {

            //종목검색 수행

            Main.ReqPowerSearch("기본전략")      

      }


      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; // 계좌에 같은 종목이 있으면 true 반환

      }

   }

   return false; // 계좌에 같은 종목이 없으면 false 반환

}


예스스탁에서 1.2 로  매도 하고 싶습니다.

매수시간도 8시부터 가능 하면 좋겠습니다.

미리 감사 인사 드립니다.

늘 좋은 하루 보내세요.


감사합니다.


답변 2
프로필 이미지

예스스탁 예스스탁 답변

2026-04-14 15:01:01

안녕하세요 예스스탁입니다. 아래 내용 참고하시기 바랍니다. 1 종목이 검색되면 종목객체와 함께 차트객채를 만들어 이용하게 됩니다. 차트 객체에 볼밴 지표가 적용되어야 하므로 아래 2번 식을 지표식으로 먼저 만들고 스팟식 이용하셔야 합니다. 2 지표명 : 볼밴 input : Period1(20),dv1(1.5); input : Period2(20),dv2(0.8); var : BBup1(0),BBup2(0); BBup1 = BollBandUp(Period1,dv1); BBup2 = BollBandUp(Period2,dv2); Plot1(BBup1,"상단1"); Plot2(BBup2,"상단2"); 3 var timer5 = 5; //5초 var 매수금 = 50000; var 손절 = 0.97; var 익절 = 1.05; var OrderList = []; var MKList = [],CT = [],B = []; var req; function Main_OnStart() { //1번 타이머, 1초 Main.SetTimer(1, timer5*1000); // 오늘 매수한 종목 관리 배열 초기화 MKList = []; } 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 <152000) { //종목검색 수행 Main.ReqPowerSearch("기본전략") } if (nEventID == 2) { Main.KillTimer(1); 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); B.push(1); var PP = MarketData.Ask(1); if (PP == 0) PP = MarketData.current; var vol = Math.floor(매수금/PP); if (vol > 0) { //Account1.OrderBuy(MarketData.code,1,0,1); Account1.OrderBuy(MarketData.code,vol,0,1); // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(1)),MarketData.Ask(1),0); //지정가로 주문하고자 하시면 주문함수 내용을 위와 같이 변경하시면 됩니다. Main.MessageList(MarketData.code + " 주식을 매수합니다.",vol); //기본종목셋팅(3분 5000개, 갭보정안함, 수정주가처리 안함) var ChartSet = new ReqChartItem(MarketData.code,3,CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //지표 셋팅 var IndSet = new Array(new IndicatorInfo("볼밴")); //지정한 종목설정과 시스템으로 차트객체 요청 Main.ReqChartEx(ChartSet,null, IndSet, null); } else { Main.MessageList(MarketData.code,"|매수금액부족 매수금:",매수금,"|가격:",MarketData.Ask(1)); //요청횟수 1증가 req = req+1; //요청횟수가 요청할 종목갯수보다 작으면 다음 종목객체 요청 if (req < OrderList.length) { Main.MessageList(req,"종목객체요청",OrderList[req]); var XX = Main.ReqMarketData(OrderList[req]); //종목객체 생성제한 if (XX == -1) { //2번 타이머 15초 Main.SetTimer(2,15000); } } else //요청횟수가 요청할 종목갯수에 도달했으면 종목객체 생성 종료 { Main.MessageList(req,"종목객체/차트객체 생성끝"); Main.SetTimer(1, timer5*1000); } } } } function Main_OnRcvChartEx(ChartEx) { if (ChartEx.GetCode(1) == OrderList[req]) { CT.push(ChartEx); //요청횟수 1증가 req = req+1; //요청횟수가 요청할 종목갯수보다 작으면 다음 종목객체 요청 if (req < OrderList.length) { Main.MessageList(req,"종목객체요청",OrderList[req]); var XX = Main.ReqMarketData(OrderList[req]); //종목객체 생성제한 if (XX == -1) { //2번 타이머 15초 Main.SetTimer(2,15000); } } else //요청횟수가 요청할 종목갯수에 도달했으면 종목객체 생성 종료 { Main.MessageList(req,"종목객체/차트객체 생성끝"); 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; // 계좌에 같은 종목이 있으면 true 반환 } } return false; // 계좌에 같은 종목이 없으면 false 반환 } function Main_OnBarAppended(ChartEx, nData) { for (var i = 0; i < CT.length; i++) { if (CT[i].GetCode(1) == ChartEx.GetCode(1)) { if (B[i] == 1 && ChartEx.GetClose(1,1) < ChartEx.GetIndicatorData("볼밴",1,1) && ChartEx.GetClose(1,2) >= ChartEx.GetIndicatorData("볼밴",1,2)) { Account1.SetBalance(ChartEx.GetCode(1), 0) if (Account1.Balance.count > 0) { B[i] = 2; var xv = Math.floor(Account1.Balance.count*0.7); if (xv > 0) { Account1.OrderSell(Account1.Balance.code, xv,0,1); } } } if (B[i] == 2 && ChartEx.GetClose(1,1) < ChartEx.GetIndicatorData("볼밴",2,1) && ChartEx.GetClose(1,2) >= ChartEx.GetIndicatorData("볼밴",2,2)) { B[i] = 3; Account1.SetBalance(ChartEx.GetCode(1), 0) if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } } 즐거운 하루되세요
프로필 이미지

victor

2026-04-14 23:05:28

수고해 주셔서 감사합니다.

예스스팟에 셋팅해 보겠습니다.

혹여 문제가 있으면 다시 연락 드릴께요.

늘 좋은 하루 보내세요.