커뮤니티

문의드립니다

프로필 이미지
무영세
2013-12-26 02:40:34
931
글번호 222756
답변완료
조건검색을 통해 나온 종목을 대상으로..(정배열) Envelope(20, 6) 설정에서 - 현재가가 envelope 하단선을 하향돌파하면 매수, - 매수 후 5일선을 상향돌파하면 매도 - 손절은 20일선을 이탈하면 손절 위에 같은 내용으로 스팟식을 작성하고 싶습니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-01-08 15:33:15

안녕하세요 예스스탁입니다. 올려주신 내용은 차트를 이용해야 하는데 스팟에서는 차트가 최대 5개만 사용될수 있어 갯수의 한계상 차트를 이용할 수 없고 수식에서 이평 및 envelope를 자체 계산해서 사용해야 합니다. 아래식은 이전에 답변받으신 내요에 일부 수정한 내용입니다. 하단 이하의 시세가 발생하면 매수하고 매수한 이후에 5일선을 위로 터치하면 매도하게 작성했습니다. envelope(20,6)은 하단값이 20이평-6%입니다. 진입이 하단에서 하므로 20이평보다는 작은 값입니다. 청산중 손절내용은 진입과 동시에 만족하므로 추가하지 않았습니다. 아래식 참고하시기 바랍니다. 스팟의 수식은 정교하게 검토해서 오려드리진 않습니다. 가이드이므로 주석참고하셔서 수정 보완해 사용하시기 바랍니다. 스팟 수식안에 게시판 금칙어가 있습니다. 영문 업데이트가 Up*date로 중간에 *표시가 들어가 있으므로 제거하고 적용하셔야 합니다. 스크립트객체화면에서 계좌객체가 설정되어 있어야 합니다. 계좌객체명은 Account1입니다. var RcvCount; var List; var ListCnt; var Period1 = 5; var Period2 = 20; var Percent = 6; //종목객체를 저장할 배열변수 var SymBol = new Array(100); //현재 체결시세를 저장할 변수 var C1 = new Array(100); //직전 체결시세를 저장할 변수 var C2 = new Array(100); //주문여부를 저장할 배열변수 var Buy = new Array(100); //매수주문금액 var BuyMoney = 1000000; function Main_OnStart() { //스팟실행시 사용자 조건감색 중 Search1 실행 Main.ReqPowerSearch("Search1") //초기값(종목객체 생성완료을 알기위해 사용할 변수) Start = false RcvCount = 0; } //종목검색이 완료되면 function Main_OnRcvItemList(aItemList, nCount) { //검색된 종목코드를 모두 저장 List = aItemList; //검색된 종목수 저장 ListCnt = nCount; //검색된 종목수와 종목코드들을 디버깅창에 출력 Main.MessageList("종목검색완료 - 전체종목수",ListCnt,"종목코드",List); //검색된 종목에 대해 첫번째 종목부터 종목객체 요청 Main.ReqMarketData(List[0],20,0); } //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { //생성 종목수 카운트 RcvCount = RcvCount+1; Main.MessageList(RcvCount,"번째 종목생성"); //배열변수 SymBol의 RcvCount방에 현재 수신된 종목객체 저장 SymBol[RcvCount] = MarketData; //다음 순번 종목객체 요청 if (RcvCount < ListCnt) { Main.ReqMarketData(List[RcvCount],30,0); } //종목객체가 모두 생성되면(종목검색으로 나온 종목수와 생성횟수가 같을때) if (RcvCount == ListCnt) { Main.MessageList("종목생성완료"); Start = true; } } function Main_OnUp*dateMarket(sItemCode, lUp*dateID) //*제거 { //시세 업데이트가 있으면 if (lUp*dateID == 20001 && Start == true) //* 제거 { //여러 종목객체 중에 현재 업데이트 종목이 어떤 종목인지 확인 for (var i = 1; i <= RcvCount; i++) { //for문으로 현재 업데이트된 종목과 같은 종목을 찾음 if (SymBol[i].code == sItemCode) { C2[i] = C1[i]; C1[i] = SymBol[i].current; //5이평 20이평 계산 sum1 = 0; sum2 = 0; for (var ii = 1; ii < Period2; ii++) { sum2 = sum2 + SymBol[i].GetPrevClose(ii); if (i < Period1) sum1 = sum1 + SymBol[i].GetPrevClose(ii); } //5이평 var mav5 = (sum1 + SymBol[i].current)/Period1; //20이평 var mav20 = (sum2 + SymBol[i].current)/Period2; //Envelope 하단 var BBdn = mav20*(1-Percent/100); //매수주문 // if (Buy[i] != true && SymBol[i].current <= BBdn && C2[i] > BBdn && C2[i] > 0 ) { var Vol = 0; if (SymBol[i].tradeUnit == 1) Vol = Math.floor(BuyMoney/SymBol[i].current ); else Vol = Math.floor((BuyMoney/SymBol[i].current )/SymBol[i].tradeUnit)*10; // SymBol[i].code 종목 매도5호가로 매수주문(수량인 Vol) Account1.OrderBuy(SymBol[i].code,Vol ,SymBol[i].Ask(5),0); //Buy배열변수의 동일배열번호에 매수주문을 했음을 알수 있게 true를 저장 Buy[i] = true; } ////////////////////////////////////////////////////////////////////////////// //매도주문 //매수주문을 한 종목이면 if (Buy[i] == true) { //해당 종목 잔고객체 셋팅 Account1.SetBalanceItem(SymBol[i].code) //잔고수량이 0보다 크고(잔고수량있음) 현재가가 5일이평이상이거나 20일이평 이하이면 매도주문 if (Account1.Balance.count > 0 && (SymBol[i].current >= mav5 && C2[i] < ma5 ) { //매수5호가로 잔고의 전량 매도주문 Account1.OrderBuy(SymBol[i].code,Account1.Balance.count,SymBol[i].Bid(5),0); } } } } } } 즐거운 하루되세요 > 무영세 님이 쓴 글입니다. > 제목 : 문의드립니다 > 조건검색을 통해 나온 종목을 대상으로..(정배열) Envelope(20, 6) 설정에서 - 현재가가 envelope 하단선을 하향돌파하면 매수, - 매수 후 5일선을 상향돌파하면 매도 - 손절은 20일선을 이탈하면 손절 위에 같은 내용으로 스팟식을 작성하고 싶습니다.