답변완료
문의 올립니다.
안녕하십니까.
항상 친절하신 답변 감사드립니다.
미체결, 미결제가 없는 상태에서만 신규매수진입이 되도록 하기 위해 Step이라는 변수를 설정해서 이용하고자 하는데,
아래의 소스에서 보듯이, Q&A 예문 등에서 일반적으로 보이는 바와 같이, 함수 바깥에서 Step을 선언해 주고,
function Main_OnStart() 에서 초기값 0을 대입해 주고,
function Chart1_OnRiseSignal(Signal) 에서, 이 값이 0일 경우에만 매수진입 주문이 나갈 수 있도록 하였는데,
function Chart1_OnRiseSignal(Signal) 속의 { } 속 맨 처음에 MessageLog로 이 Step의 값을 체크해 보면, 0이 아니라 undefined로 나옵니다.
어떤 부분을 제가 잘못한 건지, 어떻게 고쳐야 하는 건지 알려 주시면 대단히 감사하겠습니다.
((아래 소스는, 간단히 볼 수 있게 하기 위해, 다른 거 다 지우고 Step과 직결되는 것들만 남겨 보았습니다))
var ID_1B;
var Step;
function Main_OnStart()
{
Step = 0;
Main.MessageLog("OnStart / Step = "+Step+" / Signal.name = "+Signal.name+" / Signal.price ="+Signal.price);
}
// 차트에서 매수신호 발생
function Chart1_OnRiseSignal(Signal)
{ //
Main.MessageLog("OnRiseSignal / Step = "+Step+" / Signal.name = "+Signal.name+" / Signal.price ="+Signal.price);
// 여기서 이미 Step은 undefined로 나옴...
if (Step == 0 && Signal.name == "1B")
{
var ChartCode = Main.GetOrderCode(Chart1.GetCode(1));
var P_1B = Signal.price;
var ID_1B = Account1.OrderBuy(ChartCode, Signal.count, P_1B, 0);
var Step = 1;
}
}
대단히 감사합니다!
2013-09-08
812
글번호 222565
답변완료
MessageBox
늘 수고 하십니다.
수식을 작성하다 문의가 있어서 이렇게 글을 올립니다.
<질문사항>
1. MessageBox가 별도의 창에 띄워지지 않고, 디버깅창에만 출력이 됩니다.
(제 컴퓨터 OS Window7 64)
2. 부동소수점 관련해서 아래 샘플 수식에서 처럼 어떤 수식을 계산해서 값의 차이가
선물 1틱(0.05) 이면 이라는 수식을 작성해서 주문을 낸다고 가정했을때, 실제 많은
로그에서 0.0499000000 이런식으로 찍힌다던가해서 실제로 조건이 만족을해도 주문이 나
가지 않는 경우가 있습니다.
아래처럼 toFixed(2)를 사용해서 조건을 비교하면 정상적으로 비교할 수 있으나,
toFixed 를 사용할때 가끔 값이 빈 Null이 발생할때 오류 보고창에 에러가 발생하는데,
(1) 원래 의도한 0.05 보다 작은 0.0499000000 이런식으로 계산이 되는 이유와 해결책
(선물의 가격을 단순히 차감한 가격에서 오류가 안났으면 합니다)
(2) toFixed를 사용했을때 값이 없을때의 오류처리 구문
function Main_OnStart()
{
var diff;
Main.MessageBox("HI"); // 박스로 띄워지지가 않음
// 부동소수점문제 Test
diff = 256.25 -Futures.current ; // 당시 선물 현재가 256.20
Main.MessageList("선물현재",Futures.current,"Test시세",256.15,"차이",diff);
Main.MessageList("선물현재",Futures.current,"Test시세",256.15,"차이",diff.toFixed(2));
if(diff == 0.05)
{
Main.MessageList("결과값 만족 ") ;
}
if(diff.toFixed(2) == 0.05)
{
Main.MessageList("결과값 만족 toFixed") ;
}
}
2013-09-07
828
글번호 222564
답변완료
문의드립니다.
자세한 답변 감사드립니다.
추가로 두 가지만 더 문의드립니다.
1. 주문가능한 콜옵션을 아래와 같이 계산을 한 후에..
Callcode = Option.GetATMCallRecent(2,0);
var Entryvol = Math.floor(Account1.GetBalanceETCinfo(30)/(Option.GetAskByCode(Callcode, 3)*500000));
Account1.OrderBuy(Callcode, Entryvol, Option.GetAskByCode(Callcode, 3), 0);
아래와 같은 청산식으로 정리할려고 하는데요. 12개가 아닌 현재 잔고보유량으로 청산을 할려면 어떻게 해야 하나요?
Account1.OrderSell(Callcode, 12, Option.GetBidByCode(Callcode, 3), 0);
2. 매수신호 발생 시 현재 잔고 보유금액의 매수가능수량이 아니라 5백만원어치 콜 수량을 살려면 어떻게 해야 하나요?
2013-09-05
807
글번호 222558