커뮤니티

문의 드립니다.

프로필 이미지
즐겁게
2013-08-09 16:53:55
1023
글번호 222496
답변완료
항상 상세하시고 친절하신 답변에 감사드립니다. 예스스팟에서 손절 익절 추적스탑 등을 구현하는 방법을 공부하려고 하는데, 예스스팟의 "객체정보" 화면에서 보면, StopLoss, StopPrifitTarget, StopTrailing이라는 객체들이 보입니다. YesLanguage의 SetStopLoss, SetStopPrifitTarget, SetStopTrailing이라는 강제청산함수들과 기능이 매우 유사할 것으로 짐작이 되는데, 이 객체들의 실제 적용례를 부탁드립니다. 1. StopLoss, StopPrifitTarget, StopTrailing 객체들의 실제 사용례를, 아주 간단하게라도 예문을 각각 보여 주시면 대단히 감사하겠습니다. 2. 특히, 이 객체들의 properties 중에 보면 "color"라고 하는 프라퍼티가 있어서, 화면상에 손절선, 익절선, 추적스탑선 등을 색깔로 표시해 주는 좋은 기능일 것으로 짐작이 되는데, 시뮬레이션 등을 할 수 없는 예스스팟에서 색깔로라도 그 것들을 볼 수 있으면 크게 도움이 될 거 같습니다. 이 color의 사용례도 (소스 코드 문장 중에) 보여 주시면 대단히 감사하겠습니다. (3. 더불어서, StopEndOfDay, StopInactivity 객체들의 예문도 짧게라도 보여 주시면 감사하겠습니다) 감사합니다.
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2013-08-12 13:21:37

안녕하세요 예스스탁입니다. 예스스팟의 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)//*제거 { //편입된 종목수 만&#53380;만 수행 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 객체들의 예문도 짧게라도 보여 주시면 감사하겠습니다) 감사합니다.
프로필 이미지

즐겁게

2013-08-13 02:50:32

항상 깊이 감사드립니다!