커뮤니티

수식부탁드립니다.

프로필 이미지
dandy
2019-10-08 09:11:48
3282
글번호 225031
답변완료
안녕하세요. 작성해주신 아래 수식을 연결선물 차트에서 당일 첫진입신호(매수 또는 매도)가 발생하면 옵션당일행사가 콜매수 1개, 옵션당일행사가 풋매수 2개 옵션당일행사가+3호가위 콜매도 3개, 진입하고 당일 청산신호(매수 또는 매도)가 발생하면 전량청산하고 당일 매매 종료하는 수식으로 변경 요청드립니다. 감사합니다. ----------------------------------------------------------------------------------- 안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 신호발생시 주문까지만 작성해 드립니다. 지정가 주문에 대해 미체결 해소는 방법을 모르겠습니다. 해당 부분은 사용자분이 구상하셔서 추가해 보셔야 합니다. 옵션 종류는 옵션객체 속성에서 지정하시면 됩니다. 스크립트 객체설정 차트객체추가 --> 객체명 Chart1, 차트아이디 연결 옵션객체추가 --> 객체명 Option1, 일반이나 미니옵션 중 선택 계좌객체추가 --> 객체명 Account1, 계좌번호지정 var T; var Put1,Put2,Put3,BEP1,BEP2,BEP3,BXP1,BXP2,BXP3; var Call1,Call,Call3,SEP1,SEP2,SEP3,SXP1,SXP2,SXP3; function Main_OnStart() { T = 0; } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 1) { //T는 1 T = 1; //풋등가부터 아래 행사가 총 3개 지정 Put1 = Option1.GetATMPutRecent(0); Put2 = Option1.GetATMPutRecent(1); Put3 = Option1.GetATMPutRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BEP1 = Option1.GetCurrent(Put1); BEP2 = Option1.GetCurrent(Put2); BEP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Put1,i) > 0) BEP1 = Option1.GetBid(Put1,i); if (Option1.GetAsk(Put2,i) > 0) BEP2 = Option1.GetAsk(Put2,i); if (Option1.GetBid(Put3,i) > 0) BEP3 = Option1.GetBid(Put3,i); } //각 가격이 0이상이면 주문 if (BEP1 > 0) Account1.OrderSell(Put1, 2,BEP1,0); if (BEP2 > 0) Account1.OrderBuy(Put2,3, BEP2, 0); if (BEP3 > 0) Account1.OrderSell(Put3,4, BEP3, 0); } //매수청산 신호 발생 if (T == 1 && Signal.signalKind == 2) { //T는 2 T = 2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BXP1 = Option1.GetCurrent(Put1); BXP2 = Option1.GetCurrent(Put2); BXP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Put1,i) > 0) { BXP1 = Option1.GetAsk(Put1,i); } if (Option1.GetBid(Put2,i) > 0) { BXP2 = Option1.GetBid(Put2,i); } if (Option1.GetAsk(Put3,i) > 0) { BXP3 = Option1.GetAsk(Put3,i); } } //각 가격이 0이상이면 주문 if (BXP1 > 0) Account1.OrderBuy(Put1, 2,BXP1,0); if (BXP2 > 0) Account1.OrderSell(Put2,3, BXP2, 0); if (BXP3 > 0) Account1.OrderBuy(Put3,4, BXP3, 0); } //매도진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 3) { T = -1; //콜등가부터 위 행사가 총 3개 지정 Call1 = Option1.GetATMCallRecent(0); Call2 = Option1.GetATMCallRecent(1); Call3 = Option1.GetATMCallRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SEP1 = Option1.GetCurrent(Call1); SEP2 = Option1.GetCurrent(Call2); SEP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Call1,i) > 0) SEP1 = Option1.GetBid(Call1,i); if (Option1.GetAsk(Call2,i) > 0) SEP2 = Option1.GetAsk(Call2,i); if (Option1.GetBid(Call3,i) > 0) SEP3 = Option1.GetBid(Call3,i); } //각 가격이 0이상이면 주문 if (SEP1 > 0) Account1.OrderSell(Call1, 2,SEP1,0); if (SEP2 > 0) Account1.OrderBuy(Call2,3, SEP2, 0); if (SEP3 > 0) Account1.OrderSell(Call3,4, SEP3, 0); } //매도청산 신호 발생 if (T == -1 && Signal.signalKind == 4) { //T는 -2 T = -2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SXP1 = Option1.GetCurrent(Call1); SXP2 = Option1.GetCurrent(Call2); SXP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Call1,i) > 0) { SXP1 = Option1.GetAsk(Call1,i); } if (Option1.GetBid(Call2,i) > 0) { SXP2 = Option1.GetBid(Call2,i); } if (Option1.GetAsk(Call3,i) > 0) { SXP3 = Option1.GetAsk(Call3,i); } } //각 가격이 0이상이면 주문 if (SXP1 > 0) Account1.OrderBuy(Call1, 2,SXP1,0); if (SXP2 > 0) Account1.OrderSell(Call2,3, SXP2, 0); if (SXP3 > 0) Account1.OrderBuy(Call3,4, SXP3, 0); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2019-10-18 15:49:57

안녕하세요 예스스탁입니다. var T; var BS1,BS2,BS3,BP1,BP2,BP3,BXP1,BXP2,BXP3; var SS1,SS2,SS3,SP1,SP2,SP3,SXP1,SXP2,SXP3; function Main_OnStart() { T = 0; } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 1) { //T는 1 T = 1; BS1 = Option1.GetATMCallRecent(0); BS2 = Option1.GetATMPutRecent(0); BS3 = Option1.GetATMCallRecent(3); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BP1 = Option1.GetCurrent(BS1); BP2 = Option1.GetCurrent(BS2); BP3 = Option1.GetCurrent(BS3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(BS1,i) > 0) BEP1 = Option1.GetAsk(BS1,i); if (Option1.GetAsk(BS2,i) > 0) BEP2 = Option1.GetAsk(BS2,i); if (Option1.GetBid(BS3,i) > 0) BEP3 = Option1.GetBid(BS3,i); } //각 가격이 0이상이면 주문 if (BP1 > 0) Account1.OrderBuy(BS1,1,BP1,0); if (BP2 > 0) Account1.OrderBuy(BS2,2, BP2, 0); if (BP3 > 0) Account1.OrderSell(BS3,3,BP3, 0); } //매수청산 신호 발생 if (T == 1 && Signal.signalKind == 2) { //T는 2 T = 2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BXP1 = Option1.GetCurrent(Put1); BXP2 = Option1.GetCurrent(Put2); BXP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(BS1,i) > 0) { BXP1 = Option1.GetAsk(BS1,i); } if (Option1.GetBid(BS2,i) > 0) { BXP2 = Option1.GetBid(BS2,i); } if (Option1.GetAsk(BS3,i) > 0) { BXP3 = Option1.GetAsk(BS3,i); } } //각 가격이 0이상이면 주문 if (BXP1 > 0) Account1.OrderSell(BS1, 1,BXP1,0); if (BXP2 > 0) Account1.OrderSell(Bs2,2, BXP2, 0); if (BXP3 > 0) Account1.OrderBuy(BS3,3, BXP3, 0); } //매도진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 3) { T = -1; SS1 = Option1.GetATMCallRecent(0); SS2 = Option1.GetATMPutRecent(0); SS3 = Option1.GetATMCallRecent(3); SP1 = Option1.GetCurrent(S1); SP2 = Option1.GetCurrent(S2); SP3 = Option1.GetCurrent(S3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(SS1,i) > 0) SP1 = Option1.GetAsk(SS1,i); if (Option1.GetAsk(SS2,i) > 0) SP2 = Option1.GetAsk(SS2,i); if (Option1.GetBid(SS3,i) > 0) SP3 = Option1.GetBid(SS3,i); } //각 가격이 0이상이면 주문 if (SP1 > 0) Account1.OrderBuy(SS1,1,SP1,0); if (SP2 > 0) Account1.OrderBuy(SS2,2,SP2, 0); if (SP3 > 0) Account1.OrderSell(SS3,3,SP3, 0); } //매도청산 신호 발생 if (T == -1 && Signal.signalKind == 4) { //T는 -2 T = -2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SXP1 = Option1.GetCurrent(SS1); SXP2 = Option1.GetCurrent(SS2); SXP3 = Option1.GetCurrent(SS3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Call1,i) > 0) { SXP1 = Option1.GetBid(Call1,i); } if (Option1.GetBid(Call2,i) > 0) { SXP2 = Option1.GetBid(Call2,i); } if (Option1.GetAsk(Call3,i) > 0) { SXP3 = Option1.GetAsk(Call3,i); } } //각 가격이 0이상이면 주문 if (SXP1 > 0) Account1.OrderSell(SS1, 1,SXP1,0); if (SXP2 > 0) Account1.OrderSell(SS2,2, SXP2, 0); if (SXP3 > 0) Account1.OrderBuy(SS3,3, SXP3, 0); } } 즐거운 하루되세요 > dandy 님이 쓴 글입니다. > 제목 : 수식부탁드립니다. > 안녕하세요. 작성해주신 아래 수식을 연결선물 차트에서 당일 첫진입신호(매수 또는 매도)가 발생하면 옵션당일행사가 콜매수 1개, 옵션당일행사가 풋매수 2개 옵션당일행사가+3호가위 콜매도 3개, 진입하고 당일 청산신호(매수 또는 매도)가 발생하면 전량청산하고 당일 매매 종료하는 수식으로 변경 요청드립니다. 감사합니다. ----------------------------------------------------------------------------------- 안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 신호발생시 주문까지만 작성해 드립니다. 지정가 주문에 대해 미체결 해소는 방법을 모르겠습니다. 해당 부분은 사용자분이 구상하셔서 추가해 보셔야 합니다. 옵션 종류는 옵션객체 속성에서 지정하시면 됩니다. 스크립트 객체설정 차트객체추가 --> 객체명 Chart1, 차트아이디 연결 옵션객체추가 --> 객체명 Option1, 일반이나 미니옵션 중 선택 계좌객체추가 --> 객체명 Account1, 계좌번호지정 var T; var Put1,Put2,Put3,BEP1,BEP2,BEP3,BXP1,BXP2,BXP3; var Call1,Call,Call3,SEP1,SEP2,SEP3,SXP1,SXP2,SXP3; function Main_OnStart() { T = 0; } function Chart1_OnRiseSignal(Signal) { //매수진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 1) { //T는 1 T = 1; //풋등가부터 아래 행사가 총 3개 지정 Put1 = Option1.GetATMPutRecent(0); Put2 = Option1.GetATMPutRecent(1); Put3 = Option1.GetATMPutRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BEP1 = Option1.GetCurrent(Put1); BEP2 = Option1.GetCurrent(Put2); BEP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Put1,i) > 0) BEP1 = Option1.GetBid(Put1,i); if (Option1.GetAsk(Put2,i) > 0) BEP2 = Option1.GetAsk(Put2,i); if (Option1.GetBid(Put3,i) > 0) BEP3 = Option1.GetBid(Put3,i); } //각 가격이 0이상이면 주문 if (BEP1 > 0) Account1.OrderSell(Put1, 2,BEP1,0); if (BEP2 > 0) Account1.OrderBuy(Put2,3, BEP2, 0); if (BEP3 > 0) Account1.OrderSell(Put3,4, BEP3, 0); } //매수청산 신호 발생 if (T == 1 && Signal.signalKind == 2) { //T는 2 T = 2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 BXP1 = Option1.GetCurrent(Put1); BXP2 = Option1.GetCurrent(Put2); BXP3 = Option1.GetCurrent(Put3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Put1,i) > 0) { BXP1 = Option1.GetAsk(Put1,i); } if (Option1.GetBid(Put2,i) > 0) { BXP2 = Option1.GetBid(Put2,i); } if (Option1.GetAsk(Put3,i) > 0) { BXP3 = Option1.GetAsk(Put3,i); } } //각 가격이 0이상이면 주문 if (BXP1 > 0) Account1.OrderBuy(Put1, 2,BXP1,0); if (BXP2 > 0) Account1.OrderSell(Put2,3, BXP2, 0); if (BXP3 > 0) Account1.OrderBuy(Put3,4, BXP3, 0); } //매도진입신호 발생(T가 0일때만) if (T == 0 && Signal.signalKind == 3) { T = -1; //콜등가부터 위 행사가 총 3개 지정 Call1 = Option1.GetATMCallRecent(0); Call2 = Option1.GetATMCallRecent(1); Call3 = Option1.GetATMCallRecent(2); //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SEP1 = Option1.GetCurrent(Call1); SEP2 = Option1.GetCurrent(Call2); SEP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetBid(Call1,i) > 0) SEP1 = Option1.GetBid(Call1,i); if (Option1.GetAsk(Call2,i) > 0) SEP2 = Option1.GetAsk(Call2,i); if (Option1.GetBid(Call3,i) > 0) SEP3 = Option1.GetBid(Call3,i); } //각 가격이 0이상이면 주문 if (SEP1 > 0) Account1.OrderSell(Call1, 2,SEP1,0); if (SEP2 > 0) Account1.OrderBuy(Call2,3, SEP2, 0); if (SEP3 > 0) Account1.OrderSell(Call3,4, SEP3, 0); } //매도청산 신호 발생 if (T == -1 && Signal.signalKind == 4) { //T는 -2 T = -2; //매수주문할 종목은 매도 1~5호가 중 잔량있는 가격에서 가장 높은 호가 //매도주문할 종목은 매수 1~5호가 중 잔량있는 가격에서 가장 낮은 호가 SXP1 = Option1.GetCurrent(Call1); SXP2 = Option1.GetCurrent(Call2); SXP3 = Option1.GetCurrent(Call3); for (var i = 1; i <= 5; i++) { if (Option1.GetAsk(Call1,i) > 0) { SXP1 = Option1.GetAsk(Call1,i); } if (Option1.GetBid(Call2,i) > 0) { SXP2 = Option1.GetBid(Call2,i); } if (Option1.GetAsk(Call3,i) > 0) { SXP3 = Option1.GetAsk(Call3,i); } } //각 가격이 0이상이면 주문 if (SXP1 > 0) Account1.OrderBuy(Call1, 2,SXP1,0); if (SXP2 > 0) Account1.OrderSell(Call2,3, SXP2, 0); if (SXP3 > 0) Account1.OrderBuy(Call3,4, SXP3, 0); } }