글 수정합니다.
다른 질문을 올립니다.
스팟 오류를 발견한것 같습니다.
제가 Win7과 WinXP에서 매매를 하고 잇는데요.
같은 스팟 수식과 변수 설정으로 해놧는데 Win7에서는 오류없이 돌아가는데 WinXP는 오류가 납니다.
수식은 선물신호를 받아서 옵션 매수를 하는 수식입니다.
아래와 같습니다.
=======================================================================
//계좌객체 추가 : Account1
//챠트객체 추가 : Chart1 //예트챠트명과 일치
//옵션데이타 추가 : Option
//입력변수 추가 : Near //숫자형, 진입하고자 하는 가까운 옵션값
//입력변수 추가 : Vol // 진입수량
var T;
var CC, CallOrderCode;
var PP, PutOrderCode;
var BC, BP;
function Main_OnStart()
{
T = 0;
Main.MessageList("옵션매수 전용시작");
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
T = 1;
Main.MessageList("Buy신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-Near);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//종목을 찾았으면
if (CC < 99999999)
{
BC = CallOrderCode;
Account1.OrderBuy(BC, Vol, Option.GetAskByCode(BC, 5), 0);
}
}
if (T == 1 && Signal.signalKind == 2)
{
T = 0;
Account1.OrderSell(BC, Vol, Option.GetBidByCode(BC, 5), 0);
Main.MessageList("ExitLong신호 발생");
}
if (Signal.signalKind == 3)
{
T = -1;
Main.MessageList("Sell신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-Near);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (PP < 99999999)
{
BP = PutOrderCode;
Account1.OrderBuy(BP, Vol, Option.GetAskByCode(BP, 5), 0);
}
}
if (T == -1 && Signal.signalKind == 4)
{
T = 0;
Account1.OrderSell(BP, Vol, Option.GetBidByCode(BP, 5), 0);
Main.MessageList("ExitShort신호 발생");
}
}
//동시호가 청산
function Main_OnStart()
{
Main.MessageLog("시작")
Main.SetTimer(3, 5000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 3 && HHMMDD >= 153600)
{
Main.KillTimer(3);
num = Account1.GetTheNumberOfBalances();
for(var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.position == 1)
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
if (Account1.Balance.position == 2)
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
===============================================================
모든 설정(차트객체, 계좌객체, 옵션객체, Near변수, Vol변수)을 양쪽 컴퓨터에 다 똑같이 했는데요 Win7에서는 정상 작동하고 WinXP에서는 Range Error: Invalid array length 에러가 납니다.
제가 XP 노트북에 자동주문을 틀어놓고 하는데요. 다른분들은 계속 수식이 정상작동 한다는데 저만 오류가 나서 Win7에 세팅을 하고 보니까 에러가 나지 않는 것입니다.
스팟 프로그램상의 오류가 아닌가 합니다. XP에서도 오류 안나게 할 수 있는 방법은 없나요? 이 컴퓨터에 여러가지 메크로 세팅등등을 해놔서 다른 컴퓨터에 또 세팅하는게 여간 힘든데....
답변 1
예스스탁
예스스탁 답변
2017-08-01 14:17:21
안녕하세요
예스스탁입니다.
윈도우 문제는 아닙니다.
프로그램 상단의 관리메뉴 --> 환경설정--> 예스스팟에서
옵션데이터(옵션객체)를 사용으로 설정하시면 됩니다.
기본은 미사용으로 되어 있습니다.
수식에서 배열변수의 사이즈를 옵션행사가의 갯수만큼 만들어 지게 되어 있는데
현재 옵션객체에 데이터가 제공되지 않아 배열길이 설정에 에러가 발생하는 것입니다.
즐거운 하루되세요
> 궁금궁금123 님이 쓴 글입니다.
> 제목 : (글수정) 스팟 오류인것 같습니다.
> 글 수정합니다.
다른 질문을 올립니다.
스팟 오류를 발견한것 같습니다.
제가 Win7과 WinXP에서 매매를 하고 잇는데요.
같은 스팟 수식과 변수 설정으로 해놧는데 Win7에서는 오류없이 돌아가는데 WinXP는 오류가 납니다.
수식은 선물신호를 받아서 옵션 매수를 하는 수식입니다.
아래와 같습니다.
=======================================================================
//계좌객체 추가 : Account1
//챠트객체 추가 : Chart1 //예트챠트명과 일치
//옵션데이타 추가 : Option
//입력변수 추가 : Near //숫자형, 진입하고자 하는 가까운 옵션값
//입력변수 추가 : Vol // 진입수량
var T;
var CC, CallOrderCode;
var PP, PutOrderCode;
var BC, BP;
function Main_OnStart()
{
T = 0;
Main.MessageList("옵션매수 전용시작");
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
T = 1;
Main.MessageList("Buy신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-Near);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var CC = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//종목을 찾았으면
if (CC < 99999999)
{
BC = CallOrderCode;
Account1.OrderBuy(BC, Vol, Option.GetAskByCode(BC, 5), 0);
}
}
if (T == 1 && Signal.signalKind == 2)
{
T = 0;
Account1.OrderSell(BC, Vol, Option.GetBidByCode(BC, 5), 0);
Main.MessageList("ExitLong신호 발생");
}
if (Signal.signalKind == 3)
{
T = -1;
Main.MessageList("Sell신호 발생");
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
var PutCode = new Array(UNum+LNum+1);
var PutPrice = new Array(UNum+LNum+1);
for (var i = -UNum; i <= LNum; i++)
{
PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-Near);
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var PP = 99999999;
PutOrderCode = "";
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] < PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
//종목을 찾았으면
if (PP < 99999999)
{
BP = PutOrderCode;
Account1.OrderBuy(BP, Vol, Option.GetAskByCode(BP, 5), 0);
}
}
if (T == -1 && Signal.signalKind == 4)
{
T = 0;
Account1.OrderSell(BP, Vol, Option.GetBidByCode(BP, 5), 0);
Main.MessageList("ExitShort신호 발생");
}
}
//동시호가 청산
function Main_OnStart()
{
Main.MessageLog("시작")
Main.SetTimer(3, 5000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 3 && HHMMDD >= 153600)
{
Main.KillTimer(3);
num = Account1.GetTheNumberOfBalances();
for(var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.position == 1)
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1);
if (Account1.Balance.position == 2)
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
===============================================================
모든 설정(차트객체, 계좌객체, 옵션객체, Near변수, Vol변수)을 양쪽 컴퓨터에 다 똑같이 했는데요 Win7에서는 정상 작동하고 WinXP에서는 Range Error: Invalid array length 에러가 납니다.
제가 XP 노트북에 자동주문을 틀어놓고 하는데요. 다른분들은 계속 수식이 정상작동 한다는데 저만 오류가 나서 Win7에 세팅을 하고 보니까 에러가 나지 않는 것입니다.
스팟 프로그램상의 오류가 아닌가 합니다. XP에서도 오류 안나게 할 수 있는 방법은 없나요? 이 컴퓨터에 여러가지 메크로 세팅등등을 해놔서 다른 컴퓨터에 또 세팅하는게 여간 힘든데....