답변완료
문의드립니다.
예스스팟에서 진입주문을 낸 다음에
실체결가를 메세지리스트로 출력하려는 아래와 같이 수식을 짷는데
cSellNum is not defined 라는 메시지가 뜨면서 오류가 납니다.
var cSell, cSellNum, cSellPrice ;
바선언이 필요없을것 같아서 안했는데
아래식에서 바선언이 들어가야하나요 ?
아래 수식 어디가 오류인지 확인 부탁드리겠습니다.
좋은 하루 되세요.
//주문 수식에서 주문에 ID 를 부여하고
cSell = A1.OrderSell( MaxCallcode , 1 , 0 , 1 );
//주문응답 수신해서 주문번호를 저장하고
function Main_OnOrderResponse(OrderResponse)
{
if ( cSell == OrderResponse.orderID )
{ cSellNum = OrderResponse.orderNum; }
}
//체결응답 수신해서 저장한 주문번호로 체결가를 저장하고 메세지리스트 찍어줌
function Main_OnNotifyFill(NotifyFill)
{
if ( cSellNum == NotifyFill.orderNum )
{
cSellPrice = NotifyFill.fillPrice;
Main.MessageList("실체결가격 콜매도 진입: "+cSellPrice);
}
}
2017-09-25
2809
글번호 224220
답변완료
Option.GetCurrent(종목코드) 문제
수고 많으십니다.
오전 장 시작하고 9시 5분 이전에 옵션 종목 현재 가격을 가져올 때 문제가 있습니다. 아래와 같이 옵션 종목을 현재가를 가져오는데, 현재가가 아니고 당일 시초가가 들어옵니다.
Option.GetCurrent(종목코드)
이 코드는 오랜 시간 사용해 왔던 것이고, 그 동안 문제가 없었는데요, 최근에 자주 이런 현상이 발생합니다. 혹시, 관련된 이슈가 보고된 것이 있는지요?
2017-08-25
2659
글번호 224207
답변완료
주식 당일 종가 가져오는법
3시 30분이후인 주식장종료 이후 시점에 당일 종가를 가져오는 법이 없을까요?
이때 가져온 주식종가로, 3시 30분이후 3시45분까지 15분사이에 주식선물을 사는 프로그램을 최종적으로는 짜고싶은데요.
GetprevClose의 경우 1~100일 사이값만 가져올수 있고,
prevClose의 경우 3시 30분이후에 주식의 prevClose값을 불러와도,당일 종가가 아닌 하루전 종가값이 들어오네요.
주식 일봉차트를 넣고 완성시점값을 가져오면 구현은 가능하겠지만, 너무 지저분하고, 예스스팟을 쓰는만큼 왠만하면 차트는 안쓰고 싶습니다.
방법이 있을까요?
2017-08-22
2560
글번호 224206
답변완료
수식좀 봐주세요
리버스 전략에 적용하는 스팟식입니다
1. 매수, 매도 신호발생시 기존 미체결 주문을 취소하고, 신규 신호를 1초단위로 계속 신호가로 1계약씩 주문 발생
2. 동시호가 잔고 청산
힘들게 만들었는데 계속 오류가 나네요. 수정좀 부탁드립니다.
var Tcnt1,Tcnt2,BP,SP;
function Main_OnStart()
{
//99번 타이머,10초 간격
Main.SetTimer(99,10000);
}
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
// 미체결 주문취소
Account1.OrderCancel(Account1.Unfill.orderNum);
Main.MessageList("미체결 주문 취소");
BP = Signal.price;
//매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, Signal.price, 0);
//1번 타이머 1초 셋팅
Main.SetTimer(1, 1000);
//타이머 동작 카운트 값은 초기값 0
Tcnt1 = 0;
}
//매도진입신호 발생
if (Signal.signalKind == 3)
{
// 미체결 주문취소
Account1.OrderCancel(Account1.Unfill.orderNum);
Main.MessageList("미체결 주문 취소");
SP = Signal.price;
//매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, Signal.price, 0);
//2번 타이머 1초 셋팅
Main.SetTimer(2, 1000);
//타이머 동작 카운트 값은 초기값 0
Tcnt2 = 0;
}
}
//타이머 동작
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//1번타이머
if (nEventID == 1)
{
//카운트가 1씩 증가
Tcnt1 = Tcnt1+1;
//타이머 동작시마다 주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, BP,0);
// 매도신호가 뜨면 1초단위 매수 주문 발생 취소
if (Signal.signalKind == 3)
{
Main.KillTimer(1);
}
}
//2번타이머
if (nEventID == 2)
{
//카운트가 1씩 증가
Tcnt2 = Tcnt2+1;
//타이머 동작시마다 주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, SP,0);
// 매수신호가 뜨면 1초단위 매도 주문 발생 취소
if (Signal.signalKind == 1)
{
Main.KillTimer(2);
}
}
}
// 동시호가 청산
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);
}
}
}
2017-07-28
2763
글번호 224200