커뮤니티

수식 검토 부탁 드립니다.

프로필 이미지
하루삼프로
2025-01-27 11:36:47
686
글번호 187546
답변완료
안녕하세요. 수고많으십니다. 시스템식으로 작성한 if MarketPosition == 0 and 매수조건 Then Buy("b"); if MarketPosition == 1 Then { if MaxEntries == 1 Then Buy("b2",AtStop,LatestEntryPrice(0)*1.01,Floor(100000/max(NextBarOpen,LatestEntryPrice(0)*1.01))); } if MarketPosition == 1 Then ExitLong("bx",AtStop,highest(H,BarsSinceEntry)*0.98); 위 수식을 자바 스크립트로 변환 하여 기존 스팟의 내용에 추가했습니다. 잘 못된 부분 수정 보완 부탁 드리겠습니다. 전체 파일 올렸으나 엑셀 오류로(사용하지못하는 텍스트) 수식 작성이 완료 되지 않아 메모장.txt를 알집으로 압축하여 파일로 첨부 합니다. 검토 부탁 드리겠습니다. 항상 감사드립니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2025-01-31 11:24:27

안녕하세요 예스스탁입니다. 1 문법상 잘못 작성된 부분만 답변드립니다. 스팟은 저희가 테스트를 해드리지 않으므로 나머지 부분은 모의투자등에 적용하셔서 적용해 보시면서 수정보완하시기 바랍니다. 2 var 최고가 = {}; // 종목별 최고가 저장 올리신 내용에서 최고가는 위와 같이 객체생성인데 값저장부분과 값 갱신 부분이 잘못되어 있습니다. 아래 Main_OnRcvMarketData에 초기값 저장하는 부분과 Main_OnTimer에서 값갱신부분 살펴보시기 바랍니다. function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours() * 10000 + d.getMinutes() * 100 + d.getSeconds(); if (nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151500) { if (MKList.length < 최대보유종목수) { Main.ReqPowerSearch("자동매매"); } else { Main.SetTimer(1, 타이머간격 * 1000); } } if (nEventID == 2) { Main.ReqMarketData(OrderList[req]); } if (nEventID == 99 && MKList.length > 0) { for (var i = 0; i < MKList.length; i++) { var stock = MKList[i].code; Account1.SetBalance(stock, 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 2 && MKorder[i] == 1) { var avgCost = Account1.Balance.avgUnitCost; var currentPrice = MKList[i].current; // 최고가 갱신 if (currentPrice > 최고가[stock.code].hh) { 최고가[stock.code] = {hh:currentPrice}; } // 1% 상승 시 추가 매수 (시장가로 100만 원) if (currentPrice >= avgCost * 추가매수조건 && Account1.Balance.count == 1) { var 추가매수수량 = Math.floor(추가매수금 / currentPrice); Account1.OrderBuy(stock.code, 추가매수수량, 0, 1); } // 최고가 대비 2% 하락하면 손절 (시장가 매도) if (currentPrice <= 최고가[stock.code].hh * 손절조건) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1); MKorder[i] = -1; } } } } } function Main_OnRcvMarketData(MarketData) { if (MarketData.code == OrderList[req]) { MKList.push(MarketData); MKorder.push(1); BuyList.push(MarketData.code); // 검색된 종목을 1주 시장가 매수 Account1.OrderBuy(MarketData.code, 수량, 0, 1); // 최고가 초기화 최고가[MarketData.code] = {hh:MarketData.current}; req += 1; if (req < OrderList.length && MKList.length < 최대보유종목수) { var aa = Main.ReqMarketData(OrderList[req]); if (aa == -1) { Main.SetTimer(2, 15000); } } else { Main.SetTimer(1, 타이머간격 * 1000); } } } 즐거운 하루되세요 > 하루삼프로 님이 쓴 글입니다. > 제목 : 수식 검토 부탁 드립니다. > 안녕하세요. 수고많으십니다. 시스템식으로 작성한 if MarketPosition == 0 and 매수조건 Then Buy("b"); if MarketPosition == 1 Then { if MaxEntries == 1 Then Buy("b2",AtStop,LatestEntryPrice(0)*1.01,Floor(100000/max(NextBarOpen,LatestEntryPrice(0)*1.01))); } if MarketPosition == 1 Then ExitLong("bx",AtStop,highest(H,BarsSinceEntry)*0.98); 위 수식을 자바 스크립트로 변환 하여 기존 스팟의 내용에 추가했습니다. 잘 못된 부분 수정 보완 부탁 드리겠습니다. 전체 파일 올렸으나 엑셀 오류로(사용하지못하는 텍스트) 수식 작성이 완료 되지 않아 메모장.txt를 알집으로 압축하여 파일로 첨부 합니다. 검토 부탁 드리겠습니다. 항상 감사드립니다.