예스스탁
예스스탁 답변
2015-11-05 13:25:18
안녕하세요
예스스탁입니다.
스팟 답변은 작성 가이드 정도입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
var Cash,M1,M2,M3;
var BuyID1,BuyID2,BuyID3;
var BuyNum1,BuyNum2,BuyNum3;
var Buy1,Buy2,Buy3,Cancel,Exit;
function Chart1_OnRiseSignal(Signal)
{
//매수신호발생
if (Signal.signalKind == 1)
{
Cash = Account1.GetBalanceETCinfo(18);//주문가능현금
M1 = Cash*0.25;//주문가능현금의 25%
M2 = Cash*0.25;//주문가능현금의 25%
M3 = Cash*0.50;//주문가능현금의 25%
var OP = MarketData1.Ask(3);//주문가격(매도3호가)
BuyID1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Math.floor(M1/OP), OP, 0);
Buy1 = 1;
Buy2 = 0;
Buy3 = 0;
Cancel = false;
Exit = false;
Main.SetTimer(1, 5000);//1번 타이머,5초간격
}
}
//타이머 동작
function Main_OnTimer(nEventID)
{
//1번 타이머
if (nEventID == 1)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
//첫매수 체결통보 수신 후
if (Buy1 == 3 && HHMMSS < 140000)
{
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//두번재 매수, 잔고수량이 0이상이고 현재가가 평단가-10%+1호가에 도달하면 현재가로 주문
if (Buy2 == 0 && Account1.Balance.count > 0 &&
MarketData1.current <= Account1.Balance.avgUnitCost*0.9+MarketData1.GetTickSize())
{
Buy2 = 1;
BuyID2 = Account1.OrderBuy(Signal.code, Math.floor(M2/OP), MarketData1.current, 0);
}
//세번째 매수 , 잔고수량이 0이상이고 현재가가 평단가-10%+1호가에 도달하면 현재가로 주문
if (Buy2 == 3 && Buy3 == 0 && Account1.Balance.count > 0 &&
MarketData1.current <= Account1.Balance.avgUnitCost*0.9+MarketData1.GetTickSize())
{
Buy3 = 1;
BuyID3 = Account1.OrderBuy(Signal.code, Math.floor(M3/OP), MarketData1.current, 0);
}
}
//14시 이후에 미체결 모두 취소(한번만 수행)
if (HHMMSS >= 140000 && Cancel == false)
{
Cancel = true;
var UFnum = Account1.GetTheNumberOfUnfills()
if (UFnum > 0)
{
for(var i = 0; i < UFnum; i++)
{
Account1.SetUnfillIndex(i)
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
}
}
//14시 45분에 이후에 미체결 모두 취소(한번만 수행)
if (HHMMSS >= 144500 && Exit == false)
{
Exit = true;
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1);
}
}
}
}
//주문응답시 주분번호 저장
function Main_OnOrderResponse(OrderResponse)
{
if (BuyID1 == OrderResponse.orderID)
{
BuyNum1 = OrderResponse.orderNum;
Buy1 = 2;
}
if (BuyID2 == OrderResponse.orderID)
{
BuyNum2 = OrderResponse.orderNum;
Buy2 = 2;
}
if (BuyID3 == OrderResponse.orderID)
{
BuyNum3 = OrderResponse.orderNum;
Buy3 = 2;
}
}
//체결응답 각 변수는 true로 변경
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill.orderNum == BuyNum1)
{
Buy1 = 3;
}
if (NotifyFill.orderNum == BuyNum2)
{
Buy2 = 3;
}
if (NotifyFill.orderNum == BuyNum3)
{
Buy3 = 3;
}
}
즐거운 하루되세요
> 대가북극곰 님이 쓴 글입니다.
> 제목 : 예스스팟 수식 문의 드립니다.
> 차트에서 매수 신호가 발생했을 때 비율을 활용하여 분산진입할 예정인데,
처음 매수 때는 총 금액의 25%를 진입하고
두번 째 매수는 해당 매수 평균단가에서 -10%가 되기 바로 전의 호가에서
첫 매수 때 체결된 주문과 같은량을 매수하고
세번 째 매수는 첫번째와 두번째 때 매수된 종목 평균단가에서, 똑같이 -10%가 되기 바로 전의
호가에서 지금까지 체결된 주문과 같은량을 매수 하는 시스템을 만들고 싶습니다.
즉 전량이 체결 된다고 가정할 때, 잔고의 25% 25% 50% 이런 식으로 주문이 들어가도록
하고 싶습니다.
또 14시 정각에 들어간 매수 주문을 전량 취소하고 14시 45분에 포지션에 있는 수량을
전부 청산하는 시스템을 만들고 싶습니다.
도움 부탁드립니다.