답변완료
매매주문시 호가단위 확인 요망
안녕하세요
예스스팟으로 해외선물 자동매매 프로그래밍 구현 중
매수 또는 매수청산 주문시 다음과 같은 에러가 발생되어서 확인 요청드립니다.
-. 종목명 : Japanese Yen-201512
-. 에러메세지 : [TFCA01]호가단위 확인 요망.
-. 발생빈도 : 매수,매수청산시 가끔 ( 매수,매수청산시 정상 체결될때도 있고 위와 같은 에러가 발생될때도 있습니다. )
-. 프로그램 스크립트 :
1.매수 : ID_1B_IN = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 1);
2.매수청산 : ID_1B_OUT = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.current, 1);
그럼 확인부탁드립니다.
2015-09-29
2144
글번호 223667
답변완료
호가로 주문후 체결신호를 리턴받으면 다음 종목을 매수하는식과 간단한 오류 수정 부탁드립니다
안녕하세요
예스 랭기지를 사용하다가 이번에 스팟을 배우게 되었습니다.
그런데 객체 지향 언어에 익숙 하지 않아서 그런지 좀 많이 어렵 습니다.
아래와 같이 간단히 두종목을 비교하여 매수 매도 하는 수식을 짰는데 돌아가지 않습니다.
먼저 제가 작성한 수식을 설명 드리면 Market_L과 Market_S의 값을 가져와 두값을 뺀 Spread_net_C가 현제의 값이 두값을 뺀값으로 20봉의 평균한 Spread_Avr값보다 작으면 커지는 쪽으로 두종목이 서로 반대 방향으로 진입을 한후 두 포지션을 입력하고 청산은 두값의 합이 입력해놓은 원하는 이익값 이상이 되었을떄 일괄로 청산을 하는 프로그램 입니다.
제 질문을 알아보시기 편하게 아래와 같이 순번을 달아 설명 했습니다.
Q1. 어느 부분이 문제인지 수정 부탁 드립니다.
Q2. 진입과 청산 식에 호가가 상대적으로 작아 체결이 어려운 Market_L 을 현제 호가로
주문하고 진입이 되었다는 신호가 확인되면 Market_S을 시장가로 진입 시켜 두종목을
동시에 보유하고 청산시에도 Market_L을 호가로 청산하고 청산이 확인되면 Market_S를
청산 하는식을 만들고싶은데 어떻게 해야할지 모르 겠습니다.
어떻게 하면 가능할지 도와 주세요~
Q3. Market_L과 Market_S를 뺀값에 평균값을 구하는 Spread_Avr 함수에 예스랭기지로
작성한 plot 값을 받아와 구동하게 하였는데 이러한 방법말고 예스스팟에서 바로
작성하여 구동하고 싶습니다. 방법을 알려주세요?
(랭귀지에서는 Spread_Avr = ma(Market_S-Market_L , 20) 이렇게 만들었었습니다.)
Q4. 위 질문 Q3과 같이 구동할 경우 예스 랭기지로 작성된 수식은 봉의 완료시에만 작동
하는 것으로 알고 있는데 제가 알고있는 것이 맞다면 빠르게 실시간으로 수식을 처리
하는 예스 스팟의 시스템과 맞지 않아 문제가 있을수 있을것 같습니다. 이런경우
주의해야 하는 부분이 있다면 알려주세요.
========================================================================================
var Spread_Avr, return_N,Spread_net_C,SP_MEMO ;
/*
Spread_Avr: 두값을 뺀값의 평균값을 넣는 변수
return_N: 이동평균을 구할때 몇봉의 이동평균을 구할지를 결정하는 변수로 사용하려했으나
지표 이름"J007_이동평균 값"에 plot2를 받아 사용하도록 아래 식을 구현 하였기
때문에 아래에서는 사용하지 않는 함수
Spread_net_C: 현제 두값을 뺀 값을 넣는 변수
SP_MEMO : 진입 당시 두값의 차를 기역하고 있다가 현제가와 비교하여 이익을 낼수있는 청산
시점인지를 비교하는 변수
*/
function Main_OnStart() // 수식을 시작합니다.
{
Main.MessageLog("시작"); // 시작 이라고 출력
Start=0; //스타트 0 을 입력하여 진입신호없이 청산신호가 나가는것을 방지
}
function C1_OnRiseSignal(Signal)
{
/* Market_S & Market_L 현제 두 값을 뺀값 측정 */
Spread_net_C= Market_S.current - Market_L.current;
/* Market_S & Market_L의 두 값을 뺀값의 평균값 결정 */
Spread_Avr = C1.GetIndicatorData("J007_이동평균 값", 2,0);
}
//여기서 부터 진입식
function Main_OnRiseSignal(ChartEx, Signal)
{
If (A1.GetTheNumberOfBalances ==0) // 한주문만 들어가도록 A1 계좌에 주문이 없을때는 진입식만 주문이 있을때는 청산 식만 지켜봄
{
if (spread_net_C>0) // Market_L 이 Market_S 보다 작으면
{
SP_MEMO = spread_net_C ; // 두값의 차를 청산때 비교하기 위해 저장해둠
if (spread_net_C < spread_Avr - (PriceScale*Profit_N)
//지금두 값의 차가 "평균치 - 기대수익" 보다 낮을경우 평균치 가까이 갈것으로
//예상하고 커지는 방향으로 진입 "Profit_N"은 외부변수로 설정
/*
아래 진입식은 단순 동시 진입 식이지만 Market_L의경우 물량이 많지않아 지정가로 진입하고 진입되었다는 확인 신호를 받으면
Market_S를 시장가로 진입하여 두종목을 모두 보유하도록(Q2) 수정하고 싶습니다. 도와주세요
*/
{
A1.OrderBuy(Market_S.code, Market_S_lot,Market_S.Bid(2),1);
A1.OrderSell(Market_L.code, Market_L_lot, Market_L.Ask(2),1);
}
}
// 여기서 부터 청산식
else if (A1.GetTheNumberOfBalances != 0)// 포지션이 있는경우 청산식 진입
{
if (spread_net_C >= SP_MEMO - (PriceScale*Profit_N))
// 스프레드 증가방향 진입이고 수익만큼 충분히 증가 되었다면
/*
아래 청산식은 단순 동시 진입 식이지만 Market_L의경우 물량이 많지않아 지정가로 진입하고 진입되었다는 확인 신호를 받으면
Market_S를 시장가로 진입하여 두종목을 모두 보유하도록(Q2) 수정하고 싶습니다. 도와주세요
*/
{
A1.OrderSell (Market_S.code, Market_S_lot,Market_S.Ask(2),1);
A1.OrderBuy(Market_L.code, Market_L_lot, Market_L.Bid(2),1);
}
}
바쁘신 중에도 이렇게 도와주셔서 감사합니다.
2015-09-23
2063
글번호 223660