예스스탁
예스스탁 답변
2019-11-08 17:01:07
안녕하세요
예스스탁입니다.
아래 수식을 참고하셔서 수정보완해 사용하시기 바랍니다.
500봉이 필요하므로 차트객체를 이용해야 합니다.
수식안에서 차트와 종목객체를 생성하므로
스크립트 객채화면에는 계좌객체(Account1)만 추가하시면 됩니다.
var C1 = "069500";
var C2 = "114800";
function Main_OnStart()
{
var CTSet = new ReqChartItem(C1,0,CHART_PERIOD_DAILY,600,CHART_REQCOUNT_BAR,false,false);
Main.ReqChartEx(CTSet);
}
function Main_OnRcvChartEx(ChartEx)
{
if (ChartEx.GetCode(1) == C1)
{
CT1 = ChartEx;
Main.MessageList("차트객체생성 : ",CT1.GetCode(1));
var CTSet = new ReqChartItem(C2,0,CHART_PERIOD_DAILY,600,CHART_REQCOUNT_BAR,false,false);
Main.ReqChartEx(CTSet);
}
if (ChartEx.GetCode(1) == C2)
{
CT2 = ChartEx;
Main.MessageList("차트객체생성 : ",CT2.GetCode(1));
Main.ReqMarketData(C1);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == C1)
{
MK1 = MarketData;
Main.MessageList("종목객체생성 : ",MK1.code);
Main.ReqMarketData(C2);
}
if (MarketData.code == C2)
{
MK2 = MarketData;
Main.MessageList("종목객체생성 : ",MK2.code);
Main.SetTimer(1, 5000);
}
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 084500 && HHMMSS < 085000)
{
Main.KillTimer(1);
var H1 = 0;
var H2 = 0;
for (i = 0; i < 500;i++)
{
if (CT1.GetClose(1,i) > H1)
{
H1 = CT1.GetClose(1,i);
}
if (CT2.GetClose(1,i) > H2)
{
H2 = CT2.GetClose(1,i);
}
}
Main.MessageList(H1,H2);
Main.MessageList("D+2 추정예수금 : ",Account1.GetBalanceETCinfo(39));//NH는 20
Main.MessageList("총평가순자산액 : ",Account1.GetBalanceETCinfo(100));
//NH는 (Account1.GetBalanceETCinfo(20) >= Account1.GetBalanceETCinfo(100)*0.2)
if (Account1.GetBalanceETCinfo(39) >= Account1.GetBalanceETCinfo(100)*0.2)
{
Account1.SetBalance(C1,0);
if (Account1.Balance.count == 0 ||(Account1.Balance.count > 0 &&
Account1.Balance.current <= Account1.Balance.avgUnitCost*1.15 &&
Account1.Balance.count * Account1.Balance.avgUnitCost < 50000000 ))
{
if (CT1.GetClose(1,0) < H1*0.90 && CT1.GetClose(1,0) < CT1.GetClose(1,1))
{
var P1 = CT1.GetClose(1,0);
for (var i = 1; i <= 5; i++)
{
t1 = MK1.GetTickSize(P1);
t2 = MK1.GetTickSize(P1-t1);
if (t1 == t2)
P1 = P1-t1;
else
P1 = P1-t2;
}
Account1.OrderBuy(C1,Math.floor(1000000/P1),P1,0);
}
}
if (Account1.Balance.count > 0 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*1.15)
{
var X1 = CT1.GetClose(1,0);
for (var i = 1; i <= 5; i++)
{
X1 = X1 + MK1.GetTickSize(X1);
}
Account1.OrderSell(C1,Account1.Balance.count,X1,0);
}
Account1.SetBalance(C2,0);
if (Account1.Balance.count == 0 ||(Account1.Balance.count > 0 &&
Account1.Balance.current <= Account1.Balance.avgUnitCost*1.15 &&
Account1.Balance.count * Account1.Balance.avgUnitCost < 50000000 ))
{
if (CT2.GetClose(1,0) < H2*0.90 && CT2.GetClose(1,0) < CT2.GetClose(1,1))
{
var P2 = CT2.GetClose(1,0);
for (var i = 1; i <= 5; i++)
{
t1 = MK2.GetTickSize(P2);
t2 = MK2.GetTickSize(P2-t1);
if (t1 == t2)
P2 = P2-t1;
else
P2 = P2-t2;
}
Account1.OrderBuy(C1,Math.floor(1000000/P2),P2,0);
}
}
if (Account1.Balance.count > 0 &&
Account1.Balance.current >= Account1.Balance.avgUnitCost*1.15)
{
var X2 = CT2.GetClose(1,0);
for (var i = 1; i <= 5; i++)
{
X2 = X2+MK2.GetTickSize(X2);
}
Account1.OrderSell(C2,Account1.Balance.count,X2,0);
}
}
}
}
즐거운 하루되세요
> 새로운세상 님이 쓴 글입니다.
> 제목 : KODEX200 , KODEX인버스
> 안녕하세요
다음 수식 부탁드립니다.
KODEX200 , KODEX인버스 두종목 모두 일봉을 사용하여
당일 장개시전 08:45 ~ 08:55 에 '전일종가 +- 5tick' 기준으로 주문하는 방식으로,
주문후 당일 미체결되어도 상관없습니다.
두종목 모두 다음 기준에 의해 매매되며, YT 및 차트 등은 사용하지 않고
예스스팟 수식만으로 거래하고 싶습니다.
---> 매뉴얼에 종목객체 일봉의 경우 최대 300개로 한정이 되어 있는데
만약 500 봉이 불가하다면, 차트 불러오는 방법으로 부탁드립니다.
(어느 경우든 YT 수식은 사용하지 않음)
< 매수주문 기준 >
1) D+2 기준으로 계좌의 예수금잔고가 총평가순자산액의 20% 이상이고
2) 종목당 총투자금액이 5천만원 이하일 때 <--- 5천만원 이하인 종목은 매수조건 만족시 계속 주문
3) 일봉기준 최근 500 봉 종가기준 최고가로 부터 10% 이상 전일종가가 하락하고
4) '전일종가 < 전전일종가' 일 경우 100 만원이하 금액으로 08:45 ~ 08:55 '전일종가 - 5tick'으로 매수 주문
< 매도주문 기준 >
종목의 평균매입가 대비 15%이상 수익시 잔고 전량을 08:45 ~ 08:55 '전일종가 + 5tick'으로 매도 주문
< 기타 사항 >
객체 및 변수 등 설정해야 할 부분이 있다면 부탁드립니다.
이상입니다
감사합니다 !!