커뮤니티

수식부탁합니다

프로필 이미지
팡팡
2015-04-08 08:52:49
1895
글번호 223404
답변완료
안녕하세요 아래 수식을 다음과 같이 변경하려고 합니다. 선물 매수 신호시; 콜옵션 ATM 매도, ATM-1 매수 / 풋옵션 ATM 매도, ATM+1 매수 청산 선물 매도 신호시; 풋옵션 ATM 매도, ATM+1 매수 / 콜옵션 ATM 매도, ATM-1 매수 청산 선진입한 콜, 풋의 잔고 청산하고 콜,풋 양쪽 포지션 없이 어느쪽이든 1개만 유지 진입 후 잔액대비 5% 손실 청산(로스컷) var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (Signal.signalKind == 1 ) { Start = 1; BuyCallCode = Option.GetATMCallRecent(0); BuyPutCode = Option.GetATMPutRecent(0); var BuyCallPrice = Option.GetAskByCode(BuyCallCode,2); var BuyPutPrice = Option.GetBidByCode(BuyPutCode,2); A1.OrderBuy(BuyCallCode, Vol, BuyCallPrice, 0); A1.OrderSell(BuyPutCode, Vol, BuyPutPrice, 0); Main.MessageLog("합성선물매수"); } if (Start == 1 && Signal.signalKind == 2 ) { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); var BxPutPrice = Option.GetAskByCode(BuyPutCode, 2); A1.OrderSell(BuyCallCode, Vol, BxCallPrice, 0); A1.OrderBuy(BuyPutCode, Vol, BxPutPrice, 0); Main.MessageLog("합성선물매수청산"); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellPutCode = Option.GetATMPutRecent(0); var SellCallPrice = Option.GetBidByCode(SellCallCode,2); var SellPutPrice = Option.GetAskByCode(SellPutCode,2); A1.OrderSell(SellCallCode, Vol, SellCallPrice , 0); A1.OrderBuy(SellPutCode, Vol, SellPutPrice, 0); Main.MessageLog("합성선물매도"); } if (Start == 1 && Signal.signalKind == 4 ) { var SxCallPrice = Option.GetAskByCode(SellCallCode, 2); var SxPutPrice = Option.GetBidByCode(SellPutCode, 2); A1.OrderBuy(SellCallCode, Vol, SxCallPrice, 0); A1.OrderSell(SellPutCode, Vol, SxPutPrice, 0); Main.MessageLog("합성선물매도청산"); } }
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2015-04-09 12:36:45

안녕하세요 예스스탁입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체화면에서 차트객체 추가 --> 객체명 C1, 차트와 같은 아이디 지정 계좌객체 추가 --> 객체명 A1, 계좌번호 지정 외부변수 추가 --> 변수명 Vol, 데이터형 숫자, 초기값에 진입수량지정 외부변수 추가 --> 변수명 loss, 데이터형 숫자, 초기값에 손실금액지정, 백만원이면 -1000000 var Start; var CallCode1,CallCode2; var PutCode1,PutCode2; function Main_OnStart() { Main.MessageList("시작"); //내부파일에 Start로 저장된 값 호출해 V에 저장 var V = Main.GetUserValue("Start"); //0이면 Start는 0 if (V == 0) Start = 0; //1이면 if (V == 1) { //Start는 1 Start = 1; //CallCode1에 내부파일 Code1에 저장된 값 호출해 저장 CallCode1 = Main.GetUserValue("Code1"); //CallCode2에 내부파일 Code2에 저장된 값 호출해 저장 CallCode2 = Main.GetUserValue("Code2"); } if (V == -1) { Start = 0; //Start는 -1 Start = 1; //PutCode1에 내부파일 Code1에 저장된 값 호출해 저장 PutCode1 = Main.GetUserValue("Code1"); //PutCode2에 내부파일 Code2에 저장된 값 호출해 저장 PutCode2 = Main.GetUserValue("Code2"); } Main.SetTimer(1, 5000);//5초간격 타이머 셋팅 } function C1_OnRiseSignal(Signal) { if (Signal.signalKind == 1 ) { Main.MessageList("매수신호발생"); Start = 1; CallCode1 = Option.GetATMCallRecent(0); CallCode2 = Option.GetATMCallRecent(-1); var CallPrice1 = Option.GetBidByCode(CallCode1,2); var CallPrice2 = Option.GetAskByCode(CallCode2,2); A1.OrderSell(CallCode1, Vol, CallPrice1, 0); A1.OrderBuy(CallCode2, Vol, CallPrice2, 0); //Start와 종목코드 저장 Main.SetUserValue("Start", Start); Main.SetUserValue("CallCode1", CallCode1); Main.SetUserValue("CallCode2", CallCode1); } if (Start == 1 && Signal.signalKind == 2 ) { Start = 0; Main.MessageList("매수청산발생"); var BxPrice1 = Option.GetAskByCode(CallCode1, 2); var BxPrice2 = Option.GetBidByCode(CallCode2, 2); A1.OrderBuy(CallCode1, Vol, BxPrice1, 0); A1.OrderSell(CallCode2, Vol, BxPrice2, 0); //저장값 초기화 Main.SetUserValue("Start", 0); Main.SetUserValue("Code1", " "); Main.SetUserValue("Code2", " "); } if (Signal.signalKind == 3 ) { Main.MessageList("매도신호발생"); Start = -1; PutCode1 = Option.GetATMPutRecent(0); PutCode2 = Option.GetATMPutRecent(1); var PutPrice1 = Option.GetBidByCode(PutCode1,2); var PutPrice2 = Option.GetAskByCode(PutCode2,2); A1.OrderSell(PutCode1, Vol, PutPrice1 , 0); A1.OrderBuy(PutCode2, Vol, PutPrice2, 0); //Start와 종목코드 저장 Main.SetUserValue("Start", Start); Main.SetUserValue("Code1", PutCode1); Main.SetUserValue("Code2", PutCode2); } if (Start == 1 && Signal.signalKind == 4 ) { Start = 0; Main.MessageList("매도청산발생"); var SxPrice1 = Option.GetAskByCode(PutCode1, 2); var SxPrice2 = Option.GetBidByCode(PutCode2, 2); A1.OrderBuy(PutCode1, Vol, SxPrice1, 0); A1.OrderSell(PutCode2, Vol, SxPrice2, 0); //저장값 초기화 Main.SetUserValue("Start", 0); Main.SetUserValue("Code1", " "); Main.SetUserValue("Code2", " "); } } //5초단위로 잔고 체크 function Main_OnTimer(nEventID) { var U1 = 0; var P1 = 0; var V1 = 0; var Z1 = 0; var U2 = 0; var P2 = 0; var V2 = 0; var Z2 = 0; //최근 buy발생상태이면 if (Start == 1) { A1.SetBalanceItem(CallCode1,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*500000; } A1.SetBalanceItem(CallCode2,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*500000; } if ((Z1+Z2) <= loss) { A1.OrderBuy(CallCode1, V1, Option.GetAskByCode(CallCode1, 2), 0); A1.OrderSell(CallCode2, V2, Option.GetBidByCode(CallCode2, 2), 0); Main.SetUserValue("Start", 0); Main.SetUserValue("Code1", " "); Main.SetUserValue("Code2", " "); } } //최근 SEll발생상태이면 if (Start == -1) { A1.SetBalanceItem(PutCode1,0); if (A1.Balance.count > 0 && A1.Balance.position == 1) { U1 = A1.Balance.avgUnitCost; P1 = A1.Balance.current; V1 = A1.Balance.count; Z1 = ((U1-P1)*V1)*500000; } A1.SetBalanceItem(PutCode2,0); if (A1.Balance.count > 0 && A1.Balance.position == 2) { U2 = A1.Balance.avgUnitCost; P2 = A1.Balance.current; V2 = A1.Balance.count; Z2 = ((P2-U2)*V2)*500000; } if ((Z1+Z2) <= loss) { Start = 0; A1.OrderBuy(PutCode1, V1, Option.GetAskByCode(PutCode1, 2), 0); A1.OrderSell(PutCode2, V2, Option.GetBidByCode(PutCode2, 2), 0); Main.SetUserValue("Start", 0); Main.SetUserValue("Code1", " "); Main.SetUserValue("Code2", " "); } } } 즐거운 하루되세요 > 팡팡 님이 쓴 글입니다. > 제목 : 수식부탁합니다 > 안녕하세요 아래 수식을 다음과 같이 변경하려고 합니다. 선물 매수 신호시; 콜옵션 ATM 매도, ATM-1 매수 / 풋옵션 ATM 매도, ATM+1 매수 청산 선물 매도 신호시; 풋옵션 ATM 매도, ATM+1 매수 / 콜옵션 ATM 매도, ATM-1 매수 청산 선진입한 콜, 풋의 잔고 청산하고 콜,풋 양쪽 포지션 없이 어느쪽이든 1개만 유지 진입 후 잔액대비 5% 손실 청산(로스컷) var Start; var BuyCallCode; var BuyPutCode; var SellCallCode; var SellPutCode; function Main_OnStart() { Main.MessageLog("시작"); Start = 0; } function C1_OnRiseSignal(Signal) { Main.MessageLog("신호완성/"+Signal.signalKind); if (Signal.signalKind == 1 ) { Start = 1; BuyCallCode = Option.GetATMCallRecent(0); BuyPutCode = Option.GetATMPutRecent(0); var BuyCallPrice = Option.GetAskByCode(BuyCallCode,2); var BuyPutPrice = Option.GetBidByCode(BuyPutCode,2); A1.OrderBuy(BuyCallCode, Vol, BuyCallPrice, 0); A1.OrderSell(BuyPutCode, Vol, BuyPutPrice, 0); Main.MessageLog("합성선물매수"); } if (Start == 1 && Signal.signalKind == 2 ) { var BxCallPrice = Option.GetBidByCode(BuyCallCode, 2); var BxPutPrice = Option.GetAskByCode(BuyPutCode, 2); A1.OrderSell(BuyCallCode, Vol, BxCallPrice, 0); A1.OrderBuy(BuyPutCode, Vol, BxPutPrice, 0); Main.MessageLog("합성선물매수청산"); } if (Signal.signalKind == 3 ) { Start = 1; SellCallCode = Option.GetATMCallRecent(0); SellPutCode = Option.GetATMPutRecent(0); var SellCallPrice = Option.GetBidByCode(SellCallCode,2); var SellPutPrice = Option.GetAskByCode(SellPutCode,2); A1.OrderSell(SellCallCode, Vol, SellCallPrice , 0); A1.OrderBuy(SellPutCode, Vol, SellPutPrice, 0); Main.MessageLog("합성선물매도"); } if (Start == 1 && Signal.signalKind == 4 ) { var SxCallPrice = Option.GetAskByCode(SellCallCode, 2); var SxPutPrice = Option.GetBidByCode(SellPutCode, 2); A1.OrderBuy(SellCallCode, Vol, SxCallPrice, 0); A1.OrderSell(SellPutCode, Vol, SxPutPrice, 0); Main.MessageLog("합성선물매도청산"); } }
프로필 이미지

팡팡

2015-04-23 21:55:37

팡팡 님에 의해 삭제된 답변입니다.