커뮤니티

수식 부탁 드립니다.

프로필 이미지
dandy
2016-08-10 10:52:03
1373
글번호 223958
답변완료
안녕하세요. 연결선물 분봉 틱봉 당일청산 피라미딩 시스템수식의 모든 신호(매수진입, 매도진입, 매수피라이딩진입, 매도피라 미딩진입, 매수 매도 분할청산, 매수 매도 손절청산, 매수 매도 수익청산, 당일청산 등등) 에 따라 옵션매수로 피라미딩 진입 청산되는 스팟수식 요청드립니다. ( 옵션 종목 선택은 3.0 이하 1.0 이상 종목 중 3.0 에 가장 근접한 종목으로 100% 누락없이 진입 당일청산 ) 선물매수신호->콜매수/선물피라미딩매수신호->콜피라미딩매수/선물매수 피라미딩매수청산신호->콜매수 청산 선물매도신호->풋매수/선물피라미딩매도신호->풋피라미딩매수/선물매도 피라미딩매도청산신호->풋매수 청산 var EntryVol = 1; // 진입수량 변수 추가 var SystemName = "DY01"; // 콜 풋 진입, 청산명 MessageLog 추가 var OpPrice = 3.0; // 진입 가격대 선택 변수 추가 (OpPrice 이하 종목중 OpPrice 3.0에 가장 근접한 가격) var LowPrice = 1.0; // 진입 가격대 선택 변수 추가 (LowPrice 1.0 이상 종목중 OpPrice 3.0 에 가장 근접한 가격) 스팟수식 요청드립니다. (상세한 주석 부탁 드립니다.)
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-08-23 15:29:00

안녕하세요 예스스탁입니다. 1 스팟의 수식답변은 가이드 정도의 답변만 해드립니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 2 var SystemName = "DY01"; 는 수식에서 사용할부분이 없어 제외했습니다 차트에 시스템 적용하고 차트객체 연결해 사용하시면 됩니다. 3 스크립트 객체설정 계좌객체 Accoun1 옵션객체 Option1 차트객체 Chart1 var CallOrderCode,PutOrderCode; var EntryVol = 1; // 진입수량 변수 추가 var OpPrice = 3.0; // 진입 가격대 선택 변수 추가 (OpPrice 이하 종목중 OpPrice 3.0에 가장 근접한 가격) var LowPrice = 1.0; // 진입 가격대 선택 변수 추가 (LowPrice 1.0 이상 종목중 OpPrice 3.0 에 가장 근접한 가격) function Main_OnStart() { Main.MessageList("시작"); T = 0;//스팟시작시는 0 } function Chart1_OnRiseSignal(Signal) { //차트에서 Buy신호 발생 if (Signal.signalKind == 1) { //T가 0이하 일&#46468;만 콜종목 찾음 즉 첫매수신호일때만 종목선정해서 //피라미딩신호에는 이전 찾은 종목으로 주문내게 함 if (T <= 0) { T = 1; //ATM위 행사가 갯수 var UNum = Option1.uppersATM; //ATM아래 행사가 갯수 var LNum = Option1.lowersATM; //각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언 var CallCode = []; //각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언 var CallPrice = []; //콜종목 찾기 //콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로 //for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함 for (var i = -LNum; i <= UNum; i++) { //값이 1.0~3.0사이이면 if (Option1.GetCurrent(0, i) <= OpPrice && Option1.GetCurrent(0, i) >= LowPrice ) { //해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장 CallPrice[i+LNum] = Option1.GetCurrent(0, i); //해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장 CallCode[i+LNum] = Option1.GetATMCallRecent(i); //주의 //배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터 //저장하도록 작성해야 함 } else//3.0보다 크거나 1.0 미만이면 { //배열변수 CallPrice의 방번호 i+LNum에 -1 저장 CallPrice[i+LNum] = -1; //배열변수 CallCode의 방번호 i+LNum에 -1 저장 CallCode[i+LNum] = -1; } } //배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고 //CallCode의 동일 방번호의 값을 CallOrderCode에 저장 var CC = -1; CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] > CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } } //콜종목을 찾았으면 if (CC > 0) { Account1.OrderBuy(CallOrderCode, 1, Option1.GetAsk(CallOrderCode, 5),0); } } //차트에서 Exitlong신호 발생 if (T == 1 && Signal.signalKind == 2) { T = 0; //미체결중 CallOrderCode로 매수된 주문은 모두 취소 var unf = Account1.GetTheNumberOfUnfills(); for (i = 0; i < unf; i++) { Account1.SetUnfill(i); if (Account1.Unfill.code == CallOrderCode && Account1.Unfill.orderKind == 2) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고에 있는 만큼만 청산 Account1.SetBalance(CallOrderCode,0) if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBid(Account1.Balance.code, 5),0); } } //차트에서 Sell신호 발생 if (Signal.signalKind == 3) { //T가 0이상 일&#46468;만 풋종목 찾음, 즉 첫매도신호일때만 종목선정해서 //피라미딩신호에는 이전 찾은 종목으로 주문내게 함 if (T >= 0) { T = -1; //ATM위 행사가 갯수 var UNum = Option1.uppersATM; //ATM아래 행사가 갯수 var LNum = Option1.lowersATM; //각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언 var PutCode = new Array(UNum+LNum+1); //각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언 var PutPrice = new Array(UNum+LNum+1); //풋종목 찾기 //풋옵션은 ATM기준 아래 행사가가 +단계, 위가 -단계이므로 //for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함 for (var i = -UNum; i <= LNum; i++) { //값이 1.0~3.0 사이이면 if (Option1.GetCurrent(1, i) <= OpPrice && Option1.GetCurrent(1, i) >= LowPrice ) { //해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장 PutPrice[i+UNum] = Option1.GetCurrent(1, i); //해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장 PutCode[i+UNum] = Option1.GetATMPutRecent(i); } else //3.0보다 크거나 1.0 미만 { //배열변수 PutPrice의 방번호 ii+LNum에 -1 저장 PutPrice[i+UNum] = -1; //배열변수 PutCode의 방번호 ii+LNum에 -1 저장 PutCode[i+UNum] = -1; } } //배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고 //PutCode의 동일 방번호의 값을 PutOrderCode에 저장 var PP = -1; PutOrderCode = -1; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] > PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } } //풋종목을 찾았으면 if (PP > 0) { Account1.OrderBuy(PutOrderCode, 1, Option1.GetAsk(PutOrderCode, 5),0); } } //차트에서 Exitshort신호 발생 if (T == -1 && Signal.signalKind == 4) { T = 0; //미체결중 PutOrderCode로 매수된 주문은 모두 취소 var unf = Account1.GetTheNumberOfUnfills(); for (i = 0; i < unf; i++) { Account1.SetUnfill(i); if (Account1.Unfill.code == PutOrderCode && Account1.Unfill.orderKind == 2) { Account1.OrderCancel(Account1.Unfill.orderNum); } } //잔고에 있는 만큼만 청산 Account1.SetBalance(PutOrderCode,0) if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, Option1.GetBid(Account1.Balance.code, 5),0); } } } 즐거운 하루되세요 > dandy 님이 쓴 글입니다. > 제목 : 수식 부탁 드립니다. > 안녕하세요. 연결선물 분봉 틱봉 당일청산 피라미딩 시스템수식의 모든 신호(매수진입, 매도진입, 매수피라이딩진입, 매도피라 미딩진입, 매수 매도 분할청산, 매수 매도 손절청산, 매수 매도 수익청산, 당일청산 등등) 에 따라 옵션매수로 피라미딩 진입 청산되는 스팟수식 요청드립니다. ( 옵션 종목 선택은 3.0 이하 1.0 이상 종목 중 3.0 에 가장 근접한 종목으로 100% 누락없이 진입 당일청산 ) 선물매수신호->콜매수/선물피라미딩매수신호->콜피라미딩매수/선물매수 피라미딩매수청산신호->콜매수 청산 선물매도신호->풋매수/선물피라미딩매도신호->풋피라미딩매수/선물매도 피라미딩매도청산신호->풋매수 청산 var EntryVol = 1; // 진입수량 변수 추가 var SystemName = "DY01"; // 콜 풋 진입, 청산명 MessageLog 추가 var OpPrice = 3.0; // 진입 가격대 선택 변수 추가 (OpPrice 이하 종목중 OpPrice 3.0에 가장 근접한 가격) var LowPrice = 1.0; // 진입 가격대 선택 변수 추가 (LowPrice 1.0 이상 종목중 OpPrice 3.0 에 가장 근접한 가격) 스팟수식 요청드립니다. (상세한 주석 부탁 드립니다.)