커뮤니티
문의 드립니다.
2015-05-29 16:32:19
154
글번호 86573
GetUnclearedDeposits("") 함수에 대해 문의 드립니다.
GetUnclearedDepostis 함수를 이용해서 짠 전략을 실전에 적용시켰는데
제가 생각했던 청산이 이뤄어지지 않아서 다시 질문드립니다.
위의 함수는 선물잔고의 예탁총액을 리턴하는 것으로 알고 있습니다.
예탁총액이 현재 5천만원이면 50000000 을 리턴. 맞나요?
그렇다면 제가 아침에 선물계좌에 돈을 5천만원 넣어놓고
전략 3개를 걸어놓고
각 전략마다
if marketposition == 1
and GetUnclearedDeposits("3333-3333-31") < 49000000
then exitlong();
위의 수식을 넣어두면
계좌의 총손실이 백만원을 넘어서서
선물계좌의 예탁총액이 4천9백만원 아래로 내려가면
현재 보유수량은 각 전략의 주기에 맞춰서 다 청산되어야하지 않나요?
[ 잔고관련 함수는 사용자 PC의 "가원장"기능을 이용하는 것으로서 주문접수/체결응답이
실제 원장과 가원장에 도달하고 처리되는 시차와 데이터의 유실 등으로 인해
차이가 발생할 수 있습니다.
사용자는 반드시 적절한 시점에 잔고조회 등을 통해 가원장의 상태를
원장의 상태와 동기화 될 수 있도록 조치 하여야 합니다. ]
위의 설명은 함수의 예제에 나오는 내용인데, 그 의미가 좀 헷갈립니다.
원장과 가원장이 도달 처리시간 때문에 1분정도 틀릴수 있다는 의미인지,
아니면 전략실행시 예탁총액 창을 띄우고 수시로 조회를 해줘야한다는 의미인지 ?
또 예탁총액이란게 정확하게 어떤 의미인가요?
선물이 익일결제니까 오늘의 손익은 예탁총액에는 적용되지 않을 수도...
만약 그렇다면 당일의 선물계좌의 평가손익을 반환하는 함수는 있나요?
있다면 어떤 함수인지 ?
만약에 없다면 하나 새로 만들어 주실 것을 강력하게 건의합니다.
하이투자증권의 예스트레이더 1205 창의 총평가손익을 리턴해주는 함수 말입니다.
가칭 GetAccountOpenPL ^^
꼭 좀 부탁드립니다.
좋은 하루 되세요. ^^
답변 1
예스스탁 예스스탁 답변
2015-05-29 17:14:11
안녕하세요
예스스탁입니다.
아래 내용 참고하시기 바랍니다.
모든 매수/매도청산 주문은 매도 5호가
매도/매수청산 주문은 매수5호가로 발생하게 작성했습니다.
선물 잔고에 -백만원 손실이 발생하면
전량 청산하고 차트에서 신호가 발생해도 더이상 주문을 하지 않습니다.
시세 수신될때마다 체크를 하면 부하가 심할것 같아 잔고는 5초마다 한번씩만 체크하게 했습니다.
스크립트 객체화면 설정
계좌객체 추가 --> 속성에서 객체명은 Account1, 계좌번호 지정
종목객체 추가 --> 속성에서 연결선물로 지정
차트객체 추가 --> 속성에서 객체명은 Chart1, A전략이 적용된 차트와 동일 아이디를 지정
차트객체 추가 --> 속성에서 객체명은 Chart2, B전략이 적용된 차트와 동일 아이디를 지정
차트객체 추가 --> 속성에서 객체명은 Chart3, C전략이 적용된 차트와 동일 아이디를 지정
객체설정방법은 도움말 참고하시기 바랍니다.
var Entry = false;
function Main_OnStart()
{
Main.MessageList("Spot Start")
Entry = true;
Main.SetTimer(1, 5000);//잔고감시 5초단위
}
//1번차트신호
function Chart1_OnRiseSignal(Signal)
{
if (Entry == true)
{
if (Signal.signalKind == 1)//Buy발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
if (Signal.signalKind == 2)//exitlong발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 3)//sell발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 4)//exitshort발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
}
}
//2번차트신호
function Chart2_OnRiseSignal(Signal)
{
if (Entry == true)
{
if (Signal.signalKind == 1)//Buy발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
if (Signal.signalKind == 2)//exitlong발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 3)//sell발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 4)//exitshort발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
}
}
//3번차트신호
function Chart3_OnRiseSignal(Signal)
{
if (Entry == true)
{
if (Signal.signalKind == 1)//Buy발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
if (Signal.signalKind == 2)//exitlong발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 3)//sell발생
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Bid(5), 0);
if (Signal.signalKind == 4)//exitshort발생
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1,MarketData1.Ask(5), 0);
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && MarketData1.open > 0)
{
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
{
//잔고가 매도포지션
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
//손익이 -백만원 이면 전량청산하고
// Entry변수를 false로 만들어 차트에서 신호가 발생해도 더이상 진입을 하지 않게 함
var PL = (Account1.Balance.avgUnitCost-MarketData1.current)*Account1.Balance.count;
if ( PL*500000 <= -1000000 )
{
Entry = false;
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,MarketData1.Ask(5), 0);
}
}
//잔고가 매수포지션
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
//손익이 -백만원 이면 전량청산하고
// Entry변수를 false로 만들어 차트에서 신호가 발생해도 더이상 진입을 하지 않게 함
var PL = (Account1.Balance.avgUnitCost-MarketData1.current)*Account1.Balance.count;
if ( PL*500000 <= -1000000 )
{
Entry = false;
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MarketData1.Bid(5), 0);
}
}
}
}
}
즐거운 하루되세요
> 자오지환웅 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> GetUnclearedDeposits("") 함수에 대해 문의 드립니다.
GetUnclearedDepostis 함수를 이용해서 짠 전략을 실전에 적용시켰는데
제가 생각했던 청산이 이뤄어지지 않아서 다시 질문드립니다.
위의 함수는 선물잔고의 예탁총액을 리턴하는 것으로 알고 있습니다.
예탁총액이 현재 5천만원이면 50000000 을 리턴. 맞나요?
그렇다면 제가 아침에 선물계좌에 돈을 5천만원 넣어놓고
전략 3개를 걸어놓고
각 전략마다
if marketposition == 1
and GetUnclearedDeposits("3333-3333-31") < 49000000
then exitlong();
위의 수식을 넣어두면
계좌의 총손실이 백만원을 넘어서서
선물계좌의 예탁총액이 4천9백만원 아래로 내려가면
현재 보유수량은 각 전략의 주기에 맞춰서 다 청산되어야하지 않나요?
[ 잔고관련 함수는 사용자 PC의 "가원장"기능을 이용하는 것으로서 주문접수/체결응답이
실제 원장과 가원장에 도달하고 처리되는 시차와 데이터의 유실 등으로 인해
차이가 발생할 수 있습니다.
사용자는 반드시 적절한 시점에 잔고조회 등을 통해 가원장의 상태를
원장의 상태와 동기화 될 수 있도록 조치 하여야 합니다. ]
위의 설명은 함수의 예제에 나오는 내용인데, 그 의미가 좀 헷갈립니다.
원장과 가원장이 도달 처리시간 때문에 1분정도 틀릴수 있다는 의미인지,
아니면 전략실행시 예탁총액 창을 띄우고 수시로 조회를 해줘야한다는 의미인지 ?
또 예탁총액이란게 정확하게 어떤 의미인가요?
선물이 익일결제니까 오늘의 손익은 예탁총액에는 적용되지 않을 수도...
만약 그렇다면 당일의 선물계좌의 평가손익을 반환하는 함수는 있나요?
있다면 어떤 함수인지 ?
만약에 없다면 하나 새로 만들어 주실 것을 강력하게 건의합니다.
하이투자증권의 예스트레이더 1205 창의 총평가손익을 리턴해주는 함수 말입니다.
가칭 GetAccountOpenPL ^^
꼭 좀 부탁드립니다.
좋은 하루 되세요. ^^
다음글
이전글