커뮤니티

증거금 부족이 나옵니다.

프로필 이미지
nadogaja
2013-01-02 14:44:01
2261
글번호 221895
답변완료
예스스탁님이 올려주신 선물 신호 기준 옵션가격 3보다 작은 가격중 3에 가장 가까운 가격의 옵션종목을 매매하는 수식입니다. 여기서 실제 주문을 넣어보니 옵션이 아니라 선물 매매가 이루어 지는 듯합니다. 옵션 주문 코드를 따로 변수로 받아야 하는것인지. 어떤것이 잘못된것이지 설명과 함께 수정 부탁드립니다. . 실험 적용은 되는데 자동 매매시 증거금 부족으로 매매가 되지 않습니다. 현재 계좌에 미청산 계약이 있는관계로 매매는 되는 상황이지만 .실제 증거금은 약 300만원 정도만 계좌에 들어있습니다. 선물 챠트 기준으로 옵션을 거래하는 수식인데 거래 종목에는 선물로 잡히는거 같습니다. 옵션 수동 매매로는 주문이 되는 상황으로.. 증거금 문제는 아닌거 같은데.. 참고로 하이투자 사용하고 있습니다. 설명 부탁드립니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; function Main_OnStart() { Main.MessageLog("시작"); } //ATM-50~+50까지 종목중 0~3사이 종목을 제외하고 모두 -1처리 for(var i = -50; i <= 50; i++) { if (Option.GetCurrent(0,i) < 3 && Option.GetCurrent(0,i) > 0) { CPrice[50+i] = Option.GetCurrent(0,i); CCode[50+i] = Option.GetATMCallRecent(i); } else { CPrice[50+i] = -1; CCode[50+i] = -1; } if (Option.GetCurrent(1,i) < 3 && Option.GetCurrent(1,i) > 0) { PPrice[50+i] = Option.GetCurrent(1,i); PCode[50+i] = Option.GetATMPutRecent(i); } else { PPrice[50+i] = -1; PCode[50+i] = -1; } } //저장된 CPrice, PPrice값중 최고값 계산 MaxCall = -1; MaxCallcode = -1; MaxPut = -1; MaxPutcode = -1; for(var A = 0; A <= 100; A++) { if (CPrice[A] > MaxCall) { MaxCall = CPrice[A]; MaxCallcode = CCode[A]; } if (PPrice[A] > MaxPut) { MaxPut = PPrice[A]; MaxPutcode = PCode[A]; } } Main.MessageLog("콜가격:"+MaxCall+"종목코드:"+MaxCallcode); Main.MessageLog("풋가격:"+MaxPut+"종목코드:"+MaxPutcode); //-----아래 주문 부분만 수정해서 붙인겁니다. 옵션 코드를 MaxCallcode 로 넣었는데 // 이 부분이 적용이 안되고 선물로 주문이 들어가는것은 아닌지 생각됩니다... //증거금 부족액이 약 1400만원 정도로 잡히는데 제 계좌에 약 370만 있으니 증거금이 부 //족하다면 약 1200 만원 정도로 잡혀야 하는데.. // 수식이 잘못된거 같습니다. function c1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { a1.OrderBuy(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1) } if (Signal.signalKind == 2) { a1.OrderSell(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1) } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-01-03 15:54:45

안녕하세요 예스스탁입니다. 1. 기술된 식에서 MaxCallcode가 3.0이하의콜 종목중 가장 높은 종목의 종목코드가 저장된 변수입니다. GetATMCallRecent함수는 매개변수로 종목코드를 넣은 함수가 아닙니다. GetATMCallRecent(1) ATM+1단계 콜종목의 종목코드 GetATMCallRecent(-1) ATM-1단계 콜종목의 종목코드를 리턴해 주는 함수로 매개변수에 종목코드를 넣어 사용하는 함수가 아닙니다. 주문함수에 MaxCallcode만으로 지정하시면 됩니다. a1.OrderSell(MaxCallcode, 1, 0, 1) 2. 아래는 기존식보다 약간 짧게 작성된 식입니다. 식작성에 참고하시기 바랍니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; function c1_OnRiseSignal(Signal) { //ATM 위 행사가 갯수 UNum = Option.uppersATM; //ATM 위 행사가 갯수 LNum = Option.lowersATM; //배열변수 준비(가격, 종목코드) CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); //3.0이하의 가격을 가지는 콜종목은 해당 값과 종목코드 저장 //3.0을 초과하는 콜종목은 가격과 종목코드를 모두 -1 처리 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) <= 3.0) { CallPrice[i+LNum] = Option.GetCurrent(0, i); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = -1; CallCode[i+LNum] = -1; } Main.MessageLog(i+"콜종목코드:"+CallCode[i+LNum]+"/가격:"+CallPrice[i+LNum]); } //3.0이하의 가격을 가지는 풋종목은 해당 값과 종목코드 저장 //3.0을 초과하는 풋종목은 가격과 종목코드를 모두 -1 처리 for (var ii = -UNum; ii <= LNum; ii++) { if (Option.GetCurrent(1, ii) <= 3.0 ) { PutPrice[ii+UNum] = Option.GetCurrent(1, ii); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } else { PutPrice[ii+UNum] = -1; PutCode[ii+UNum] = -1; } Main.MessageLog(ii+"풋종목코드:"+PutCode[ii+UNum]+"/가격:"+PutPrice[ii+UNum]); } //각 배열에 저장된 값중 가장 큰 값을 찾음 var CC = -1; var CallOrderCode = -1; for (var iii = -LNum; iii <= UNum; iii++) { if (CallPrice[iii+LNum] > CC) { CC = CallPrice[iii+LNum]; CallOrderCode = CallCode[iii+LNum] } } var PP = -1; var PutOrderCode = -1; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] > PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } Main.MessageLog("--------------------------------------------"); Main.MessageLog("콜주문종목코드:"+CallOrderCode+"/가격:"+CC); Main.MessageLog("풋주문종목코드:"+PutOrderCode+"/가격:"+PP); if (Signal.signalKind == 1) { Main.OrderBuy(a1.number, CallOrderCode, 1, 0, 1); } } 즐거운 하루되세요 > nadogaja 님이 쓴 글입니다. > 제목 : 증거금 부족이 나옵니다. > 예스스탁님이 올려주신 선물 신호 기준 옵션가격 3보다 작은 가격중 3에 가장 가까운 가격의 옵션종목을 매매하는 수식입니다. 여기서 실제 주문을 넣어보니 옵션이 아니라 선물 매매가 이루어 지는 듯합니다. 옵션 주문 코드를 따로 변수로 받아야 하는것인지. 어떤것이 잘못된것이지 설명과 함께 수정 부탁드립니다. . 실험 적용은 되는데 자동 매매시 증거금 부족으로 매매가 되지 않습니다. 현재 계좌에 미청산 계약이 있는관계로 매매는 되는 상황이지만 .실제 증거금은 약 300만원 정도만 계좌에 들어있습니다. 선물 챠트 기준으로 옵션을 거래하는 수식인데 거래 종목에는 선물로 잡히는거 같습니다. 옵션 수동 매매로는 주문이 되는 상황으로.. 증거금 문제는 아닌거 같은데.. 참고로 하이투자 사용하고 있습니다. 설명 부탁드립니다. var CPrice = new Array(101); var CCode = new Array(101); var PPrice = new Array(101); var PCode = new Array(101); var MaxCall; var MaxCallCode; var MaxPut; var MaxPutCode; function Main_OnStart() { Main.MessageLog("시작"); } //ATM-50~+50까지 종목중 0~3사이 종목을 제외하고 모두 -1처리 for(var i = -50; i <= 50; i++) { if (Option.GetCurrent(0,i) < 3 && Option.GetCurrent(0,i) > 0) { CPrice[50+i] = Option.GetCurrent(0,i); CCode[50+i] = Option.GetATMCallRecent(i); } else { CPrice[50+i] = -1; CCode[50+i] = -1; } if (Option.GetCurrent(1,i) < 3 && Option.GetCurrent(1,i) > 0) { PPrice[50+i] = Option.GetCurrent(1,i); PCode[50+i] = Option.GetATMPutRecent(i); } else { PPrice[50+i] = -1; PCode[50+i] = -1; } } //저장된 CPrice, PPrice값중 최고값 계산 MaxCall = -1; MaxCallcode = -1; MaxPut = -1; MaxPutcode = -1; for(var A = 0; A <= 100; A++) { if (CPrice[A] > MaxCall) { MaxCall = CPrice[A]; MaxCallcode = CCode[A]; } if (PPrice[A] > MaxPut) { MaxPut = PPrice[A]; MaxPutcode = PCode[A]; } } Main.MessageLog("콜가격:"+MaxCall+"종목코드:"+MaxCallcode); Main.MessageLog("풋가격:"+MaxPut+"종목코드:"+MaxPutcode); //-----아래 주문 부분만 수정해서 붙인겁니다. 옵션 코드를 MaxCallcode 로 넣었는데 // 이 부분이 적용이 안되고 선물로 주문이 들어가는것은 아닌지 생각됩니다... //증거금 부족액이 약 1400만원 정도로 잡히는데 제 계좌에 약 370만 있으니 증거금이 부 //족하다면 약 1200 만원 정도로 잡혀야 하는데.. // 수식이 잘못된거 같습니다. function c1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { a1.OrderBuy(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1) } if (Signal.signalKind == 2) { a1.OrderSell(Option.GetATMCallRecent(MaxCallcode), 1, 0, 1) } }