커뮤니티

예스스팟 Q&A

관리자에 의해 프로그램 사용법 QnA로 이동되었습니다

프로필 이미지
매매의추억
2013-09-24
9
글번호 222590
0

logos 님에 의해서 삭제되었습니다.

프로필 이미지
logos
2013-09-25
31
글번호 222588

재령 님에 의해서 삭제되었습니다.

프로필 이미지
재령
2013-09-23
0
글번호 222585
답변완료

시세조회 건수제한 오류

매매 시작하기 전에 약 30~80 개의 관종 종목의 maketdata를 추가하는 것으로 프로그램을 짰는데, 갑자기 시세조회 건수제한 오류(15초당 60건만 가능합니다. 15초 남았습니다.)라고 뜨고 marketdata가 추가가 안되는 것 같네요. 이제 컴퓨터로 for loop을 이용해서 다량의 marketdata를 추가하는 것이 불가능한건가요? 그렇게 되면,, 이 프로그램 쓸 이유가 없어지게 되는데,, 생각보다 이 hts는 많은 제약이 있어서 아쉽네요. 전략 생성의 간편함으로 예스스팟을 많이 용했는데, 생각보다 많은 제약이 있어서 다른 api를 찾아서 사용하는 것이 더 이로울 것 같네요...
프로필 이미지
here9931
2013-09-22
559
글번호 222584
답변완료

해당 종목에 가격 변동 정보를 구하고 싶네요

종목의 일정 기간동안 평균 상승률, 하락률 최고 상승률, 하락률 최조 상승률, 하락률 이렇게 정보를 얻고 싶습니다 도와주세요 그리고 좋은 추석 연휴 보내세요 ^_^
프로필 이미지
스킬
2013-09-17
646
글번호 222583
답변완료

파일쓰기와 읽기

수고 하십니다. 항상 멋진 프로그램 사용하는 재미에 푹빠져 있어 즐겁네요. 즐거운 추석되시고, 늘 건강하세요 예스 스팟의 Q& 게시판에 예스스탁의 답변중에 파일에 로그를 남기고, 이후 다시 불러 올 수 있다고 설명하셨는데 질문) 선물의 체결시간,현재가, 거래량을 파일에 저장하고 , 이 값을 배열에불러와 저장하고 출력하는 예문 부탁드립니다. function Main_OnStart() { var Test; testArr = new Array(100); // 단순 저장후 출력 Main.SetUserValue("buy",Futures.current); Test =Main.GetUserValue("buy"); Main.MessageList("Test:저장후 호출",Test); // 파일에 저장후 출력 for(i=0; i<10 ; i++) { testArr[i]=i; Main.PrintOnFile("Futures.txt",i,Futures.time,Futures.current,Futures.volume); } // testArr 저장 후 출력 Main.SetUserValue("SetArr",testArr); Main.MessageList("SetArr",Main.GetUserValue("SetArr")); // 파일의 출력? } <기존 답변> 특정값을 로그를 남기실 경우에는 아래 함수를 이용하시면 됩니다. Main.PrintOnFile(sFilePath, sMsg) sFilePath : 저장결로및 파일명 sMsg : 출력내용 스크립트에서 특정 값을 저장해서 이후에 해당 값을 다시 불러 사용하실 경우에는 아래 함수를 이용하시면 됩니다. Main.SetUserValue(sName, sValue) --> 내부파일에 지정한 이름으로 지정한 값을 저장 Main.GetUserValue(sName) --> 내부파일에 지정한 이름으로 저장된 값을 값 반환 내부파일에 수식의 특정값을 이름을 지정해 저장하고 부르시는 함수가 제공되고 있습니다. 즐거운 하루되세요
프로필 이미지
히말라야
2013-09-17
705
글번호 222581
답변완료

질문 올립니다.

안녕하세요. 항상 친절하신 답변 감사드립니다. 한 번 주문한 후, 그 것이 체결되어 청산되든, 아니면 조건이 안 맞아 체결 전에 취소하든, 이런 과정들을 아주 철저하게 주문번호를 연결고리로 하여 추적해 가며 관리하고 싶습니다. 그래서, 아래와 같은 스팟 식을 짜고 싶은데, 아직 잘 되질 않고 있어서 도움을 부탁드립니다. ////////// ////////// ////////// ////////// ////////// 아래: 신호에 따라 매수진입 주문(예: 20 이평 80 이평 교차 전략) 주문번호: 88번. (변수로는 가령 BuyNum이라 가정) 1. 이 매수주문이 체결되면: 1.1. 초기손절: 진입가격에서 9틱 하락하면 손절. ((위 주문 번호를 이용해서 코딩)) 1.2. 익절: 매수주문이 체결되면 50틱 위에서 익절하도록 익절 주문 냄. ((위 주문 번호를 이용해서 코딩)) 1.3. 추적스탑: 그 전까지는(즉 익절 목표에 달성하기 전까지는), 10틱 이상 오르고 2틱 내리면 손절하는 추적스탑. ((위 주문 번호를 이용해서 코딩)) 2. 미체결된 경우: 주문 취소: 매수진입 주문 후, 그 주문이 아직 체결되지 않은 상태에서, 시장의 가격이, 처음 매수주문한 가격으로부터, 5틱 오르거나 3틱 내리면 매수진입주문 취소. ((위 주문 번호를 이용해서 코딩)) ////////// ////////// ////////// ////////// ////////// 이상과 같은 것을, step과 같은 변수 등을 이용하지 않고, 최대한 주문 번호 자체를 이용해서, 즉 그 매수주문이 응답됐는지, 체결됐는지, 아직 안 됐으면 그 주문가격과 현재가격을 비교해서 현재가격이 너무 동떨어져 버렸으면 주문을 취소한다든지 하는 모든 과정을, 아주 철저하게 주문 번호 자체로 추적하며 관리할 수 있는 소스를 짜고자 하는데, 잘 안 되고 있습니다. 신호에 따라 매수주문 내고 하는 것은 별 문제없이 잘 되는데, 특히 잘 안 되는 부분은, 체결되고 난 후, 손절 익절 주문 등이 제가 짠 소스대로 잘 나가 주질 않고, 또 체결 전에 시장 가격이 많이 바뀌어서 주문을 취소해 버리고자 하는 부분도 제가 짠 소스에 의한 대로는 실행이 안 되고 있습니다. 그래서 아주 주문 번호 자체를 이용, 그 주문의 전 과정을 주문번호에 따라 밀착 추적해서 관리하는 방법을 배우고 싶습니다. 전문가님께서 도움을 제시해 주시면 대단히 감사하겠습니다.
프로필 이미지
즐겁게
2013-09-15
575
글번호 222578

매뉴얼 예제5. 합성선물의 결과를 엑셀로 출력하기

요즘 예스스팟 기능을 익히고 있는데 사용할수록 굉장하다는 생각이 절로 듭니다. 훌륭한 프로그램을 만들어 주셔서 감사드립니다. 게다가 예스스팟 매뉴얼이 워낙 잘 만들어져 있어서 연습하는데 그리 어렵지 않네요. 다만 사전식으로 만들어져 있어서 예제에 없는 부분은 활용하기가 난감한 면이 있습니다. 그래서 엑셀에 로그를 출력하는 방법을 찾느라 좀 헤맸습니다. 무엇보다도 모의투자가 지원되지 않는 종목은 위 그림처럼 출력해서 전진분석을 하시면 될 겁니다. 예스랭귀지의 print문처럼 엑셀에 로그를 출력하려면 SetRowData를 사용하면 되는데 예제가 없길래 제가 만든 예제를 올려드립니다. 마지막행 다음 행에 로그를 찍는 간단 예제입니다. BuyCallXlRow = xls1.GetRowCount(1) + 1; xls1.SetRowData(1, "A" + BuyCallXlRow, tm, BuyCallCode, "매수", BuyCallPrice, vol); 예제5.합성선물의 내용을 엑셀로 출력하도록 수정한 내용입니다. /*스크립트시작-----------------------------------------------------*/ var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; var BuyCallXlRow; var BuyPutXlRow; var SellCallRow; var SellPutRow; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; var sData = xls1.GetData(1, "A1"); if (sData != "거래일시") { xls1.SetRowData(1, "A1","거래일시","거래상품","매매구분","단가","수량","총매매금액","수익"); } } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); D = new Date(); YYYY = D.getFullYear(); MM = D.getMonth() + 1; DD = D.getDate(); hh = D.getHours(); mm = D.getMinutes(); tm = YYYY+"/"+MM+"/"+DD+" "+hh+":"+mm; if (Signal.signalKind == 1 ) { Start = 1; BuyCallCode = Option.GetATMCallRecent(0,0); BuyPutCode = Option.GetATMPutRecent(0,0); var BuyCallPrice = Option.GetAskByCode(BuyCallCode,2); var BuyPutPrice = Option.GetBidByCode(BuyPutCode,2); A1.OrderBuy(BuyCallCode, Vol, BuyCallPrice, 0); A1.OrderSell(BuyPutCode, Vol, BuyPutPrice, 0); Main.MessageLog("합성선물매수"); BuyCallXlRow = xls1.GetRowCount(1) + 1; xls1.SetRowData(1, "A" + BuyCallXlRow, tm, BuyCallCode, "매수", BuyCallPrice, vol, BuyCallPrice * vol * 500000); BuyCallXlRow = BuyCallXlRow + 1; xls1.SetRowData(1, "A" + BuyCallXlRow, tm, BuyCallCode, "평가"); BuyPutXlRow = BuyCallXlRow + 1; xls1.SetRowData(1, "A" + BuyPutXlRow, tm, BuyPutCode, "매수", BuyPutPrice, vol, BuyPutPrice * vol * 500000); BuyPutXlRow = BuyPutXlRow + 1; xls1.SetRowData(1, "A" + BuyPutXlRow, tm, BuyPutCode, "평가"); } if (Start == 1 && Signal.signalKind == 2 ) { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); var BxPutPrice = Option.GetAskByCode(BuyPutCode, 2); A1.OrderSell(BuyCallCode, Vol, BxCallPrice, 0); A1.OrderBuy(BuyPutCode, Vol, BxPutPrice, 0); Main.MessageLog("합성선물매수청산"); xls1.SetRowData(1, "A" + BuyCallXlRow, tm, BuyCallCode, "매수청산", BxCallPrice, vol); xls1.SetRowData(1, "F" + BuyCallXlRow, BxCallPrice * vol * 500000,BxCallPrice - BuyCallPrice); xls1.SetRowData(1, "A" + BuyPutXlRow, tm, BuyPutCode, "매수청산", BxPutPrice, vol); xls1.SetRowData(1, "F" + BuyPutXlRow, BxPutPrice * vol * 500000,BxPutPrice - BuyPutPrice); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0,0); SellPutCode = Option.GetATMPutRecent(0,0); var SellCallPrice = Option.GetBidByCode(SellCallCode,2); var SellPutPrice = Option.GetAskByCode(SellPutCode,2); A1.OrderSell(SellCallCode, Vol, SellCallPrice , 0); A1.OrderBuy(SellPutCode, Vol, SellPutPrice, 0); Main.MessageLog("합성선물매도"); SellCallXlRow = xls1.GetRowCount(1) + 1; xls1.SetRowData(1, "A" + SellCallXlRow, tm, SellCallCode, "매도", SellCallPrice, vol, SellCallPrice * vol * 500000); SellCallXlRow = SellCallXlRow + 1; xls1.SetRowData(1, "A" + SellCallXlRow, tm, SellCallCode, "평가"); SellPutXlRow = SellCallXlRow + 1; xls1.SetRowData(1, "A" + SellPutXlRow, tm, SellPutCode, "매도", SellPutPrice, vol, SellPutPrice * vol * 500000); SellPutXlRow = SellPutXlRow + 1; xls1.SetRowData(1, "A" + SellPutXlRow, tm, SellPutCode, "평가"); } if (Start == 1 && Signal.signalKind == 4 ) { var SxCallPrice = Option.GetAskByCode(SellCallCode, 2); var SxPutPrice = Option.GetBidByCode(SellPutCode, 2); A1.OrderBuy(SellCallCode, Vol, SxCallPrice, 0); A1.OrderSell(SellPutCode, Vol, SxPutPrice, 0); Main.MessageLog("합성선물매도청산"); xls1.SetRowData(1, "A" + SellCallXlRow, tm, SellCallCode, "매도청산", SxCallPrice, vol); xls1.SetRowData(1, "F" + SellCallXlRow, SxCallPrice * vol * 500000, SellCallPrice - SxCallPrice); xls1.SetRowData(1, "A" + SellPutXlRow, tm, SellPutCode, "매도청산", SxPutPrice, vol); xls1.SetRowData(1, "F" + SellPutXlRow, SxPutPrice * vol * 500000, SellPutPrice - SxPutPrice); } } /*스크립트끝-------------------------------------------------------*/
프로필 이미지
수식지왕
2013-09-13
781
글번호 222577

루이001 님에 의해서 삭제되었습니다.

프로필 이미지
루이001
2013-09-13
30
글번호 222576
답변완료

복수계좌 연동

안녕하세요~ 다음 YesSpot 수식 부탁드리겠습니다. 12-31-0011(시스템 거래), 12-31-0022(손매매), 12-31-0033(앞의 두계좌 연동), 이렇게 총 3계좌를 운용한다고 가정했을 때 12-31-0033 계좌는 12-31-0011과 12-31-0022 계좌에서 포지션 변동이 있다면 즉시 주문이 실행되기를 원합니다. 포지션 변동은 선물,옵션 모두 해당이 되는데, 만약 옵션 변동분은 어렵다면 선물만이라도 좋습니다. 수식 및 설정부분에서 유의해야 할 사항 등이 있다면 내용 부탁드리겠습니다. ----------------------- 추가로 현재 YT 및 YesSpot은 32비트 컴퓨터에서만 가능한지요? 64비트에서는 안된다는 말을 들은 적이 있는데 맞는지 모르겠습니다. 그럼 즐거운 주말 되시고, 아울러 풍성한 추석 맞이하시기를 바라겠습니다. 감사합니다 !!!
프로필 이미지
새로운세상
2013-09-16
760
글번호 222575