커뮤니티

수정문의

프로필 이미지
ksks
2025-11-10 09:37:21
43
글번호 227800

아래 수식 중   당일 전량매도조건 부분을 2봉전 RSI(20)>60, 1봉전 RSI(20)<59.9, 0봉전 RSI(20)<59.9일때에만  매도하는 조건으로 수정 가능한지 문의드립니다. (15시15분에 전량매도 삭제) 또, 계좌잔고 수익이 +-5%일때 전량매도조건을 삭제하고 싶은데요.
 var timer5 = 5; //5초 var 매수금 = 100000; var 손절  = 0.95; var 익절  = 1.10; var OrderList = []; var MKList = []; var req; function Main_OnStart() {    //1번 타이머, 5초       Main.SetTimer(1, timer5*1000);   // 오늘 매수한 종목 관리 배열 초기화    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 >= 90000 && HHMMSS < 151500)       {             //종목검색 수행             Main.ReqPowerSearch("ZLMA+RSI-5분봉")             }     if (nEventID == 1)       {             //계좌보유종수             var num = Account1.GetTheNumberOfBalances();                          //9시~15시 15분  사이             if (HHMMSS >= 90000 && HHMMSS < 151500)             {                   //보유종목이 1개 이상                   if (num >= 1)                   {                         //계좌평가금액이 스팟시작시 평가금액대비 5% 이상이면 전종목 전량매도                         if (Account1.GetBalanceETCinfo(100) >= V1*1.10)                         {                               //1번 타이머 종료                               Main.KillTimer(1);                               //계좌리스트의 순서대로                               for (var i = 0; i < num; i++)                               {                                     //잔고를 셋팅                                     Account1.SetBalance(i);                                     //수량이 있고 5%수익이거나 5% 손실이면 시장가 매도                                     if (Account1.Balance.count > 0)                                     {                                           Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);                                     }                               }                         }                                                       else //아니면 개별종목 5%익절, -5%손절 체크                         {                               //계좌리스트의 순서대로                               for (var i = 0; i < num; i++)                               {                                     //잔고를 셋팅                                     Account1.SetBalance(i);                                     //수량이 있고 5%수익이거나 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);                                     }                               }                         }                   }             }             //15시 15분이후이면             if (HHMMSS >= 151500)             {                   //1번 타이머 종료                   Main.KillTimer(1);                   //계좌리스트의 순서대로                   for (var i = 0; i < num; i++)                   {                         //잔고를 셋팅                         Account1.SetBalance(i);                         //수량이 있고 5%수익이거나 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, 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(2)),0,1);   // Account1.OrderBuy(MarketData.code,Math.floor(매수금/MarketData.Ask(2)),MarketData.Ask(2),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 반환 }

답변 0