예스스탁
예스스탁 답변
2017-02-11 11:37:20
안녕하세요
예스스탁입니다.
예스스팟 수식답변은 가이드 정도만 제공됩니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
var pst,STOP;
function Main_OnStart()
{
pst = 0;
STOP = false;
Main.SetTimer(1, 5000);
}
function Chart1_OnRiseSignal(Signal)
{
if (STOP == false)
{
if (Signal.signalKind == 1)
{
pst = 1;
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(1), 2);
Main.SetTimer(2, 1000);
}
if (pst == 1 && Signal.signalKind == 2)
{
pst = 0;
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Bid(1), 2);
}
if (Signal.signalKind == 3)
{
pst = -1;
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Bid(1), 2);
Main.SetTimer(3, 1000);
}
if (pst == -1 && Signal.signalKind == 4)
{
pst = 0;
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(1), 2);
}
}
}
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
var VV = Account1.GetBalanceETCinfo(9);//계좌총자산가치(USD로만 제공됨)
//지정한 달라 이하이면 STOP변수를 true로 만들고 잔고 모든 종목 청산
if (VV <= 50000)
{
STOP = true;
Main.KillTimer(1);
var num = Account1.GetTheNumberOfBalances();
for (var i = 0; i < num; i++)
{
Account1.SetBalanceIndex(i);
if (Account1.Balance.position == 2)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
if (Account1.Balance.position == 1)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
}
}
}
}
//2번타이머 실행되고 pst는 1일때
if (nEventID == 2 && pst == 1)
{
//현재가가 평단가 대비 50틱 이하이면
//청산주문후 pst는 0으로 변경하고 타이머 종료
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.position == 2 && Account1.Balance.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*50)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
pst = 0;
Main.KillTimer(2);
}
//차트의 현재봉 고가와 저가 차이가 20틱이상이면
//청산주문후 pst는 0으로 변경하고 타이머 종료
if (Account1.Balance.position == 2 && Chart1.GetHigh(1, 0) >= Chart1.GetLow(1, 0) + MarketData1.GetTickSize()*20)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
pst = 0;
Main.KillTimer(2);
}
}
//3번타이머 실행되고 pst는 -1일때
if (nEventID == 3 && pst == -1)
{
//현재가가 평단가 대비 50틱 이상이면
//청산주문후 pst는 0으로 변경하고 타이머 종료
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.position == 1 && Account1.Balance.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*50)
{
Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1);
pst = 0;
}
//차트의 현재봉 고가와 저가 차이가 20틱이상이면
//청산주문후 pst는 0으로 변경하고 타이머 종료
if (Account1.Balance.position == 1 && Chart1.GetHigh(1, 0) >= Chart1.GetLow(1, 0) + MarketData1.GetTickSize()*20)
{
Account1.OrderSell(Account1.Balance.code, Account1.Balance.count, 0, 1);
pst = 0;
Main.KillTimer(3);
}
}
}
즐거운 하루되세요
> 율담 님이 쓴 글입니다.
> 제목 : 수식문의드립니다
> 예스글로벌신호를 이용해서 예스스팟으로 계좌에 주문을 넣고 있습니다.
예스글로벌신호는 15분봉을 사용하는데요. 봉완성시 주문입니다.
때문에 시장의 급변동시 실시간으로 청산주문을 넣지를 못하고 있습니다.
예스스팟으로 이를 컨트롤하려고 하는데요. 질문드립니다.
1. 계좌의 잔고가 A금액 이하일때 포지션 전부 청산하고 이후 진입주문 금지.
2. 현재 신호를 3가지 사용하고있습니다. 각 신호별 실시간 손실틱이 B 이상일때 해당 시스템 청산후 다음에 따라오는 시스템 청산신호 1회 무시
3. 15분봉길이가(고가-저가) C틱 이상일때 시스템 청산후 다음에 따라오는 시스템 청산신호 1회 무시
예스스팟으로 강제 손절처리가 되는경우.. 시스템의 정상 청산신호가 발생시 다시 포지션이 생길것 같습니다. 이에 대한 해결방안도 참고해주시길 바랍니다.