커뮤니티

질문드립니다.

프로필 이미지
지나리
2016-03-28 11:51:14
2267
글번호 223869
답변완료
안녕하세요. 아래의 명령을 수식으로 전환부탁드릴게요. 감사합니다. 1. 계좌의 잔고가 1천만원 이하면 보유 종목(코스피선물, 옵션)을 시장가로 바로 청산한다. 2. 선물 챠트상 매수신호가 발생했고, 외국인 순매수금액(참조데이타 활용)이 100억원 이상일 때 => 콜옵션 가격 1.5이하 종목 중 제일 큰 금액인 종목을 callcode로 정의한 후 동 콜 종목을 매수한다. 3. 선물 챠트상 매도신호가 발생했고, 외국인 순매수금액(참조데이타 활용)이 -100억원 이하일 때 => 풋옵션 가격 1.5이하 종목 중 제일 큰 금액인 종목을 putcode로 정의한 후 동 풋 종목을 매수한다. 4. 선물 틱챠트에서 최근 틱봉 10개의 틱봉 평균완성시간을 알 수 있을까요? 5. 선물매수진입상태에서 직전 틱봉이 음봉이고, 고가 저가의 차이가 0.35이상이면 청산한다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-04-04 20:24:12

안녕하세요 예스스탁입니다. 4번의 경우에는 스팟에서 계산이 안됩니다. 해당 부분은 필요시 차트에서 지표로 계산해서 적용후에 스팟에서 지표값을 불러와 사용해야 합니다. input : P(10); var : ST(0),ET(0),Second(0),mav(0); var1 = TimeToMinutes(stime)*60; var2 = FracPortion(stime/100)*100;//시작시간 초 ST = var1+var2; value1 = TimeToMinutes(time)*60; value2 = FracPortion(time/100)*100;//&#44561;시간 초 ET = value1+value2; Second = ET-ST; mav = ma(Second,P); plot1(mav); 위식은 최근 10개봉의 평균완성시간을 리턴하는 지표입니다. 차트에 위 지표를 적용하고 스팟에서는 Chart1.GetIndicatorData(sIndicatorName, nPlotNum, nPlotIndex)함수로 값을 호출해 사용해야 합니다. 만약 지표이름이 "봉완성시간"이라면 Chart1.GetIndicatorData"봉완성시간",1,1) 과 같이 지정하시면 가장최근 완성봉 기준 값을 리턴받습니다. 1번,2번,3번,5번 내용은 아래식을 참고하시기 바랍니다. 현재 NH트레이더에는 정산금액이 없습니다 4월 중순경에 제공될 예정입니다. 예스스팟의 수식답변은 가이드식입니다. 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 옵션객체 추가 --> 속성에서 객체명은 Option, 주가지수옵션으로 지정 계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트와 동일아이디로 지정, 연결된 차트에는 외국인 순매수금액이 참조데이터(data2)로 추가되있어야 합니다. var CallCode,CallPrice; var PutCode,PutPrice; var pst; function Main_OnStart() { pst = 0; Main.SetTimer(1, 30000); //30초 주 } function Chart1_OnRiseSignal(Signal) { //매수신호 발생, 차트의 data2의 종가는 100이상 if (Signal.signalKind == 1 && Chart1.GetClose(2, 0) >= 100 ) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CC = []; var CP = []; for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 1.5) { CP[i+LNum] = Option.GetCurrent(0, i); CC[i+LNum] = Option.GetATMCallRecent(i); } else { CP[i+LNum] = -1; CC[i+LNum] = -1; } } CallPrice = -1; CallCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CP[i+LNum] > CallPrice) { CallPrice = CP[i+LNum]; CallCode = CC[i+LNum] } } if (CallPrice > 0) { pst = 1; Account1.OrderBuy(CallCode, 1, Option1.GetAsk(CallCode, 5),0); } } if (pst == 1 && Signal.signalKind == 2) { pst = 0; Account1.OrderSell(CallCode, 1, Option1.GetBid(CallCode, 5), 0); } //매도신호 발생, 차트의 data2의 종가는 -100이하 if (Signal.signalKind == 3 && Chart1.GetClose(2, 0) <= -100 ) { Start = -1 var UNum = Option.uppersATM; var LNum = Option.lowersATM; var PC = []; var PP = []; for (var i = -UNum; i <= LNum; i++) { if (Option.GetCurrent(0, i) <= 1.5) { PP[i+UNum] = Option.GetCurrent(1, i); PC[i+UNum] = Option.GetATMPutRecent(i); } else//0.7~2.9 사이가 아니면 { PP[i+UNum] = -1; PC[i+UNum] = -1; } } PutPrice = -1; PutCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PP[i+LNum] > PutPrice) { PutPrice = PP[i+LNum]; PutCode = PC[i+LNum] } } if (PutPrice > 0) { pst = -1; Account1.OrderBuy(PutCode, 1, Option1.GetAsk(PutCode, 5),0); } } if (pst == -1 && Signal.signalKind == 4) { pst = 0; Account1.OrderSell(PutCode, 1, Option1.GetBid(PutCode, 5), 0); } } //봉완성(다음봉시가수신) function Chart1_OnBarAppended(nData) { //매수진입중이고 완성봉이 음봉이고 고가-저가가 0.35이상이면 청산 if (nData == 1 && pst == 1 && Chart1.GetClose(1, 1) < Chart1.GetOpen(1, 1) && Chart1.GetHigh(1, 1) >= Chart1.GetLow(1, 1)+0.35) { pst = 0; Account1.OrderSell(CallCode, 1, Option1.GetBid(CallCode, 5), 0); } //매도진입중이고 완성봉이 양봉이고 고가-저가가 0.35이상이면 청산 if (nData == 1 && pst == -1 && Chart1.GetClose(1, 1) > Chart1.GetOpen(1, 1) && Chart1.GetHigh(1, 1) >= Chart1.GetLow(1, 1)+0.35) { pst = 0; Account1.OrderSell(PutCode, 1, Option1.GetBid(PutCode, 5), 0); } } function Main_OnTimer(nEventID) { //계좌 정산금액이 1천만 이하이면 계좌의 모든 종목 시장가로 청산 if (Account1.GetBalanceETCinfo(100) <= 10000000) { var num = Account1.GetTheNumberOfBalances(); for (i = 0; i < num; i++) { Account1.SetBalance(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0,1); } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0,1); } } } } 즐거운 하루되세요 > 지나리 님이 쓴 글입니다. > 제목 : 질문드립니다. > 안녕하세요. 아래의 명령을 수식으로 전환부탁드릴게요. 감사합니다. 1. 계좌의 잔고가 1천만원 이하면 보유 종목(코스피선물, 옵션)을 시장가로 바로 청산한다. 2. 선물 챠트상 매수신호가 발생했고, 외국인 순매수금액(참조데이타 활용)이 100억원 이상일 때 => 콜옵션 가격 1.5이하 종목 중 제일 큰 금액인 종목을 callcode로 정의한 후 동 콜 종목을 매수한다. 3. 선물 챠트상 매도신호가 발생했고, 외국인 순매수금액(참조데이타 활용)이 -100억원 이하일 때 => 풋옵션 가격 1.5이하 종목 중 제일 큰 금액인 종목을 putcode로 정의한 후 동 풋 종목을 매수한다. 4. 선물 틱챠트에서 최근 틱봉 10개의 틱봉 평균완성시간을 알 수 있을까요? 5. 선물매수진입상태에서 직전 틱봉이 음봉이고, 고가 저가의 차이가 0.35이상이면 청산한다.