답변완료
정정,취소 주문
안녕하세요..
다음 수식 수정 부탁드립니다.
var Start;
var BuyID;
var BuyOrderNum;
function Main_OnStart()
{
Start = 0;
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
Start = 1;
BuyID = Account1.OrderBuy(MarketData1.code,Vol,MarketData1.Bid(2),0);
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID)
{
BuyOrderNum = OrderResponse.orderNum;
Main.SetTimer(1, 10000);
Main.SetTimer(2, 25000);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Bid(1));
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(BuyOrderNum);
if (Account1.Unfill.count > 0)
{
Account1.OrderReplacePrice(BuyOrderNum, MarketData1.Ask(1));
}
}
}
< 제가 원하는 수식 내용 >
- 연결선물 분봉 차트 신호를 기준으로하고, 연결선물을 종목객체로 선택
- 매수신호 발생시 매수2호가 주문
- 신호 발생으로부터 10초후 미체결시 매수1호가로 1차정정
- 1차정정으로부터 15초후 1차정정 미체결시 매도1호가로 2차정정 (원주문에서 25초 경과)
- 2차정정으로부터 5초후 미체결시 해당 주문 취소 (원주문에서 30초 경과)
< 궁금한 점 >
1) 위의 내용상 2차정정을 위하여 1차정정에 대한 'orderID'와 'orderNum'가 별도로
설정되어야 할 것 같은데 어떻게 연결시켜야 할지 모르겠습니다.
(제 개인적인 생각에 위의 수식 내용은
원주문 번호에 대하여 1차정정과 2차정정을 하라는 것으로 판단됨)
2) 위의 수식을 시험적용하면 정정주문으로 넘어가지 않습니다.
또한 정정주문에서 'BuyID ='을 추가하면
시험적용시 체결사항이 없기 때문에, KillTimer 함수를 사용하여도
SetTimer가 반복적으로 수행됩니다.
시험적용시에도 1,2차 정정 등이 아예 1회만 실행되도록 수식을 작성하고 싶습니다.
(예를들면 YT에서 거래횟수 제한과 같이,
원주문,1차정정주문,2차정정주문,취소주문 모두 1회 주문 발생)
단, 새로운 매수신호가 발생하면 당연히 동일한 과정이 수행됩니다.
3) 위의 수식에 2차정정으로 부터 5초후 미체결시 해당주문을 취소하고 싶습니다.
즉, 원주문 번호 --> 원주문 번호에 대한 1차정정 번호
--> 1차정정 번호에 대한 2차정정 번호 --> 2차정정 번호에 대한 취소주문
시험적용에서도 정정주문이 반복되지 않고 각 주문이 1회만 발생하도록 제어하고,
새로운 매수신호 발생시 제가 원하는 위의 과정을 반복 수행하는 수식이 되도록
수정 부탁드리겠습니다.
이상입니다.
그럼 즐거운 크리스마스 되세요~
감사합니다 !!!
2012-12-24
2463
글번호 221879
답변완료
[386]관련 추가 질문
안녕하세요~
답변 잘 받았습니다.
정정주문과 관련하여 추가로 몇가지 질문이 있습니다.
function Chart1_OnRiseSignal(Signal)
{
if (Signal == 3)
Account1.OrderSell(MarketData1.code, Vol, Signal.price, 0);
}
1) 위의 수식에서 YT의 PriceScale 함수를 추가하고 싶은데 가능한지요?
부연하면 'Signal.price - PriceScale'과 같은 의미로 사용하려면
YesSpot에서 PriceScale에 해당하는 함수가 무엇인지요?
2) 위의 수식을 수정한 내용이 맞는지 확인 부탁드립니다.
차트에서 매도신호 발생시 만약 1호가매수잔량 > 1호가매도잔량 상태이면 매도1호가 매도
1호가매수잔량 > 1호가매도잔량 상태가 아니라면 완성봉 가격으로 매도
(물론 경우에 따라서 두가지 경우의 가격이 같을 수도 있겠습니다)
Sellid 와 Sellfill은 이후 정정을 위한 변수입니다.
function Chart1_OnRiseSignal(Signal)
{
if (Signal == 3)
{
if (MarketData1.BidAmount(1) > MarketData1.AskAmount(1))
{
Sellid = Account1.OrderSell(MarketData1.code, Vol, MarketData1.Ask(1), 0);
Sellfill = 0;
}
else
{
Sellid = Account1.OrderSell(MarketData1.code, Vol, Signal.price, 0);
Sellfill = 0;
}
}
}
3) 현재 신호발생시의 가격으로 주문후 10초후까지 체결이 안되면 5호가 아래로
정정주문을 내는 것을 시험test중입니다. (MarketData1.Bid(5)로 정정 처리)
그런데 시험test이므로 실제 체결이 안되는 관계로
10초 단위로 계속 정정주문이 발생하는데,
시험적용 상태에서도 실거래에서와 같이 test해 볼 수 있는 방법은 없는지요?
(즉 시험적용 상태에서도 정정가격이 체결조건을 만족하면 다음 신호까지
추가로 정정주문 발생하지 않도록 함)
이후 정정수식은 하이투 교육시 사용하는 교재의 정정주문 예제에 준하여 작성된 상태입니다.
4) 예스스팟은 언제쯤 모의투자가 가능할까요?
이상입니다.
그럼 즐거운 주말되시기 바라겠습니다.
감사합니다 !!!
2012-12-21
2291
글번호 221873
답변완료
봉완성 가격으로 주문
안녕하세요.
다음 내용 부탁드리겠습니다.
< YT에서 연결선물 분봉을 사용 >
챠트에서 분봉완성 기준으로 260pt 매도신호가 발생하였을 때,
YesSpot에서도 YT의 봉완성 기준가격인 260pt 매도를 하기 위하여
Account1.OrderSell(MarketData1.code, Vol, MarketData1.current, 0);
위와 같이 수식을 작성하였습니다.
(MarketData1은 연결선물 종목객체)
YT에서 봉완성 기준가격으로 주문을 낼 수 있지만 이런 방식을 사용하는 이유는
해당주문에 대한 주문정정을 여러가지 형태로 YesSpot에서 실행하기 위함입니다.
그런데 위의 수식을 test해 본 결과,
봉완성 기준가격으로 주문이 발생되지 않고
'주문발생시점의 가격'을 기준으로 매도주문이 실행됩니다.
예를들어 분봉완성 기준가격이 260pt이고
이후 첫시세가 259.95pt에 형성되었다면 259.95pt로 매도주문 발생합니다.
챠트의 봉완성 기준가격으로 주문이 발생하도록 하려면
위의 수식을 어떻게 수정하여야 하는지 부탁드리겠습니다.
감사합니다 !!!
2012-12-20
2439
글번호 221867