답변완료
오류메세지가 ??
아래 예스스팟수식을 적용 하니 아래와 같은 오류메세지가 나옵니다.
원인이 무엇인지요?
* 오류메세지 내용
1. 종목코드값을 확인하시기바랍니다.
2. 미체결 내역에서 주문번호를 찾을 수 없어서 주문이 자체 거부 되었습니다.
참조사항 차트객체명 : C1
차트아이디 : D101 (자동매매 활성화 됨)
종목객체명 : SP
종목명 : E-mini S&P 500(2016.3)
종목코드 : ESH 16
var Position;
var OrderCode;
var BID;
var SID;
var SNum;
var BNum;
var BuyFill;
var SellFill;
function Main_OnStart()
{
Main.MessageLog("시작");
Position = 0;
OrderCode = Main.GetOrderCode(SP.Code);
}
function C1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/"+Signal.signalKind);
if (Signal.signalKind == 1)
{
Position = 1;
BID = A1.OrderBuy(SP.Code, 1, SP.Ask(2),0);
Main.MessageLog("매수진입");
BuyFill = 0;
}
if (Position == 1 && Signal.signalKind == 2)
{
if (BuyFill == 1)
{
A1.OrderSell(SP.Code, 1, SP.Bid(2),0);
Main.MessageLog("매수청산실행");
}
if (BuyFill == 0)
{
A1.OrderCancel(BNum);
Main.MessageLog("매수청산취소");
}
}
if (Signal.signalKind == 3)
{
Position = -1;
SellFill = 0;
SID = A1.OrderSell(SP.Code, 1, SP.Bid(2), 0);
Main.MessageLog("매도진입");
}
if (Position == -1 && Signal.signalKind == 4)
{
if (SellFill == 1)
{
A1.OrderBuy(SP.Code, 1, Ask(2), 0);
Main.MessageLog("매도청산");
}
if (SellFill == 0)
{
A1.OrderCancel(SNum);
Main.MessageLog("매도청산취소");
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (Position == 1 && OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (Position == -1 && OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnNotifyFill(NotifyFill)
{
if (Position == 1 && NotifyFill.orderNum == BNum)
{
BuyFill = 1;
}
if (Position == -1 && NotifyFill.orderNum == SNum)
{
SellFill = 1;
}
}
2016-01-27
2104
글번호 223787
답변완료
문의드립니다.
안녕하세요~
YesSpot 메뉴얼중에서 예제3.시간정정주문 에서 확장된 질문드립니다.
1. 예를 들어 매수 1호가에 100계약을 매수주문합니다.
그리고 OnTimer를 1분으로 지정한 후, 1분후에도 미체결 상태라면 매도 2호가로 매수정정주문이 발생합니다.
이런 상태에서 100계약 중 50계약이 남고 50계약이 미체결 상태로 1분이 지나면, 남은 계약에서 기존에 걸어두었던 OnTimer 때문에 한번 더 매도 2호가로 다시 정정주문이 나갈 때....
매도 2호가의 가격이 이전 매도 2호가의 가격과 동일 할때, 모의투자에서는 가격이 같기 때문에 정정주문에서 오류가 납니다. (오류후에도 기존에 매도2호가로 체결은 계속됨)
즉, 정정주문시에는 동일한 가격으로 정정주문이 나가지는 않는건가요??? 이 현상이 모의투자에서만 그런 것인지, 실제매매에서 그런지 확인하고 싶습니다.
2. 잔고내역을 확인할 때...
var temp = Account1.GetTheNumberOfBalances();
if(temp > 0)
{
for (var i = 0; i < temp; i++)
{
Account1.SetBalanceIndex(i);
Main.MessageList("잔고종목코드[", Account1.Balance.code, "] 잔고수량[",Account1.Balance.count, "]");
}
}
이런식으로 확인할 때... SetBalanceIndex() 와 SetBalance()의 차이를 알고 싶습니다.
객체 정보의 데이터에서는 똑같은 설명으로 나와있어서...스크린 샷으로 올리고,,,
설명 부탁드리겠습니다^^
2016-01-20
2042
글번호 223782
답변완료
이벤트 발생 후 실행순서 문의드립니다.
안녕하세요.
이벤트 발생 후 실행순서 문의 드립니다.
간단한 예를 들어서 질문 드리겠습니다.
0.5초 타이머로 발생하는 Event A와 B가 있다고 가정하고
SetUserValue와 GetUserValue 로 값을 저장하는 변수 K가 있습니다.
A, B 두 타이머를 동시에 시작한다고 했을때
A와 B 이벤트는 거의 동시에 발생하면서 순서가 다른 경우도 생길텐데요
여기서 K라는 변수가 0 이면 1로 바꾸고, 1이면 0으로 바꾸는 로직이
A와 B 로직에 들어있다면,
0.5초 마다 초기값 0 이었던 변수 K가 1로 갔다가 다시 0으로 바뀌는걸 보장 할 수 있을까요?
그러니까, 거의 동시에 발생한 이벤트의 로직이 순차실행 보장이 되는지 궁금합니다.
차트 봉 추가 이벤트나 타이머에 의해서 거의 동시에 발생하는 이벤트 들이 있을텐데요
이벤트 A,B,C 들이 거의 동시에 발생 했을 때
내부적으로 큐와 비슷하게 가지고 있다가
A이벤트의 로직이 처음부터 끝까지 실행되고 난 후에 B로직이 처음부터 끝까지 실행되고 다음
C의 로직이 처음부터 끝까지 되는건지
아니면
A로직이 실행되고 있는 중간에 B로직이 실행되는 구조인지 궁금합니다.
이벤트에서 중복실행을 방지하기 위해
그러니까 A,B,C 이벤트에서 한 곳에서만 주문이 발생하게 하려고 하는데요
(A메서 주문이 발생하면 B,C 에서는 주문안함)
이 방법으로 SetUserValue와 GetUserValue 를 이용해서 변수 하나에 값을 저장하게 하면
가능할지가 제가 최종적으로 드리고 싶은 질문이었는데
의도가 잘 전달되게 최대한 풀어서 질문 드립니다.
답변 부탁드립니다.
감사합니다.
2016-01-17
1694
글번호 223776
답변완료
문의드립니다.
안녕하세요.
스팟 시작할 때 파워종목검색 활용하는 경우에도 확장차트 객체 추가를 해야 하는지요?
확장차트 객체 추가를 해야 한다면 종목검색을 통해 몇개의 종목이 검색될지 모르는 상황인데 확장차트 추가를 몇개나 해야할런지요? 그리고 어떤 종목이 검색될 지 모르는 데 종목명을 어떻게 지정해야 할지요?
현재 나타나는 문제를 구체적으로 설명드리자면...
스크립트 객체에 ChartEx를 여러개 추가한 후, 개별 확장 차트에서 종목명 지정을 하지 않으면 스팟 전략 저장시 YesSpotMaker 창이 뜨고 "연결된 차트가 없습니다"라고 출력됩니다.
또한 예스스팟 전략을 적용 시키면 종목검색된 수량만큼의 Chart창이 뜨고 "undefined을(를) 찾을 수 없습니다."라는 메시지가 출력됩니다.
하기는 제가 적용했던 예스스팟 코드입니다. 무엇이 잘못되었는지 고견 부탁드리겠습니다.
-----------------------------------------------------------------------------------
//종목검색 완료(aItemList : 종목리스트), (nCount : 종목수)
function Main_OnRcvItemList(aItemList, nCount)
{
// 확장챠트의 생성과 적용될 시스템의 세부 설정
var TradeSet = new SystemTradeInfo(
TRADE_FIXCAPITAL,
1,1000000,1,
0,0,CALCMETHOD_PERCENT,
0,0,CALCMETHOD_PERCENT,
PYRAMIDING_NONE,
100000,2
);
Main.MessageList("확장챠트 생성 & 시스템 세부설정");
//확장 챠트는 최대 100개까지만 가능
for (var i = 0; i < Math.min(nCount,100); i++)
{
//생성할 차트 셋팅
var ChartSet = new ReqChartItem(aItemList[i], 10, CHART_PERIOD_SECOND, 5000,CHART_REQCOUNT_BAR, true, false);
//차트에 적용할 시스템명 및 설정
var SystemSet = new SystemInfo(YesSpot1,YL_TYPE_NORMAL,null,TradeSet,null);
Main.ReqChartEx(ChartSet,SystemSet);
Main.MessageList("확장챠트 생성 : "+(i+1));
}
}
2016-01-19
1773
글번호 223774
답변완료
수식문의드림니다
수식문의 드림니다
아래의 스팟수식에
동시호가시간(15시06분정도)에 잔고에 종목을 모두청산하는
당일계좌정리 수팟수식을 첨가 부탁드림니다
/////////////////////////////////////////////////////////////////////////////
function Main_OnStart()
{
//[ 3번시스템 : 3S ]
Main.MessageList("스팟_시작");
}
function Chart1_OnRiseSignal(Signal)
{
//투입수량 변수지정
//
ORDER_VOL = 1; // 신호발생수량 X N 배수로 주문실행
//매수신호 발생
if (Signal.signalKind == 1)
{
Main.MessageList("Buy_Signal");
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), ORDER_VOL * Signal.count, MarketData1.Ask(5), 0);
}
//매수청산신호 발생
if (Signal.signalKind == 2)
{
Main.MessageList("ExitLong_Signal");
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), ORDER_VOL * Signal.count, MarketData1.Bid(5), 0);
}
//매도신호 발생
if (Signal.signalKind == 3)
{
Main.MessageList("Sell_Signal");
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), ORDER_VOL * Signal.count, MarketData1.Bid(5), 0);
}
//매도청산신호 발생
if (Signal.signalKind == 4)
{
Main.MessageList("ExitShort_Signal");
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), ORDER_VOL * Signal.count, MarketData1.Ask(5), 0);
}
}
2016-01-14
1656
글번호 223773