커뮤니티
질문 드립니다.
2013-11-22 01:18:46
316
글번호 69725
안녕하세요.
항상 친절하신 답변 감사드립니다.
예스랭귀지로 만드는 시스템에서 애로사항을 느끼는 점으로, buy나 sell 등의 매매함수가 작동이 됐을 때 (즉 주문이 나갔을 때), 실제로 주문이 체결되었는지 안되었는지에 관계 없이 marketposition 수가 1이냐 -1이냐 등이 정해 져서 실제로는 잔고가 없는데 청산함수 exitlong 등이 나갈 수 있는 문제점을 보게 됩니다.
(매수주문만 나가고 체결은 안 된 상태에서, 매수청산주문이 나가서 체결되는 바람에 원치 않았던 숏포지션이 생겨 버린다든지...)
(매수1계약-청산, 매수1계약-청산 이런 과정을 원하는데, 주문발주로만 이렇게 되고 실제로는 매수1-매수1-매수1... 이렇게 돼서 매수계약수가 쌓여 버린다든지... 마찬가지로 매도계약만 쌓여 버린다든지)
이런 문제를 예스랭귀지상에서 조금이라도 감소시킬 수 있는 방법이, 예스랭귀지의 '잔고함수들'을 써서 가능하지 않을까 싶은데,
잔고함수들을 적절히 사용해서,
1.
진입주문이 체결되지 않았을 때에는 청산주문이 나가지 않고
실제로 진입주문이 체결됐을 때에만, 즉 잔고가 생겨났을 때에만 청산주문이 나가게 되고,
그 청산주문이 체결돼서 잔고가 없어 졌을 때에만 다음의 새로운 진입주문이 나가게 되는,
그런 소스의 예제를 보여 주시면 대단히 감사하겠습니다.
////////// ////////// ////////// ////////// ////////// ////////// //////////
2.
위에서 말한 측면들과 관련하여,
예스랭귀지의 잔고함수들 중에서,
GetNumAccounts, GetNumPositions, GetPositionQuantity 등의 함수를 적절히 활용하면,
스팟에서의 여러 객체들의 기능을 활용하여 주문이 체결되었는지 아닌지를 구분하여 대응할 수 있는 것과 매우 유사한 소스를 작성할 수 있을 것 같은데,
이와 관련된 예제를 보여 주시면 대단히 감사하겠습니다.
(예:
2-1. 스팟에서 미체결 상태를 확인해서 그 경우에 미체결 주문을 취소나 정정할 수 있는 것과 유사하게,
예스랭귀지의 경우 주문 취소기능은 없지만, 청산 주문은 나가지 않을 수 있게, 최소한 미체결 상태를 확인하는 예스랭귀지 코드.
2-2. 스팟에서 미결제 상태를 확인해서, 그 경우에 그 미결제 잔고에 대해 청산주문을 내게 할 수 있는 것과 같이,
예스랭귀지에서, 직전에 낸 진입 주문이 체결되어 미결제 잔고가 생성되었고, 따라서 이 게 확인된 상태에서만, 이와 관련된 청산 주문이 나갈 수 있게 하는 예스랭귀지 코드.
*즉,
If 2-1과 같이, 아직 체결이 되지 않은 게 확인되면, 이어지는 청산주문은 없도록 하고,
Else 2-2와 같이, 직전에 낸 진입주문이 체결된 것이 확인되면, 비로소 청산주문이 나가도록 하는 YesLanguage Codes)
////////// ////////// ////////// ////////// ////////// ////////// //////////
3.
이런 기법들을 쓸 때에도, 가원장 상태와 진원장 상태가 다름으로써, 즉 양자가 일치하게 되는 몇초간의 시차 사이에서도 문제가 발생할 수 있을텐데, 이런 문제를 최소화할 수 있는 방법도 예제로 보여 주시면 대단히 감사하겠습니다.
감사합니다.
답변 1
예스스탁 예스스탁 답변
2013-11-22 14:42:04
안녕하세요
예스스스탁입니다.
예스랭귀지의 잔고함수에서는
현재시점에서 잔고에 특정종목의 수량이 있는지 정도만 파악이 됩니다.
해당 시스템이 낸 주문에 대해 체결여부는 알수가 없습니다.
단순 종목코드를 지정해 해당 종목의 수량이 있는지 여부로만 판단할수가 있습니다.
또한 잔고의 모든 값은 과거봉에는 제공되지 않습니다.
실시간에서 현재봉에서만 값을 리턴합니다.
아래식 내용 참고하시기 바랍니다.
var : cnt(0),Account(""),code(""),Quantity(0),Deposits(0);
Account = "1000-0119-31";#계좌번호
code = "101HC000";#선물 12월물 종목코드
#지정한 계좌의 예수금(리턴값으로 과거봉과 현재봉을 구분하기 위한 용도)
Deposits = GetUnclearedDeposits(Account);
if LastBarOnChart == 1 Then
Condition1 = true;
#Deposits값이 n/A일때(과거봉) 신호
if IsNaN(Deposits) == true Then{
if C > O Then
buy();
if C < O Then
sell();
}
#Deposits값이 n/A가 아닐때(실시간 현재봉)
if isNaN(Deposits) == false Then{
//매수잔고가 0일때만 조건만족하면 진입
if GetPositionQuantity(code, Account,2) == 0 and
매수진입조건 Then
buy();
if GetPositionQuantity(code, Account,2) > 0 and
매수청산조건 Then
ExitLong();
//매도잔고가 0일때만 조건만족하면 진입
if isNaN(Deposits) == false and
GetPositionQuantity(code, Account,1) == 0 and
매도진입조건 Then
sell();
if GetPositionQuantity(code, Account,1) > 0 and
매도청산조건 Then
ExitShort();
}
가원장과 실원장의 동기화는 수식에서 가능하지 않습니다.
3번에 문의하신 내용은 랭귀지에서 처리할 방법이 없습니다.
적정시점에 직접 게좌평가화면등에서 해당 계좌를 직접 재조회를 해주셔야 합니다.
즐거운 하루되세요
> 즐겁게 님이 쓴 글입니다.
> 제목 : 질문 드립니다.
> 안녕하세요.
항상 친절하신 답변 감사드립니다.
예스랭귀지로 만드는 시스템에서 애로사항을 느끼는 점으로, buy나 sell 등의 매매함수가 작동이 됐을 때 (즉 주문이 나갔을 때), 실제로 주문이 체결되었는지 안되었는지에 관계 없이 marketposition 수가 1이냐 -1이냐 등이 정해 져서 실제로는 잔고가 없는데 청산함수 exitlong 등이 나갈 수 있는 문제점을 보게 됩니다.
(매수주문만 나가고 체결은 안 된 상태에서, 매수청산주문이 나가서 체결되는 바람에 원치 않았던 숏포지션이 생겨 버린다든지...)
(매수1계약-청산, 매수1계약-청산 이런 과정을 원하는데, 주문발주로만 이렇게 되고 실제로는 매수1-매수1-매수1... 이렇게 돼서 매수계약수가 쌓여 버린다든지... 마찬가지로 매도계약만 쌓여 버린다든지)
이런 문제를 예스랭귀지상에서 조금이라도 감소시킬 수 있는 방법이, 예스랭귀지의 '잔고함수들'을 써서 가능하지 않을까 싶은데,
잔고함수들을 적절히 사용해서,
1.
진입주문이 체결되지 않았을 때에는 청산주문이 나가지 않고
실제로 진입주문이 체결됐을 때에만, 즉 잔고가 생겨났을 때에만 청산주문이 나가게 되고,
그 청산주문이 체결돼서 잔고가 없어 졌을 때에만 다음의 새로운 진입주문이 나가게 되는,
그런 소스의 예제를 보여 주시면 대단히 감사하겠습니다.
////////// ////////// ////////// ////////// ////////// ////////// //////////
2.
위에서 말한 측면들과 관련하여,
예스랭귀지의 잔고함수들 중에서,
GetNumAccounts, GetNumPositions, GetPositionQuantity 등의 함수를 적절히 활용하면,
스팟에서의 여러 객체들의 기능을 활용하여 주문이 체결되었는지 아닌지를 구분하여 대응할 수 있는 것과 매우 유사한 소스를 작성할 수 있을 것 같은데,
이와 관련된 예제를 보여 주시면 대단히 감사하겠습니다.
(예:
2-1. 스팟에서 미체결 상태를 확인해서 그 경우에 미체결 주문을 취소나 정정할 수 있는 것과 유사하게,
예스랭귀지의 경우 주문 취소기능은 없지만, 청산 주문은 나가지 않을 수 있게, 최소한 미체결 상태를 확인하는 예스랭귀지 코드.
2-2. 스팟에서 미결제 상태를 확인해서, 그 경우에 그 미결제 잔고에 대해 청산주문을 내게 할 수 있는 것과 같이,
예스랭귀지에서, 직전에 낸 진입 주문이 체결되어 미결제 잔고가 생성되었고, 따라서 이 게 확인된 상태에서만, 이와 관련된 청산 주문이 나갈 수 있게 하는 예스랭귀지 코드.
*즉,
If 2-1과 같이, 아직 체결이 되지 않은 게 확인되면, 이어지는 청산주문은 없도록 하고,
Else 2-2와 같이, 직전에 낸 진입주문이 체결된 것이 확인되면, 비로소 청산주문이 나가도록 하는 YesLanguage Codes)
////////// ////////// ////////// ////////// ////////// ////////// //////////
3.
이런 기법들을 쓸 때에도, 가원장 상태와 진원장 상태가 다름으로써, 즉 양자가 일치하게 되는 몇초간의 시차 사이에서도 문제가 발생할 수 있을텐데, 이런 문제를 최소화할 수 있는 방법도 예제로 보여 주시면 대단히 감사하겠습니다.
감사합니다.