예스트레이더 로는 시스템 매매가 가능한 상태입니다.
하지만 예스스팟으로 주문할시 증거금 부족으로 나옵니다..
왜그런가요.
.
<오류메시지>
[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);
}
}