1. YS청산코드 일부분입니다. 만약 2.98 호가에서 청산시그널이 발생하면 3.01에 주문이 되는 문제가 발생하면서 YS주문메시지에 "호가단위에 어긋납니다."라는 메시지가 출력이됩니다.
이를 수정부탁드리겠습니다.
if (gPosition == 1 && gSignalKind == SIG_EXITLONG)
{
// gCallOrderCode 잔고 셋팅
CA.SetBalanceItem(gCallOrderCode, 0);
// 잔고에 수량이 존재하면
if (CA.Balance.count > 0)
{
if (Option.GetCurrentByCode(gCallOrderCode) >= 3.0)
var Tick = 0.05;
else
var Tick = 0.01;
var EXLxCallPrice1 = Option.GetCurrentByCode(gCallOrderCode) + Tick * 3;
gEXLxID1 = CA.OrderSell(gCallOrderCode, CA.Balance.count, EXLxCallPrice1, 0);
답변 1
예스스탁
예스스탁 답변
2014-03-26 15:00:01
안녕하세요
예스스탁입니다.
옵션에서 현재가에 n틱을 더하는 내용이므로
해당 부분 경우별로 조건채크해서 값을 지정하셔야 합니다.
아래 내용 참고하시기 바랍니다.
if (gPosition == 1 && gSignalKind == SIG_EXITLONG)
{
CA.SetBalanceItem(gCallOrderCode, 0);
if (CA.Balance.count > 0)
{
if (Option.GetCurrentByCode(gCallOrderCode) >= 3.0)
var Tick = 0.05;
else
var Tick = 0.01;
//먼저 현재가+Tick*3가격 계산(현재가가 2.98이면 3.01)
var EXLxCallPrice1 = Option.GetCurrentByCode(gCallOrderCode) + Tick * 3;
//현재가가 3.0미만이고 EXLxCallPrice1는 3.0을 초과하면 (현재가 2.98,EXLxCallPrice1는 3.01 )
if (Option.GetCurrentByCode(gCallOrderCode) < 3.0 && EXLxCallPrice1+ Tick * 3 > 3.0)
{
//EXLxCallPrice1에서 3.0초과 틱수 계산 (0.01/0.01 = 1)
var Diff = Math.floor((EXLxCallPrice1-3.0)/Tick);
//3.0에 초과틱수에 0.05곱해서 가격계산해서 EXLxCallPrice1에 다시 저장
var EXLxCallPrice1 = 3.0+0.05*Diff;
}
gEXLxID1 = CA.OrderSell(gCallOrderCode, CA.Balance.count, EXLxCallPrice1, 0);
}
}
즐거운 하루되세요
> TRF 님이 쓴 글입니다.
> 제목 : 문의 (YS)
> 1. YS청산코드 일부분입니다. 만약 2.98 호가에서 청산시그널이 발생하면 3.01에 주문이 되는 문제가 발생하면서 YS주문메시지에 "호가단위에 어긋납니다."라는 메시지가 출력이됩니다.
이를 수정부탁드리겠습니다.
if (gPosition == 1 && gSignalKind == SIG_EXITLONG)
{
// gCallOrderCode 잔고 셋팅
CA.SetBalanceItem(gCallOrderCode, 0);
// 잔고에 수량이 존재하면
if (CA.Balance.count > 0)
{
if (Option.GetCurrentByCode(gCallOrderCode) >= 3.0)
var Tick = 0.05;
else
var Tick = 0.01;
var EXLxCallPrice1 = Option.GetCurrentByCode(gCallOrderCode) + Tick * 3;
gEXLxID1 = CA.OrderSell(gCallOrderCode, CA.Balance.count, EXLxCallPrice1, 0);