커뮤니티

예스스팟 Q&A

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

프로필 이미지
도도당
2018-06-06
13
글번호 224458

스팟 강제청산로직 코딩관련

안녕하십니까. 운영자님 도움으로 자동매매를 잘 돌리고 있습니다. 자동매매를 좀 더 정교하게 다듬고 싶어서, 청산로직을 추가하려고 합니다. 아래는 지난 게시글을 검색하여 자동매매에 추가하였는데, 청산로직이 실행되지 않고 있습니다. "종목객체생성완료"메시지까지 뜨고 실거래에서는 청산이 안됩니다 그래서 코드를 살펴보다가 바로 아래의 코드처럼, 특정종목의 현재가와 계좌잔고전체의 평균단가를 비교하면서, 잔고에 있는 개별종목들이 STOPLOSS에 적용이 안되는가 싶어 문의드립니다. 바쁘신데 번거롭게 하는게 아닌지 죄송스럽습니다만, 잘 부탁드리겠습니다. if (ItemObject[i].current >= Account1.Balance.avgUnitCost*1.10) 게시판번호 669, 2013년 8월 9일자 작성글 //매수잔고 if (Account1.Balance.position == 2) { //현재가가 평균단가 대비 10%이상 상승하면 매도 if (ItemObject[i].current >= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제"); } ========================================================== 안녕하세요 예스스탁입니다. 예스스팟의 StopLoss, StopPrifitTarget, StopTrailing과 같은 객체들은 예스스팟에서 차트를 생성하고 차트에 시스템을 적용시 설정하는 객체입니다. 예스스팟에서 Main.ReqChartEx라는 함수로 차트를 만드실 수 있는데 Main.ReqChartEx에는 생성할 차트의 제반조건과 적용할 시스템, 지표, 참조데이터를 지정해서 차트를 생성하실 수 있습니다. 이때 시스템을 적용할 때 강제청산을 설정하고자 하면 해당 객체에 값을 지정해서 이용하는 것입니다. 기존에 차트에 시스템 적용할 때 시스템 트레이딩 설정창의 강제청산탭에서 원하는 강제청산을 설정하고 적용하는 것과 같습니다. 아래스팟식 참고하시기 바랍니다. function Main_OnStart() { //생성할 차트정보설정(종목명,주기,주기구분,조회건수,조회건수 구분,수정주가,갭보정) var Chart1 = new ReqChartItem("00000000", 1, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false); //차트에 적용할 시스템의 외부변수 정보(기본값과 다른값을 지정할때 변경할 값으로 지정가능) var Input = new Array(new YLInputVar("Period", "10"), new YLInputVar("Period1", "5")) //차트에 적용할 시스템의 트레이딩 설정정보 var Trade = new SystemTradeInfo(TRADE_FIXCOUNT, // 기본거래수량 1, // 거래수량 123456789, // 자산 1, // 단위수량 0.01,0.01, CALCMETHOD_PERCENT, // 진입/청산 수수료 0.025, 0.025, CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ALL, // 피라미딩 설정여부 100000, // 최대진입수량 20); // 최대진입횟수 //차트에 적용할 강제청산 정보 //손절매,트레일링스탑,목표수익,최소가격변화,당일청산,청산시점) var Stop = new SystemStopInfo(new StopLoss(1, CALCMETHOD_PERCENT), // 손절매 new StopTrailing(2, 3, CALCMETHOD_PERCENT, 0), // 최대수익대비하락 new StopProfitTarget(4, CALCMETHOD_PERCENT), // 목표수익 new StopInactivity(5, 6, CALCMETHOD_PERCENT), // 최소가격변화 new StopEndOfDay(151400), // 당일청산 STOP_INSTANT); //차트에 적용할 시스템 설정 //(적용할 시스템명,파일종류,외부변수정보,트레이딩기본정보,강제청산정보); var System = new SystemInfo("Stochastics", YL_TYPE_NORMAL,Input,Trade,Stop); //적용할 지표설정 var Indicator = new Array(new IndicatorInfo("Stochastics",YL_TYPE_NORMAL, new Array(new YLInputVar("Period", "10"),new YLInputVar("Period1", "5")))); //적용할 참조데이터 설정 var Data = new Array(new ReqChartItem("00000000", 5, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false), new ReqChartItem("000660", 5, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false), new ReqChartItem("005930", 10, CHART_PERIOD_MINUTE, 300, CHART_REQCOUNT_BAR, false, false)); Main.ReqChartEx(Chart1,System,Indicator,Data); } 위 수식과 같이 잔고의 종목들에 대해 손절매나 목표수익, 트레일링 스탑을 적용하는 것은 아니고 차트에 시스템 적용할 때 강제청산에 대해 설정값을 지정하는 객체들입니다. 아래는 계좌에 매수하여 종목이 추가되면 해당 종목에 대해 목표수익과 손절매, 트레일링스탑을 적용하는 식입니다. 최대 10종목까지 수행됩니다. 식작성하실 때 참고하시기 바랍니다. 스크립트 객체화면에 계좌객체가 필요합니다. 객체명 Account1 식상 게시판 금칙어가 있습니다 영문 업데이트가 Up*date로 작성이 되어 있으므로 * 제거하시기 바랍니다. var Nth = 0; var ItemCode = new Array(10); var ItemObject = new Array(10); var ItemHigh = new Array(10); //종목추가(주식)) function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*제거 { if (lUp*dateID == 30001)//*제거 { Nth = Nth+1;//횟수 ItemCode[Nth] = sItemCode; Main.ReqMarketData(ItemCode[Nth], 0,0);//종목객체 생성요청 Main.MessageList("⊙.⊙",Nth,"번째","신규종목편입 ",ItemCode,"▶종목객체요청"); } } //종목객체 생성완료 function Main_OnRcvMarketData(MarketData) { if (MarketData.code == ItemCode[Nth]) { ItemObject[Nth] = MarketData; ItemHigh[Nth] = 0; Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemObject[Nth].code); } } //종목객체 시세 업데이트 function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { //편입된 종목수 만킄만 수행 for (var i = 1; i <= Nth; i++) { if (ItemObject[i].code == sItemCode && lUp*dateID == 20001)//*제거 { Main.MessageList("-----------------------------------------------"); Main.MessageList(ItemObject[i].code,"업데이트"); //잔고셋팅 Account1.SetBalanceItem(ItemObject[i].code,0); //종목편입 이후의 최고가 계산 if (ItemObject[i].current > ItemHigh[i]) { ItemHigh[i] = ItemObject[i].current; } //매수잔고 if (Account1.Balance.position == 2) { //현재가가 평균단가 대비 10%이상 상승하면 매도 if (ItemObject[i].current >= Account1.Balance.avgUnitCost*1.10) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("수익청산 : ",ItemObject[i].code,"종목객체삭제"); } // 현재가가 평균단가 대비 10%이상 하락하면 매도 if (ItemObject[i].current <= Account1.Balance.avgUnitCost*0.90) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("손절청산 : ",ItemObject[i].code,"종목객체삭제"); } //현재가가 평균단가 대비 8% 이상 상승후 평균단가+5%까지 하락하면 매도주문 if (ItemHigh[i] >= Account1.Balance.avgUnitCost*1.08 && ItemObject[i].current <= Account1.Balance.avgUnitCost*1.05) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); //주문 후 해당 종목객체 삭제 Main.RemoveMarketData(ItemObject[i]); Main.MessageList("TR청산 : ",ItemObject[i].code,"종목객체삭제"); } } Main.MessageList("-----------------------------------------------"); Main.MessageList("종 목 : ",ItemObject[i].code); Main.MessageList("평균단가 : ",Account1.Balance.avgUnitCost); Main.MessageList("현 재 가 : ",ItemObject[i].current); Main.MessageList("진입최고 : ",ItemHigh[i]); } } } 즐거운 하루되세요 > 즐겁게 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 항상 상세하시고 친절하신 답변에 감사드립니다. 예스스팟에서 손절 익절 추적스탑 등을 구현하는 방법을 공부하려고 하는데, 예스스팟의 "객체정보" 화면에서 보면, StopLoss, StopPrifitTarget, StopTrailing이라는 객체들이 보입니다. YesLanguage의 SetStopLoss, SetStopPrifitTarget, SetStopTrailing이라는 강제청산함수들과 기능이 매우 유사할 것으로 짐작이 되는데, 이 객체들의 실제 적용례를 부탁드립니다. 1. StopLoss, StopPrifitTarget, StopTrailing 객체들의 실제 사용례를, 아주 간단하게라도 예문을 각각 보여 주시면 대단히 감사하겠습니다. 2. 특히, 이 객체들의 properties 중에 보면 "color"라고 하는 프라퍼티가 있어서, 화면상에 손절선, 익절선, 추적스탑선 등을 색깔로 표시해 주는 좋은 기능일 것으로 짐작이 되는데, 시뮬레이션 등을 할 수 없는 예스스팟에서 색깔로라도 그 것들을 볼 수 있으면 크게 도움이 될 거 같습니다. 이 color의 사용례도 (소스 코드 문장 중에) 보여 주시면 대단히 감사하겠습니다. (3. 더불어서, StopEndOfDay, StopInactivity 객체들의 예문도 짧게라도 보여 주시면 감사하겠습니다) 감사합니다.
프로필 이미지
아름다운사람들
2018-06-02
1733
글번호 224454

예스스팟과 트레이더 차이가 뭔가요?

주식거래를 하는데 장중 전종목을 감시하다가, 조건 만족되면 주문이 나가고 역시 조건만족되면 매도하는 시스템을 만들고 싶습니다 계산해보니까 하루에 한 200번 매매가 될것 같습니다. 이런걸 하려면 예스스팟을 해야 하나요 아님 예스 트레이더를 해야 하나요? 어느 증권회사 하면 되는지요 감사합니다
프로필 이미지
미수맨
2018-06-01
2439
글번호 224453
답변완료

1688번 추가 문의

** 1688번에 추가 작성된 내용입니다 ** 안녕하세요 번거로우시겠지만 1688번 '마감청산'과 관련하여 한가지만 추가 질문 드립니다. 아래 작성해주신 수식을 적용해 본 결과 모두 정상으로 작동합니다. 감사드립니다. 한가지 추가하고 싶은 것은 아침에 YT를 접속하면 Main_OnStart가 작동하여 그때부터 5초단위로 체크를 하게 되므로, 실제 작동에 필요한 시간까지 불필요한 부하가 걸릴 수 있는 것 같습니다. 아래 '마감청산'수식이 14시57분부터 작동하도록 부탁드립니다. 확인을 위하여 Main.MessageLog("마감청산 시작"); 을 추가하였는데 메세지가 14시57분이후 발생하면 좋겠습니다. ---> 즉, 14시57분부터 작동 시작 이상입니다 감사합니다 !! var A1,A2,A3; function Main_OnStart() { Main.SetTimer(1, 5000); A1 = false; A2 = false; A3 = false; Main.MessageLog("마감청산 시작"); } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1) { if (A1 == false && HHMMSS >= 145930) { A1 = true; Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(5), 0); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, MarketData1.Bid(5), 0); } } if (A2 == false && HHMMSS >= 150000) { A2 = true; 이하 생략
프로필 이미지
새로운세상
2018-06-05
2456
글번호 224451
답변완료

문의드립니다.

수고하십니다. 국내선물을 거래하고 싶으며, 증권사는 하이투자입니다. 입력변수추가로 inputbar를 아래와 같이 사용하고 싶습니다. (1) 초기진입 1:매수진입 2:매도진입 (2) 진입수량 (3) 진입횟수 (4) 청산방법:1:스토케스틱 청산 2:지정가 또는 지정수익률 청산(지정가1,2 입력) (5) 당일청산 1:청산 2:오버나이트 (6) 손절:손실합계금액(시장가) 첫 주문의 종류를 입력변수에서 확정하고 싶습니다. 청산방법은 1:차트의 스토 신호대로 청산, 2:지정가1, 지정가2 또는 지정수익률1,2 를 입력하여 청산 (복잡해지면 (5)번 -청산방법-이후는 안 해 주셔도 됩니다.) 이상입니다. * 잘 부탁드립니다 *
프로필 이미지
여세우
2018-06-21
2472
글번호 224448
답변완료

수식문의드립니다.

관심종목에 등록된 종목들의 확장차트를 만들고 시스템을 적용하여 매수매도 신호에 따라 주문하고자 합니다. -관심종목에 등록된 종목의 확장차트 생성, 시스템 적용 -보유종목은 3개로 제한 (3종목 보유중에 한종목 청산되면 이후에 나오는 신호는 정상적으로 매수) -첫번째 매수신호 발생시 100만원매수 (현재가) -두번째 매수신호 발생시 100만원매수 (현재가) -매도신호 발생시 전량매도 (현재가) -매도신호 발생시 미체결매수주문 있는경우 전량 취소. -매도신호 발생시 전량 체결되지 못하고 남은물량이 있을경우 -2%하락시 전량 시장가 매도 1거래일~3거래일 보유하는 경우도 있는데 혹시 프로그램 시작할때 보유중인 종목에 대해 따로 처리해야 할 부분이 있는지 궁금합니다. 따로 처리해야할 부분이 있다면 포함해서 수식 작성 부탁드립니다. 감사합니다.
프로필 이미지
jba
2018-06-07
2548
글번호 224445
답변완료

질문 드립니다.

예스트레이더 수식작성 부탁하던 중 1분봉 상 익일 시가 매도 전략이 있었는데, 시가에 바로 매도는 불가능하고 1분봉 하나가 완성이 되어야 매도가 가능하다고 합니다. 예스스팟이 좀 더 정교한 전략 작성이 가능하다고 들었는데 예스스팟에서는 익일 시가에 바로 매도가 가능한지요?
프로필 이미지
풍운객
2018-05-26
2551
글번호 224441
답변완료

잔고 객체 개선 건의

안녕하세요. 전략을 만들어서 실행하려다보니 부족한 부분이 있어서요. 잔고(Balance) 객체에 매수일을 좀 받아올 수 있으면 좋겠습니다. 보니까 대출일(loanDate) 정도만 있는데요. 매수일도 데이터로 제공해 주시면 감사하겠습니다.
프로필 이미지
울리카
2018-05-26
2576
글번호 224440
답변완료

문의 드립니다.

현재 예스트레이더로 전략을 작성해서 장 종료 후에 각 종목(일봉 기준)의 시고저종, 이격도(당일,전일), 주기 수정된 MACD(당일, 전일), 청산시점(진입후 50% 상승한 날짜, 금액, 손절가격)등 2~30종류의 데이터를 만들어서 수기로 엑셀다운로드 해서 스윙거래 시뮬레이션 중입니다. 그런데 종목 수가 많아지니까 이걸 매번 차트를 열어서 print를 찍는게 상당한 시간이 소요되고, 진입일자가 다르다보니 뭔가 전략식을 다시 설정해주기도 해야해서 복잡합니다. 그래서 혹시 예스스팟으로 다수 종목의 여러 데이터(가격데이터, 보조지표 데이터(MACD, 이격도, 거래량 등))을 일괄로 다운로드 받을 수 있는지 궁금합니다. 전일 데이터도 동시에 받을 수 있으면 더욱 좋구요. 다수 종목 자동거래 프로그램도 예스스팟으로 만들 수 있으면 더더욱 좋겠습니다. 답변 부탁드리겠습니다. 감사합니다.
프로필 이미지
깜피
2018-05-26
2757
글번호 224439
답변완료

미완성신호 지속

var T; function Main_OnStart() { T = 0; Main.MessageLog("시작"); OrderCode = Main.GetOrderCode(KP.code); } function C1_OnRiseIncompleteSignal(IncompleteSignal) { Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind); A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code)) } " 이하생략 " 위의 수식을 미완성신호가 60초 이상 계속유지 되는 경우에 한하여 시스템이 적용 되도록 수식의 변경을 부탁 합니다..
프로필 이미지
너무조아
2018-05-25
2704
글번호 224435