커뮤니티

수식 문의 드립니다

프로필 이미지
mi노99
2025-04-20 14:00:01.0
195
글번호 226281
답변완료
매수 매도 한것 엑셀화일로 남기고 싶은데 혼자서는 정말 어렵네요 아래 매도 프린트 함수에서 뭐가 잘못되서 안 되는지 고쳐주시길 부탁드립니다 감사합니다 var 매수금 = 1000000; var 손절 = 0.98; var 익절 = 1.03; function Main_OnStart() { Main.SetTimer(1,10000); MKList = []; } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if(nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151800) { Main.ReqPowerSearch("검색명"); } if(nEventID == 1) { var num = Account1.GetTheNumberOfBalances(); if(HHMMSS >= 90000 && HHMMSS < 151800) { if(num >= 1) { for (var i = 0;i < num; i++) { Account1.SetBalance(i); 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,Account1.Balance.MarketData.Bid(5),1); maedoprint(i); } } } } } function maedoprint(sun) { if(sun==0) { PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습","순,거래일자,종목명,매도시각,수량,단가,금액,비고"); } var 거래일자 = Account1.Balance.date; var 종목명 = Account1.Balance.name; var 매도시각 = Account1.Balance.time; var 수량 = Account1.Balance.fillCount; var 단가 = Account1.Balance.fillPrice; var 금액 = Account1.Balance.money; printlist[sun] = sun,거래일자,종목명,매도시각,수량,단가,금액; PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력 연습","%.f,%s,%s,%s,%.f,%.f,%.f,",printlist[sun]); PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력 연습.csv","%.f,%s,%s,%s,%.f,%.f,%.f,",sun,거래일자,종목명,매도시각,수량,단가,금액); // 매도 프린트 화일 확장자 유무 그리고 배열이 간단한데, 잘못된 부분이 있을까 두개를 다 해도 안되네요 }
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2025-04-21 13:54:54.0

안녕하세요 예스스탁입니다. 1 MainPrintOnFile(sFilePath, sMsg) PrintOnFile은 Main객체의 함수입니다. Main.PrintOnFile와 같이 지정하셔야 합니다. 또한 경로와 파일명 지정후 값을 나열하시면 됩니다. 예스랭귀지와 예스스팟은 서로 다른 언어입니다. 스팟 도움말에서 함수 설명 참고하시기 바랍니다. 2 var 거래일자 = Account1.Balance.date; var 종목명 = Account1.Balance.name; var 매도시각 = Account1.Balance.time; var 수량 = Account1.Balance.fillCount; var 단가 = Account1.Balance.fillPrice; var 금액 = Account1.Balance.money; Balance객체에는 위와 같은 프로퍼티가 없습니다. 잔고객체에는 아래의 값만 제공되고 있습니다. Account1.Balance.assessedAmount Account1.Balance.avgUnitCost Account1.Balance.code Account1.Balance.count Account1.Balance.current Account1.Balance.loanDate Account1.Balance.loanKind Account1.Balance.position 예스스팟 도움말에서 각 객체에서 제공되는 값을 확인하시기 바랍니다. 3 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Account1.Balance.MarketData.Bid(5),1); 주문함수에 MarketData객체가 사용되었는데 MarketData객체는 종목객체 생성시에 리턴되는 객체입니다. 사용하는 수식에서 종목검색 후 각 종목별 종목객체를 만들어 놓으셨다면 해당 종목객체를 저장한 변수에서 잔고셋팅한 종목과 같은 것을 찾아서 지정해 주셔야 합니다. 4 스팟에서 파일에 값을 출력하시려면 해당 경로의 폴더까지는 말들어 놓으셔야 파일이 만들어 집니다. 경로상 폴더가 자동으로 만들어 지지 않습니다. 5 printlist은 용도를 알수 없습니다. 아래는 파일 출력확인용으므로 나열해 작성해 드립니다. csv파일이므로 나열하는 값 사이에 ","가 들어가면 됩니다. 6 수식상 오류가 있거나 내용을 알수 없는 부분은 모두 주석처리했습니다. 테스트용이므로 해당 함수가 호출되면 간단히 해당잔고의 종목코드,수량,평단가가 출력되게 작성해 드립니다. 참고하셔서 필요한 값 추가해 사용하시기 바랍니다. var 매수금 = 1000000; var 손절 = 0.98; var 익절 = 1.03; function Main_OnStart() { //Main.SetTimer(1,10000); Main.SetTimer(1,1000); MKList = []; } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Main.KillTimer(1); //if(nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151800) //{ // Main.ReqPowerSearch("검색명"); //} if(nEventID == 1) { var num = Account1.GetTheNumberOfBalances(); if(HHMMSS >= 90000 && HHMMSS < 151800) { if(num >= 1) { for (var i = 0;i < num; i++) { Account1.SetBalance(i); if(Account1.Balance.count > 0 && (Account1.Balance.current >= Account1.Balance.avgUnitCost * 익절 || Account1.Balance.current <= Account1.Balance.avgUnitCost * 손절)) { Main.MessageList(i,"print"); //Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Account1.Balance.MarketData.Bid(5),1); maedoprint(i); } } } } } } function maedoprint(sun) { /* if(sun==0) { Main.PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습","순,거래일자,종목명,매도시각,수량,단가,금액,비고"); } var 거래일자 = Account1.Balance.date; var 종목명 = Account1.Balance.name; var 매도시각 = Account1.Balance.time; var 수량 = Account1.Balance.fillCount; var 단가 = Account1.Balance.fillPrice; var 금액 = Account1.Balance.money; printlist[sun] = sun,거래일자,종목명,매도시각,수량,단가,금액; */ Main.PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습.csv",Account1.Balance.code,",",Account1.Balance.count,",",Account1.Balance.avgUnitCost); //Main.PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습.csv","%.f,%s,%s,%s,%.f,%.f,%.f,",printlist[sun]); //Main.PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습.csv","%.f,%s,%s,%s,%.f,%.f,%.f,",sun,거래일자,종목명,매도시각,수량,단가,금액); // 매도 프린트 화일 확장자 유무 그리고 배열이 간단한데, 잘못된 부분이 있을까 두개를 다 해도 안되네요 } 즐거운 하루되세요 > mi노99 님이 쓴 글입니다. > 제목 : 수식 문의 드립니다 > 매수 매도 한것 엑셀화일로 남기고 싶은데 혼자서는 정말 어렵네요 아래 매도 프린트 함수에서 뭐가 잘못되서 안 되는지 고쳐주시길 부탁드립니다 감사합니다 var 매수금 = 1000000; var 손절 = 0.98; var 익절 = 1.03; function Main_OnStart() { Main.SetTimer(1,10000); MKList = []; } function Main_OnTimer(nEventID) { var d = new Date(); HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if(nEventID == 1 && HHMMSS >= 90000 && HHMMSS < 151800) { Main.ReqPowerSearch("검색명"); } if(nEventID == 1) { var num = Account1.GetTheNumberOfBalances(); if(HHMMSS >= 90000 && HHMMSS < 151800) { if(num >= 1) { for (var i = 0;i < num; i++) { Account1.SetBalance(i); 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,Account1.Balance.MarketData.Bid(5),1); maedoprint(i); } } } } } function maedoprint(sun) { if(sun==0) { PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력연습","순,거래일자,종목명,매도시각,수량,단가,금액,비고"); } var 거래일자 = Account1.Balance.date; var 종목명 = Account1.Balance.name; var 매도시각 = Account1.Balance.time; var 수량 = Account1.Balance.fillCount; var 단가 = Account1.Balance.fillPrice; var 금액 = Account1.Balance.money; printlist[sun] = sun,거래일자,종목명,매도시각,수량,단가,금액; PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력 연습","%.f,%s,%s,%s,%.f,%.f,%.f,",printlist[sun]); PrintOnFile("F:₩₩주식₩₩예스트레이더₩₩프로그램자동출력 연습.csv","%.f,%s,%s,%s,%.f,%.f,%.f,",sun,거래일자,종목명,매도시각,수량,단가,금액); // 매도 프린트 화일 확장자 유무 그리고 배열이 간단한데, 잘못된 부분이 있을까 두개를 다 해도 안되네요 }
프로필 이미지

mi노99

2025-04-21 19:13:40.0

가르쳐 주셔서 감사드립니다 고맙습니다