커뮤니티
예스스팟 Q&A
답변완료
매도 가능 갯수 호출
미체결 매도가 있는 경우, 보유량과 매도가능 갯수는 달라지게 되는데,
hts에서 처럼 스팟에서도 미체결매도갯수를 제외한 매도 가능 갯수를 호출하는 함수가 있는지요?
2021-01-17
2855
글번호 225398
답변완료
데이터베이스 객체 - 셀렉트 문 리턴 값 문의
[1]
*elect 메소드가 불린 값을 리턴하도록 되어있는데,
false 를 리턴할 경우, 상세 원인을 확인할 수 있는 방법이 있나요 ?
[2]
S ELECT TOP 1
으로 1행만 가져오는 구문일 경우,
MoveFirst 함수 없이도 조회 레코드를 가져오는데
이상이 없어 보이는데, 맞는지요 ?
2021-01-14
2864
글번호 225397
답변완료
간단한 질문 드립니다. 옵션관련 (yesspot)
안녕하세요? 수고 많으십니다.
새해 복 많이 받으세요
예스 스팟기준으로,
지수 옵션시작하자 마자 시가들어오면 5초있다가
가격이 5~6사이에 콜옵션의 종목코드를 받으려고 하려면 어떻게 해야할까요?
(확장차트를 만들때 쓰려구요)
꼭 좀 부탁드리곘습니다.
감사합니다.
2021-01-11
2924
글번호 225396
stier 님에 의해서 삭제되었습니다.
2021-01-12
4
글번호 225395
답변완료
문의드립니다.
안녕하세요..
주식거래중이며 예스랭귀지 시스템에서 신호가 나오면
스팟에서 확장차트를 만들어서 매매를 하고 있습니다.
시스템을 분할매도가 들어가게 바꾸었습니다.
그래서 한번 샀지만, 지표신호에 따라서 매도 신호가 나올때마다
보유수량을 일부씩 청산해갑니다.
(차트에서는 정상적으로 나옵니다)
그런데 스팟에서는 매도신호를 받으면
아래의 식으로 매도를 하는데요
Acoount1.OrderSell(Main.GetOrderCode(ChartEx.code(1)),Account1.Balance.count,ChartEx.GetClose(1,0),0);
스팟은 차트에서의 매도신호에 담긴 <수량>이 분할이건, 전량이건 구분하지 않고
매도신호까지만 읽고 보유한 수량 전부를 청산 할수 밖에 없는 것인가요
그래서 분할청산을 하려면 랭귀지의 분할매도 신호와는 별개로
스팟에서 아예 따로 보유수량에 근거한 매도물량을 작성해야 하는 것인가요
1>
한마디로 차트에서 분할매도로 수식을 작성한게 스팟에서는 사용할수 없는 것인가요?
뭔가 그대로 사용할 수 잇는 해결책이 있을가 싶어서 문의드립니다..
차트 신호에 최대한 가깝게 분할매도 하는 방법이 있을가요
안될경우 차트에서 매도신호나오면 , 동시에 n프로 수익중일때 분할익절 두번,
다시 신호나오면 전량청산
이렇게 확장차트에서 나오는 매도신호 + 잔고수익률 확인해서 청산수량을
3분할하는 방법좀 알려주세요..
꼭좀 부탁드리겠습니다.
2021-01-13
2837
글번호 225394
stier 님에 의해서 삭제되었습니다.
2021-01-04
32
글번호 225393
온고지신 님에 의해서 삭제되었습니다.
2020-12-23
0
글번호 225392
지스카드 님에 의해서 삭제되었습니다.
2020-12-22
46
글번호 225391
cs아빠 님에 의해서 삭제되었습니다.
2020-12-19
11
글번호 225390
답변완료
수식 검토 부탁드립니다. (주문변경, 일부미체결, 다중 챠트)
안녕하세요?
코스닥선물을 거래하고 있습니다. (하이투자)
챠트는 KQ20과 KQ100이름으로 두개의 챠트객체가 있고 (둘다 코스닥150연결선물)
종목객체는 코스닥150연결선물입니다. (Marketdata1)
각 챠트에서 5개의 진입수를 가지고 거래를 하고 있는데 진입 및 가격을 현재가로 하다보니 대부분 거래가 잘 되기는 하나 시장이 빨리 움직일 때는 진입이나 청산을 일부 못하는 경우가 발생하고 있습니다. 그래서 상대3~5호가로 진입및 청산주문을 하고 있는데 아무래도 수익률이 떨어지고 있습니다. 그래서 나름 예스스팟으로 수식을 작성하여 보았는데 하이투자는 모의거래가 없어 시험하기가 어려운 상황입니다. 우선 아래의 수식을 보시고 문제가 될 만한 부분이 있는지 검토를 부탁드리겠습니다.
*아래의 수식에서 청산신호가 아닌 스위칭신호(BUY신호인데 그전에 그 챠트에서 주문한 매도포지션이 있는 경우)가 발생했을 때도 잘 작동할 수 있을지 궁금합니다.
감사합니다.
-----------------------------------------------------------------------
KQ20챠트에서
5개의 매수/매도 신호발생(현재가 주문) - 5초 후 일부 미체결 가격 조정 - 10초후 일부 미체결 가격 조정 - 15초 후 미체결주문 모두 취소
청산 시 현재가 주문 - 5초후 가격조정 - 10초후 가격조정
KQ100챠트에서도 위와 동일한 방식으로 주문함
KQ20챠트와 KQ100챠트는 서로의 진입과 청산에 영향없이 각각 독립적으로 운영 (서로 영향없이)함.
---------------------------------------------------------------------------
var Position;
var BuyID;
var BuyOrderNum;
var SellID;
var SellOrderNum;
var Position100;
var BuyID100;
var BuyOrderNum100;
var SellID100;
var SellOrderNum100;
var KQ20num;
var IniKQ20num;
var KQ100num;
var IniKQ100num;
function Main_OnStart()
{
Position = 0;
IniKQ20num =0;
Position100 = 0;
IniKQ100num =0;
}
function KQ20_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Position = 1;
Account1.SetBalanceItem(Main.GetOrderCode(KQ20.GetCode(1)), 2);
IniKQ20num = Account1.Balance.count;
BuyID = Account1.OrderBuy(Main.GetOrderCode(KQ20.GetCode(1)),Signal.count,MarketData1.current,0);
Main.SetTimer(1, 5000);
Main.SetTimer(2, 10000);
Main.SetTimer(3, 15000);
Main.SetTimer(4, 30000);
}
if (Signal.signalKind == 3)
{
Position = -1;
Account1.SetBalanceItem(Main.GetOrderCode(KQ20.GetCode(1)), 1);
IniKQ20num = Account1.Balance.count;
SellID = Account1.OrderSell(Main.GetOrderCode(KQ20.GetCode(1)),Signal.count,MarketData1.current,0);
Main.SetTimer(1, 5000);
Main.SetTimer(2, 10000);
Main.SetTimer(3, 15000);
Main.SetTimer(4, 30000);
}
if (Signal.signalKind == 2)
{
Main.SetTimer(5, 5000);
Main.SetTimer(6, 10000);
ELID = Account1.OrderSell(Main.GetOrderCode(KQ20.GetCode(1)),KQ20num,MarketData1.current,0)
}
if (Signal.signalKind == 4)
{
Main.SetTimer(5, 5000);
Main.SetTimer(6, 10000);
ESID = Account1.OrderBuy(Main.GetOrderCode(KQ20.GetCode(1)),KQ20num,MarketData1.current,0)
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID)
{
BuyOrderNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SellID)
{
SellOrderNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == ELID)
{
ELOrderNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == ESID)
{
ESOrderNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && Position == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
BuyID = Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Ask(1));
}
}
if (nEventID == 1 && Position == -1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(SellOrderNum);
if (Account1.Unfill.count > 0)
{
SellID = Account1.OrderReplacePrice(SellOrderNum, MarketData1.Bid(1));
}
}
if (nEventID == 2 && Position == 1)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
BuyID = Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Ask(3));
}
}
if (nEventID == 2 && Position == -1)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(SellOrderNum);
if (Account1.Unfill.count > 0)
{
SellID = Account1.OrderReplacePrice(SellOrderNum, MarketData1.Bid(3));
}
}
if (nEventID == 3 && Position == 1)
{
Main.KillTimer(3);
EnterN = 0;
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BuyOrderNum);
}
}
if (nEventID == 3 && Position == -1)
{
Main.KillTimer(3);
EnterN = 0;
Account1.SetUnfillOrderNumber(SellOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SellOrderNum);
}
}
if (nEventID == 4 && Position == 1)
{
Account1.SetBalanceItem(Main.GetOrderCode(KQ20.GetCode(1)), 2);
KQ20num = Account1.Balance.count - IniKQ20num ;
Main.KillTimer(4);
Main.MessageList("매수진입수:", KQ20num);
}
if (nEventID == 4 && Position == -1)
{
Account1.SetBalanceItem(Main.GetOrderCode(KQ20.GetCode(1)), 1);
KQ20num = Account1.Balance.count - IniKQ20num;
Main.KillTimer(4);
Main.MessageList("매도진입수:", KQ20num);
}
if (nEventID == 5 && Position == 1)
{
Main.KillTimer(5);
Account1.SetUnfillOrderNumber(ELOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ELOrderNum, MarketData1.Bid(3));
}
}
if (nEventID == 5 && Position == -1)
{
Main.KillTimer(5);
Account1.SetUnfillOrderNumber(ESOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ESOrderNum, MarketData1.Ask(3));
}
}
if (nEventID == 6 && Position == 1)
{
Main.KillTimer(6);
Account1.SetUnfillOrderNumber(ELOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ELOrderNum, MarketData1.Bid(5));
}
}
if (nEventID == 6 && Position == -1)
{
Main.KillTimer(6);
Account1.SetUnfillOrderNumber(ESOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ESOrderNum, MarketData1.Ask(5));
}
}
}
function KQ100_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Position100 = 1;
Account1.SetBalanceItem(Main.GetOrderCode(KQ100.GetCode(1)), 2);
IniKQ100num = Account1.Balance.count;
BuyID100 = Account1.OrderBuy(Main.GetOrderCode(KQ100.GetCode(1)),Signal.count,MarketData1.current,0);
Main.SetTimer(7, 5000);
Main.SetTimer(8, 10000);
Main.SetTimer(9, 15000);
Main.SetTimer(10, 30000);
}
if (Signal.signalKind == 3)
{
Position100 = -1;
Account1.SetBalanceItem(Main.GetOrderCode(KQ100.GetCode(1)), 1);
IniKQ100num = Account1.Balance.count;
SellID100 = Account1.OrderSell(Main.GetOrderCode(KQ100.GetCode(1)),Signal.count,MarketData1.current,0);
Main.SetTimer(7, 5000);
Main.SetTimer(8, 10000);
Main.SetTimer(9, 15000);
Main.SetTimer(10, 30000);
}
if (Signal.signalKind == 2)
{
Main.SetTimer(11, 5000);
Main.SetTimer(12, 10000);
ELID100 = Account1.OrderSell(Main.GetOrderCode(KQ100.GetCode(1)),KQ100num,MarketData1.current,0)
}
if (Signal.signalKind == 4)
{
Main.SetTimer(5, 5000);
Main.SetTimer(6, 10000);
ESID100 = Account1.OrderBuy(Main.GetOrderCode(KQ100.GetCode(1)),KQ100num,MarketData1.current,0)
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID100)
{
BuyOrderNum100 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SellID100)
{
SellOrderNum100 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == ELID100)
{
ELOrderNum100 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == ESID100)
{
ESOrderNum100 = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 7&& Position100 == 1 )
{
Main.KillTimer(7);
Account1.SetUnfillOrderNumber(BuyOrderNum100);
if (Account1.Unfill.count > 0)
{
BuyID100 = Account1.OrderReplacePrice(BuyOrderNum100, MarketData1.Ask(1));
}
}
if (nEventID == 7 && Position100 == -1)
{
Main.KillTimer(7);
Account1.SetUnfillOrderNumber(SellOrderNum100);
if (Account1.Unfill.count > 0)
{
SellID100 = Account1.OrderReplacePrice(SellOrderNum100, MarketData1.Bid(1));
}
}
if (nEventID == 8 && Position100 == 1)
{
Main.KillTimer(8);
Account1.SetUnfillOrderNumber(BuyOrderNum100);
if (Account1.Unfill.count > 0)
{
BuyID100 = Account1.OrderReplacePrice(BuyOrderNum100, MarketData1.Ask(3));
}
}
if (nEventID == 8 && Position100 == -1)
{
Main.KillTimer(8);
Account1.SetUnfillOrderNumber(SellOrderNum100);
if (Account1.Unfill.count > 0)
{
SellID100 = Account1.OrderReplacePrice(SellOrderNum100, MarketData1.Bid(3));
}
}
if (nEventID == 9 && Position100 == 1)
{
Main.KillTimer(9);
EnterN = 0;
Account1.SetUnfillOrderNumber(BuyOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BuyOrderNum100);
}
}
if (nEventID == 9 && Position100 == -1)
{
Main.KillTimer(9);
EnterN = 0;
Account1.SetUnfillOrderNumber(SellOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SellOrderNum100);
}
}
if (nEventID == 10 && Position100 == 1)
{
Account1.SetBalanceItem(Main.GetOrderCode(KQ100.GetCode(1)), 2);
KQ20num = Account1.Balance.count - IniKQ100num ;
Main.KillTimer(10);
Main.MessageList("매수진입수:", KQ100num);
}
if (nEventID == 10 && Position100 == -1)
{
Account1.SetBalanceItem(Main.GetOrderCode(KQ100.GetCode(1)), 1);
KQ20num = Account1.Balance.count - IniKQ100num;
Main.KillTimer(10);
Main.MessageList("매도진입수:", KQ100num);
}
if (nEventID == 11 && Position100 == 1)
{
Main.KillTimer(11);
Account1.SetUnfillOrderNumber(ELOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ELOrderNum100, MarketData1.Bid(3));
}
}
if (nEventID == 11 && Position100 == -1)
{
Main.KillTimer(11);
Account1.SetUnfillOrderNumber(ESOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ESOrderNum100, MarketData1.Ask(3));
}
}
if (nEventID == 12 && Position100 == 1)
{
Main.KillTimer(12);
Account1.SetUnfillOrderNumber(ELOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ELOrderNum100, MarketData1.Bid(5));
}
}
if (nEventID == 12 && Position100 == -1)
{
Main.KillTimer(12);
Account1.SetUnfillOrderNumber(ESOrderNum100);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(ESOrderNum100, MarketData1.Ask(5));
}
}
}
2020-12-05
2994
글번호 225383