답변완료
GetUserValue()함수로 파일변수를 읽기전에 초기화하는 방법이 있나요?
파일에 변수를 만들어 스팟이 다시 실행되더라도 기존 값을 계속해서 읽고, 쓰고 싶을때가 많이 있습니다.
OnStart()함수에서 GetUserValue()를 해서 변수를 활용하고 싶은데,
해당 변수는 OnTimer() 함수내에서 만들어주기 때문에 최초에 OnStart()에서 초기화를 할 수 없는 상황입니다.(OnStart() 함수에서 초기화하면 스팟 실행할때마다 초기화가 되어 파일에서 기존 값을 읽어오는게 의미가 없어지므로 그렇게 하면 안될 것 같습니다.)
이렇게 되면 맨 처음에 전략 실행시 변수가 초기화되지 않은 상태에서 OnStart()함수에서 GetUserValue()를 이용해 변수를 불러오게 되므로 오류가 생길 수 밖에 없는데,
어떻게 초기화하면 될까요?
2013-10-07
701
글번호 222607
답변완료
질문드립니다.
안녕하세요.
제가 아래와 같이 선물 챠트 신호에 따라 옵션을 매매하는 수식을 작성해 보았는데요.
다음과 같이 청산식을 수정하고자 질문드립니다.
진입 - 기존 수식과 동일
청산1 - 챠트1 그리고 챠트2의 동시매수신호 발생시점의 선물가격이 1pt상승하면... 보유한 콜옵션 3개를 청산한다.
청산2 - 챠트1 또는 챠트2에서 매수익절신호(2) 또는 매도신호(3)이 발생하면 보유한 콜옵션 전량을 청산한다.
감사합니다.
--------------------------------------------------------------------------------------
var S1;
var S2;
var MP;
var Callcode;
function Main_OnStart()
{
S1 = 0;
S2 = 0;
MP = 0;
}
function Chart1_OnRiseSignal(Signal)
{
S1 = Signal.signalKind;
if (S1 == 1 && S2 == 1)
{
Callcode = Option.GetATMCallRecent(2,0);
Account1.OrderBuy(Callcode, 6, Option.GetAskByCode(Callcode, 2), 0);
MP = 1;
}
if (MP == 1 &&(S1 == 2 || S1 == 3))
{
MP = 0;
{
Account1.OrderSell(Callcode, 6, Option.GetBidByCode(Callcode, 2), 0);
}
}
2013-10-01
831
글번호 222597
답변완료
변수조합하여 일괄처리
안녕하세요. 늘 수고하십니다.
질문이 있어 이렇게 또 글을 올립니다.
미리 감사하구요 ^^
질문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
914
글번호 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
868
글번호 222593