답변완료
변수조합하여 일괄처리
안녕하세요. 늘 수고하십니다.
질문이 있어 이렇게 또 글을 올립니다.
미리 감사하구요 ^^
질문1: 스팟의 종목개체를 추가하여 , 객체명은 Stock1 ~ Stock10 이렇게 만들고
이 종목의 현재가를 for로 처리하여 배열에 저장하는 수식을 만들려고 했는데
변수에 저장하면 문자열로 인식하여 제대로 작동을 하지 않는것 같네요.
이처럼 일괄로 처리하려면 어떻게 하는지 궁금합니다.
S_CurPrc = new Array(20);
var Adder;
function Main_OnStart()
{
for(i=1; i<=10; i++)
{
Adder = 'Stock'+ i +'.' + 'current';
S_CurPrc[i] = Adder;
S_CurPrc[19] = Stock1.current;
Main.MessageList("조합 i",i, "Adder",Adder
,"S_CurPrc",S_CurPrc[i],"S_CurPrc[19]",S_CurPrc[19]
);
}
}
질문2: 데이터 베이스 처리문제
스팟의 메뉼얼을 보고 선물의 현재가를 MS-SQL 처리 하였는데, 이를 다음을 이용하여
처리하여 배열에 저장할 수 있는지 궁금합니다.
GetFieldValue(nIndex)
설 명 : 현재 레코드의 각 필드별 데이터를 반환합니다.
반 환 값 : 문자열
매개변수 : nIndex – 정수, 필드의 인덱스를 입력합니다.
2013-09-27
902
글번호 222594
답변완료
트레일링 문의 드립니다.
밑에 수식에서 지속적으로 트레일링을 작동 시킬려면 어떻게 해야되나요?
처음 실행할때만 작동이되고 지속적으로 작동이 안되는거 같아서요. ㅜㅜ
var Nth = 0;
var ItemCode = [];
var ItemObject = [];
var ItemHigh = [];
var Bnum;
function Main_OnStart()
{
Nth = 0;
Bnum = Account1.GetTheNumberOfBalances()
Main.MessageList("잔고종목수",Bnum);
if (Bnum > 0)
{
//계좌의 잔고리스트에서 첫번째 잔고 셋팅
Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//1번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
//요청한 종목객체 수신되면
function Main_OnRcvMarketData(MarketData)
{
Main.MessageList("종목객체수신",MarketData.code);
//수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에
if (MarketData.code == ItemCode[Nth])
{
ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장
ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수)
Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemObject[Nth].code);
//순번은 1 증가
Nth = Nth+1;
//종목객체 수신완료되면 다음 종목 종목객체 요청
if (Bnum > 0)
{
//계좌의 잔고리스트에서 다음 순번 잔고 셋팅
Account1.SetBalanceIndex(Nth);
//셋팅된 잔고의 수량이 0이상이면
if (Account1.Balance.count > 0)
{
//Nth번째 종목객체 생성요청
Main.ReqMarketData(Account1.Balance.code, 0,0);
//ItemCode의 [Nth]번째 방에 종목코드 저장
ItemCode[Nth] = Account1.Balance.code;
Main.MessageList("종목객체요청",Account1.Balance.code);
}
}
}
}
수식이 써지지 않아 첨부했습니다. ^^;;;;
2013-09-30
852
글번호 222593
답변완료
시세조회 건수제한 오류
매매 시작하기 전에 약 30~80 개의 관종 종목의 maketdata를 추가하는 것으로 프로그램을 짰는데, 갑자기 시세조회 건수제한 오류(15초당 60건만 가능합니다. 15초 남았습니다.)라고 뜨고 marketdata가 추가가 안되는 것 같네요. 이제 컴퓨터로 for loop을 이용해서 다량의 marketdata를 추가하는 것이 불가능한건가요? 그렇게 되면,, 이 프로그램 쓸 이유가 없어지게 되는데,, 생각보다 이 hts는 많은 제약이 있어서 아쉽네요. 전략 생성의 간편함으로 예스스팟을 많이 용했는데, 생각보다 많은 제약이 있어서 다른 api를 찾아서 사용하는 것이 더 이로울 것 같네요...
2013-09-22
544
글번호 222584
답변완료
파일쓰기와 읽기
수고 하십니다. 항상 멋진 프로그램 사용하는 재미에 푹빠져 있어 즐겁네요.
즐거운 추석되시고, 늘 건강하세요
예스 스팟의 Q& 게시판에 예스스탁의 답변중에 파일에 로그를 남기고, 이후 다시 불러 올 수 있다고 설명하셨는데
질문) 선물의 체결시간,현재가, 거래량을 파일에 저장하고 , 이 값을 배열에불러와 저장하고 출력하는 예문 부탁드립니다.
function Main_OnStart()
{
var Test;
testArr = new Array(100);
// 단순 저장후 출력
Main.SetUserValue("buy",Futures.current);
Test =Main.GetUserValue("buy");
Main.MessageList("Test:저장후 호출",Test);
// 파일에 저장후 출력
for(i=0; i<10 ; i++)
{
testArr[i]=i;
Main.PrintOnFile("Futures.txt",i,Futures.time,Futures.current,Futures.volume);
}
// testArr 저장 후 출력
Main.SetUserValue("SetArr",testArr);
Main.MessageList("SetArr",Main.GetUserValue("SetArr"));
// 파일의 출력?
}
<기존 답변>
특정값을 로그를 남기실 경우에는 아래 함수를 이용하시면 됩니다.
Main.PrintOnFile(sFilePath, sMsg)
sFilePath : 저장결로및 파일명
sMsg : 출력내용
스크립트에서 특정 값을 저장해서 이후에 해당 값을 다시 불러
사용하실 경우에는 아래 함수를 이용하시면 됩니다.
Main.SetUserValue(sName, sValue) --> 내부파일에 지정한 이름으로 지정한 값을 저장
Main.GetUserValue(sName) --> 내부파일에 지정한 이름으로 저장된 값을 값 반환
내부파일에 수식의 특정값을
이름을 지정해 저장하고 부르시는 함수가 제공되고 있습니다.
즐거운 하루되세요
2013-09-17
678
글번호 222581