답변완료
주문 오류
NH선물(YesGlobal) 해외선물 자동매매 시스템 개발 중입니다.
모의투자로 운용을 해봤는데 몇가지 오류가 발생되어 문의 드립니다.
포지션 진입 후 정해진 룰에 따라 손절과 수익청산을 하는데
1. 손절, 수익청산 시장가 청산 시
손절 시 청산 주문이 시장가로 나가는데, 체결이 안되고
체결이 안되니까 손절 조건이 계속 성립하여 청산주문이
증거금이 부족할 때 까지 계속 나갑니다.
function Main_OnUp*dateMarket(sItemCode, lUp*dateID)
{
Account1.SetBalanceItem(OrderCode1);
if (Account1.Balance.position == 2 && Account1.Balance.count > 0)
{
...
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
...
}
}
체결이 안되는 이유가 뭘까요?
2. 손절, 수익 청산시 호가(10) 으로 청산 시
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, MarketData1.Bid(10), 0);
시장가로 청산하면 이상하게 청산이 안되서 이렇게 10번째 호가로 주문을 해도
에러가 납니다.
에러 메시지는 "가격 구분값 오류로 주문이 자체 거부되었습니다." 입니다.
감사합니다. ^^
2016-02-22
2269
글번호 223826
답변완료
양매도 문의
안녕하세요~ 항상 답변 감사히 받고 있습니다.
아래식은 선물매도시 콜풋양매도, 선물매도청산시 양매도 청산 스팟식입니다.
다음과 같이 변경하고 싶습니다.
당일 양매도 전략인데요
ㅁㅁ진입
- 선물매도신호 --> 스팟 콜,풋 양매도 ---> 12시 이전이고 포지션 평균수익이 0.1P
이상이면 ---> 스팟 콜, 풋 양매도 1SET 추가 ---> 이후 12시 이전이고 포지션
평균수익(총수익/4계약) 0.13P 이상이면 ---> 스팟 콜, 풋 양매도 1SET 추가(최대3SET)
*첫진입, 추가진입하는 옵션의 종목은 항상 설정값(0.7~2.9) 사이에 있음
ㅁㅁ청산
- 1SET 양매도 진입후 포지션 평균수익이 -0.15P이상이면 양매도 청산(2계약 청산)
- 2SET 양매도 진입후 포지션 평균수익이 -0.10P이상이면 양매도 청산(4계약 청산)
- 3SET 양매도 진입후 포지션 평균수익이 -0.05P이상이면 양매도 청산(6계약 청산)
- 선물매도청산 신호시 옵션 모든 포지션 청산
- 한번 청산하면 당일 재진입 없음
ㅁ 코딩 실력이 많이 부족하오니 주석도 부탁드립니다. 진심으로 미리 감사합니다.
============================================================================
var Start = 0;
var BC;
var BP;
var Bcount;
var SC;
var SP;
var Scount;
var upv = 2.9;
var dnv = 0.7;
function Main_OnStart()
{
Start = 0;
Main.MessageList("시작",Start);
}
function Chart1_OnRiseSignal(Signal)
{
//차트에서 매도신호 발생
if (Signal.signalKind == 3)
{
//ATM위 행사가 갯수
var UNum = Option.uppersATM;
//ATM아래 행사가 갯수
var LNum = Option.lowersATM;
//각 행사가의 콜종목의 종목코드를 저장할 변수를 배열변수로 선언
var CallCode = new Array(UNum+LNum+1);
//각 행사가의 콜종목의 현재가를 저장할 변수를 배열변수로 선언
var CallPrice = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 종목코드를 저장할 변수를 배열변수로 선언
var PutCode = new Array(UNum+LNum+1);
//각 행사가의 풋종목의 현재가를 저장할 변수를 배열변수로 선언
var PutPrice = new Array(UNum+LNum+1);
//콜종목 찾기
//콜옵션은 ATM기준 위행사가 +단계, 아래가 -단계이므로
//for문에서 LNum의 역수부터 시작해서 UNum까지 1씩 증가하면서 수행하도록 함
for (var i = -LNum; i <= UNum; i++)
{
//값이 0.7~2.9사이이면
if (Option.GetCurrent(0, i) >= dnv && Option.GetCurrent(0, i) <= upv)
{
//해당종목의 현재가를 배열변수 CallPrice의 방번호 i+LNum에 저장
CallPrice[i+LNum] = Option.GetCurrent(0, i);
//해당종목의 종목코드를 배열변수 CallCode의 방번호 i+LNum에 저장
CallCode[i+LNum] = Option.GetATMCallRecent(i);
//주의
//배열변수의 방(공간)번호은 -가 없으므로 최하단 행사가를 0번방부터
//저장하도록 작성해야 함
}
else//0.7~2.9 사이가 아니면
{
//배열변수 CallPrice의 방번호 i+LNum에 -1 저장
CallPrice[i+LNum] = -1;
//배열변수 CallCode의 방번호 i+LNum에 -1 저장
CallCode[i+LNum] = -1;
}
}
//풋종목 찾기
//풋옵션은 ATM기준 아래 행사가 +단계, 위가 -단계이므로
//for문에서 HNum의 역수부터 시작해서 LNum까지 1씩 증가하면서 수행하도록 함
for (var i = -UNum; i <= LNum; i++)
{
//값이 0.7~2.9사이이면
if (Option.GetCurrent(1, i) >= dnv && Option.GetCurrent(1, i) <= upv )
{
//해당종목의 현재가를 배열변수 PutPrice의 방번호 ii+LNum에 저장
PutPrice[i+UNum] = Option.GetCurrent(1, i);
//해당종목의 현재가를 배열변수 PutCode의 방번호 ii+LNum에 저장
PutCode[i+UNum] = Option.GetATMPutRecent(i);
}
else //2.0보다 크면
{
//배열변수 PutPrice의 방번호 ii+LNum에 -1 저장
PutPrice[i+UNum] = -1;
//배열변수 PutCode의 방번호 ii+LNum에 -1 저장
PutCode[i+UNum] = -1;
}
}
//배열변수 CallPrice의 각 배열방의 값중 가장 큰값을 찾아 CC에 저장하고
//CallCode의 동일 방번호의 값을 CallOrderCode에 저장
var CC = -1;
var CallOrderCode = -1;
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] > CC)
{
CC = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
//배열변수 PutPrice의 각 배열방의 값중 가장 큰값을 찾아 PP에 저장하고
//PutCode의 동일 방번호의 값을 PutOrderCode에 저장
var PP = -1;
var PutOrderCode = -1;
for (var i = -UNum; i <= LNum; i++)
{
if (PutPrice[i+UNum] > PP)
{
PP = PutPrice[i+UNum];
PutOrderCode = PutCode[i+UNum];
}
}
if (CC > 0 && PP > 0)
{
Start = -1;
SC = CallOrderCode;
SP = PutOrderCode;
Scount = Signal.count;
Account1.OrderSell(SC,Scount,Option.GetBidByCode(SC,3),0);
Account1.OrderSell(SP,Scount,Option.GetBidByCode(SP,3),0);
}
}
//차트에서 매도청산신호 발생
if (Start == -1 && Signal.signalKind == 4)
{
Start = 0;
Account1.OrderBuy(SC,Scount,Option.GetAskByCode(SC,3),0);
Account1.OrderBuy(SP,Scount,Option.GetAskByCode(SP,3),0);
}
}
=================================================================================
2016-02-18
2198
글번호 223818