답변완료
에러가 발생하는데....
아래수식에서
var T;
function Main_OnStart()
{
T = 0;
Main.MessageLog("시작");
OrderCode = Main.GetOrderCode(KP.code);
}
function C1_OnRiseIncompleteSignal(IncompleteSignal)
{
Main.MessageLog("미완성신호/"+IncompleteSignal.signalKind);
A1.SetBalance(Main.GetOrderCode(IncompleteSignal.code))
if (T <= 0 && (A1.Balance.position == 1 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 1)
{
T = 1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(1,5000);
}
if (T >= 0 && A1.Balance.position == 1 && IncompleteSignal.signalKind == 3)
{
T = 0;
Main.KillTimer(1);
Main.SetTimer(2,5000);
}
if (T >= 0 && (A1.Balance.position == 2 || A1.Balance.position == 0) && IncompleteSignal.signalKind == 3)
{
T = -1;
if(A1.Balance.position == 0)
VV = 1;
else
VV = 2;
Main.SetTimer(2,5000);
}
if (T <= 0 && A1.Balance.position == 2 && IncompleteSignal.signalKind == 1)
{
T = 0;
Main.KillTimer(2);
Main.SetTimer(1,5000);
}
}
function Main_OnTimer(nEventID)
{
//마지막봉 미완성 신호정보 셋팅
var Incom = C1.GetIncompleteSignal();
if (nEventID == 1 && T == 1 && Incom[0] == 1)
{
Main.KillTimer(1);
A1.OrderBuy(KP.code, VV, KP.Ask(2),2);
Main.MessageLog("매수진입");
}
if (nEventID == 1 && T == 0 )
{
Main.KillTimer(1);
Main.MessageLog("중복매수진입금지");
}
if (nEventID == 2 && T == -1 && Incom[0] == 3)
{
Main.KillTimer(2);
A1.OrderSell(KP.code, VV, KP.Bid(2),2);
Main.MessageLog("매도진입");
}
if (nEventID == 2 && T == 0)
{
Main.KillTimer(2);
Main.MessageLog("중복매도진입금지");
}
}
위 수식을 적용 한 결과
TypeError : Cannot read property '0' of null 과 같이 에러메세지가 뜸니다.
if (nEventID == 1 && T == 1 && Incom[0] == 1)
if (nEventID == 2 && T == -1 && && Incom[0] == 3) 에서 오류가 발생 되는것 깉습니다
바르게 수정해 주시면 감사 하겠습니다.
2019-02-25
3018
글번호 224748
답변완료
수식 문의 드립니다.
안녕하세요.
스프레드 매매 식을 작성 하고자 합니다.
1. 차트1에서 매수 신호 완성 시, 3.0과 가장 가까운 Call옵션을 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목(Call종목+1)을 매도(수량은 차트 신호 수량과 동일)합니다.
2. 피라미딩으로 추가 매수 신호 완성 시, 가격과 무관하게 처음 진입한 Call옵션 종목과 동일한 종목을 추가 매수(수량은 차트 신호 수량과 동일)하고 동시에 바로 위 행사가 높은 종목을 추가 매도(수량은 차트 신호 수량과 동일) 합니다.
3. 매수청산 신호 완성 시, 진입 종목의 콜을 각각 매도,매수로 청산(수량은 차트 신호 수량과 동일)합니다.
4. 옵션 만기일 15:00시에 잔고 모두를 청산하고 동시에 차월물에 동일 포지션으로 3.0과 가까운 종목에 매수/매도를 진입합니다.(예 : 근월물 콜 10개 매수, 콜+1 10개 매도로 잔고가 유지 될 시, 15:00에 청산 후, 동시에 차월물 3.0과 가까운 종목 콜 10개 매수,콜+1 10개 매도 진입)
즐거운 하루 되시기 바랍니다.
감사합니다.
2019-02-16
3073
글번호 224738
답변완료
수식에 오류가 없는지 점검부탁드립니다
아래 식은
선물 10개 진입 주문후
1. 일부만 체결되고 나머지 미체결된 후 청산신호발생한 경우 미체결분량은 취소하고 체결된 것만 청산주문함
2. 청산주문 중 일부만 체결되고 나머지 미체결시 미체결부분은 30초 경과시 우선 2호가 주문함
을 작성한 것입니다.
1) 스팟이 처음이라 이것저것 예제보고 붙여넣기해서 작성해보았는데요... 잘 작성된 것인지 점검부탁드립니다.^^
2) 그리고, 청산주문 중 일부만 체결되고 나머지 미체결시 미체결부분은 30초 경과시 시장가주문하려면 어떻게 작성해야하는지 좀 알려주세요....
3) 그리고, 예를 들어, 10계약 매수진입 후 매도신호 발생시 20개 매도 주문(10개는 청산, 10개는 신규 매도)이 들어갔을때 그 중 15개만 매도 체결된 경우 스팟에서는 우선 10개는 signalkind == 2로 잡고 나머지 5개만 signalkind == 3으로 잡히는거 맞나요?
var EntryVol = 10; //진입수량
var BEid,BEnum,SEid,SEnum,BEidx,SEidx,BEnumx,SEnumx;
function Main_OnStart()
{
Main.MessageList("스팟시작");
}
function Chart1_OnRiseSignal(Signal)
{
//Buy신호 발생하면 10개약 매수1호가로 매수
if (T == 0 && Signal.signalKind == 1)
{
T = 1;
BEid = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),EntryVol, MarketData1.Bid(1),0);
}
//Exitlong신호 발생하면
if (T == 1 && Signal.signalKind == 2)
{
T = 0;
//매수진입의 주문번호로 미체결 객체 셋팅
Account1.SetUnfill(BEnum);
//미체결이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BEnum)
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매수포지션이 있으면 매도1호가로 전량 매도(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
BEidx = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Ask(1),0);
}
}
//Sell신호 발생하면 10개약 매도1호가로 매도
if (T == 0 && Signal.signalKind == 3)
{
T = -1;
SEid = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),EntryVol, MarketData1.Ask(1),0);
}
if (T == -1 && Signal.signalKind == 4)
{
T = 0;
//매도진입의 주문번호로 미체결 객체 셋팅
Account1.SetUnfill(SEnum);
//미체결이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SEnum)
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매도포지션이 있으면 매수1호가로 전량 매수(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
SEidx = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Bid(1),0);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BEid)
{
BEnum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SEid)
{
SEnum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == BEidx)
{
BEnumx = OrderResponse.orderNum;
Main.SetTimer(1,30000);
}
if (OrderResponse.orderID == SEidx)
{
SEnumx = OrderResponse.orderNum;
Main.SetTimer(2,30000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Account1.SetUnfill(BEnumx);
//매수포지션 청산주문후 미체결이 있으면 잔고셋팅
if (Account1.Unfill.count > 0)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
}
// 30초 경과시 매수2호가 정정주문
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderReplacePrice(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Bid(2),0);
Main.KillTimer(1);
}
}
if (nEventID == 2)
{
Account1.SetUnfill(SEnumx);
//매도포지션 청산주문후 미체결이 있으면 잔고셋팅
if (Account1.Unfill.count > 0)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
}
// 30초 경과시 매도2호가 정정주문
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderReplacePrice(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Ask(2),0);
Main.KillTimer(2);
}
}
}
2019-02-20
3096
글번호 224737