커뮤니티

스팟 주문오류입니다,.

프로필 이미지
nadogaja
2013-01-04 12:41:17
2566
글번호 221908
답변완료
예스트레이더 로는 시스템 매매가 가능한 상태입니다. 하지만 예스스팟으로 주문할시 증거금 부족으로 나옵니다.. 왜그런가요. . <오류메시지> [cd_ord_normal]부족액 위탁:16801980, 현금:16801980: sqlnum 20003 매수<0000-0000-00> 종목:KR4201H12703 수량:1 가격:0.00 주문유형 : 시장가 <적용 수식> 선물챠트 객체에서 신호를 받아와서 atm 옵션 가격중 1보다 작고 가장 근접한 옵션 을 매수 청산 하는 식을 시험 하려고 스팟 자동 매매로 돌려보니... 증거금 부족메시지가 나옵니다 현재 증거금은 2백 정도만 들어가 있는 상태로.. 미결제 계약을 항상 1개 를 남겨 두기에 .. 시스템 매매 거래 가능한 상태입니다.메시지를 분석해 보니.. 옵션 종목으로 매매가 이루어지는 것은 맞는거 같은데.. 증거금 부족 때문인지 아니면.... 다른 이유가 있는것이인지 알려주세요. <수식내용> 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) <= 1.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); } if (Signal.signalKind == 2) { Main.OrderSell(a1.number, CallOrderCode, 1, 0, 1); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2013-01-04 14:34:16

> nadogaja 님이 쓴 글입니다. > 제목 : 스팟 주문오류입니다,. > 예스트레이더 로는 시스템 매매가 가능한 상태입니다. 하지만 예스스팟으로 주문할시 증거금 부족으로 나옵니다.. 왜그런가요. . <오류메시지> [cd_ord_normal]부족액 위탁:16801980, 현금:16801980: sqlnum 20003 매수<0000-0000-00> 종목:KR4201H12703 수량:1 가격:0.00 주문유형 : 시장가 <적용 수식> 선물챠트 객체에서 신호를 받아와서 atm 옵션 가격중 1보다 작고 가장 근접한 옵션 을 매수 청산 하는 식을 시험 하려고 스팟 자동 매매로 돌려보니... 증거금 부족메시지가 나옵니다 현재 증거금은 2백 정도만 들어가 있는 상태로.. 미결제 계약을 항상 1개 를 남겨 두기에 .. 시스템 매매 거래 가능한 상태입니다.메시지를 분석해 보니.. 옵션 종목으로 매매가 이루어지는 것은 맞는거 같은데.. 증거금 부족 때문인지 아니면.... 다른 이유가 있는것이인지 알려주세요. <수식내용> 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) <= 1.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); } if (Signal.signalKind == 2) { Main.OrderSell(a1.number, CallOrderCode, 1, 0, 1); } }