커뮤니티

수식 문의드립니다.

프로필 이미지
무영세
2014-02-09 00:31:06
1528
글번호 222802
답변완료
관심종목그룹에서 엔벨로프 (10, 6) 을 설정하여 하단선 이탈 시 매수 5일선 골드크로스 시 매도 20일선 하향시 손절 또는 매수 후 5% 하락 시 손절 하는 수식 부탁드립니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-02-17 18:25:47

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. 스팟수식은 정교하게 검토해서 올려드리진 않습니다. 가이드이므로 주석참고하셔서 수정 보완해 사용하시기 바랍니다. 스팟 수식안에 게시판 금칙어가 있습니다. 영문 업데이트가 Up*date로 중간에 *표시가 들어가 있으므로 제거하고 적용하셔야 합니다. 스크립트객체화면에서 계좌객체가 설정되어 있어야 합니다. 계좌객체명은 Account1입니다. var RcvCount; var List = new Array(100); 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() { //스팟실행시 지정한 이름의 관심종목을 호출 //관심종목의 종목수 ListCnt = Main.GetItemCountOfInterest("JTurn") Main.MessageList("전체종목수",ListCnt); //차례대로 배열변수 List에 저장( 최대 100종목) for(var i = 0; i < ListCnt; i++) { List[i] = Main.GetItemCodeInInterest("JTurn", i); Main.MessageList("관심그룹 종목",List[i]); } Main.ReqMarketData(List[0],50,0); Start = false RcvCount = 0; } //요청한 종목객체가 생성되면 function Main_OnRcvMarketData(MarketData) { //생성 종목수 카운트 RcvCount = RcvCount+1; //배열변수 SymBol의 RcvCount방에 현재 수신된 종목객체 저장 SymBol[RcvCount] = MarketData; Main.MessageList(RcvCount,"번째 종목생성",MarketData.code); //다음 순번 종목객체 요청 if (RcvCount < ListCnt) { Main.SetTimer(1, 1000); } //종목객체가 모두 생성되면(종목검색으로 나온 종목수와 생성횟수가 같을때) if (RcvCount == ListCnt) { Main.KillTimer(1); Start = true; Main.MessageList("종목생성완료",Start); } } function Main_OnTimer(nEventID) { if (nEventID == 1) { Main.ReqMarketData(List[RcvCount],50,0); } } 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보다 크고(잔고수량있음) if (Account1.Balance.count > 0) { //현재가가 5일이평이상이면 매도주문 if (SymBol[i].current >= mav5 && C2[i] < ma5) { //매수5호가로 잔고의 전량 매도주문 Account1.OrderBuy(SymBol[i].code,Account1.Balance.count,SymBol[i].Bid(5),0); } //20일이평 이하이면 매도주문 if (SymBol[i].current <= mav20 && C2[i] > ma20) { //매수5호가로 잔고의 전량 매도주문 Account1.OrderBuy(SymBol[i].code,Account1.Balance.count,SymBol[i].Bid(5),0); } //평균단가 대비 5% 이하이면 if (SymBol[i].current <= Account1.Balance.assessedAmount*0.95) { //매수5호가로 잔고의 전량 매도주문 Account1.OrderBuy(SymBol[i].code,Account1.Balance.count,SymBol[i].Bid(5),0); } } } } } } } 즐거운 하루되세요 > 무영세 님이 쓴 글입니다. > 제목 : 수식 문의드립니다. > 관심종목그룹에서 엔벨로프 (10, 6) 을 설정하여 하단선 이탈 시 매수 5일선 골드크로스 시 매도 20일선 하향시 손절 또는 매수 후 5% 하락 시 손절 하는 수식 부탁드립니다.