예스스탁
예스스탁 답변
2021-03-02 13:36:11
안녕하세요
예스스탁입니다.
아래 가이드 수식 참고하셔서 수정보완해 사용하시기 바랍니다.
동일종목의 차트를 2개 열어야 하고 구분할 필요가 있어서
주기를 구분할 수 있는 지표를 하나더 추가하셔야 합니다.
Plot1(DataCompress);
DataCompress라는 이름으로 아래 내용을 지표식으로 작성해 추가하고 이용하셔야 합니다.
차트생성시 해당 지표도 같이 적용해서 틱봉인지 분봉이지 구분하는데 사용됩니다.
수식안에서 차트와 종목객체가 만들어 지므로
스크립트 객체화면에는 계좌객체만 있으면 됩니다.
var 지표이름1 = "파라볼릭";
var 지표이름2 = "단순이동평균1";
var 지표이름3 = "Datacompress";
var Req,Tchart,Mchart,Bcond;
//스팟시작
function Main_OnStart()
{
//차트설정(연결선물,20틱,봉수 5000개,갭보정안함,수정주가처리안함)
var ChartSet = new ReqChartItem("00000000",20,CHART_PERIOD_TICK,5000,CHART_REQCOUNT_BAR,false,false);
//차트에 적용할 지표
var IndiSet = new Array(new IndicatorInfo(지표이름1),new IndicatorInfo(지표이름2));
Main.ReqChartEx(ChartSet,null,IndiSet);
Req = 0;
Bcond = false;
}
function Main_OnRcvChartEx(ChartEx)
{
//최초 생성차트
if (Req == 0)
{
//TChart에 차트객체 저장
Tchart = ChartEx;
//차트설정(연결선물,1분,봉수 5000개,갭보정안함,수정주가처리안함)
var ChartSet = new ReqChartItem("00000000",1,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false);
//차트에 적용할 지표
var IndiSet = new Array(new IndicatorInfo(지표이름1),new IndicatorInfo(지표이름2));
Main.ReqChartEx(ChartSet,null,IndiSet);
Req = 1;
}
//두분째 생성차트
if (Req == 1)
{
//MChart에 차트객체 저장
Mchart = ChartEx;
Req = 2;
//연결선물 종목객체 생성요청
Main.ReqMarketData("00000000");
}
}
function Main_OnRcvMarketData(MarketData)
{
//종목객체가 생성되면 MK에 저장
if (Req == 2 && MarketData.code == "00000000")
{
MK = MarketData;
Req = 3;
}
}
//차트 봉완성
function Main_OnBarAppended(ChartEx, nData)
{
//봉완성차트가 틱봉이고 당일 첫봉 완성이면
if (ChartEx.GetIndicatorData(지표이름3 ,1,0) == 0 &&
Tchart.GetSDate(1,1) != Tchart.GetSDate(1,2))
{
//첫봉종가저장
C1 = Tchart.GetClose(1, 1);
//첫봉 파라볼릭값저장
V1 = Tchart.GetIndicatorData(지표이름1, 1, 1);
}
//봉완성차트가 분봉이고 당일 첫봉 완성이면
if (ChartEx.GetIndicatorData(지표이름3 ,1,0) == 2 &&
Mchart.GetSDate(1,1) != Mchart.GetSDate(1,2))
{
//틱봉 당일첫봉의 종가가 파라볼릭보다 크고
//분봉의 종가가 이동평규보다 크면 1계약 매수
if (C1 > 0 && V1 > 0 && C1 > V1 &&
Mchart.GetClose(1, 1) > Mchart.GetIndicatorData(지표이름2, 1, 1))
{
BID = Account1.OrderBuy(Main.GetOrderCode(MK.code), 1, MK.Ask(3), 0);
Bcond = true;
}
}
//매수주문을 했고
//봉완성차트가 분봉이고 당일 두번쨰봉 이후에
if (Bcond == true &&
ChartEx.GetIndicatorData(지표이름3 ,1,0) == 2 &&
Mchart.GetSDate(1,1) == Mchart.GetSDate(1,2) )
{
//진임주문이 미체결이면 취소
Account1.SetUnfill(Bnum);
if (Account1.Unfill.count)
{
Account1.OrderCancel(Bnum)
}
Account1.SetBalance(Main.GetOrderCode(MK.code),0);
//매수진고가 있고
//분봉의 종가가 이동평규보다 작으면 1계약 청산
if (Account1.Balance.count > 0 && Account1.Balance.position == 2 &&
Mchart.GetClose(1, 1) < Mchart.GetIndicatorData(지표이름2, 1, 1))
{
Account1.OrderSell(Main.GetOrderCode(MK.code), 1, MK.Bid(3), 0);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
//매수진입주문 주문번호 저장
if (OrderResponse.orderID == BID)
{
Bnum = OrderResponse.orderNum;
}
}
즐거운 하루되세요
> 폭포왕 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
> 안녕하세요.
예스스팟에 갓 입문한 왕초보입니다. 아래 조건으로 가이드만 잡아 주시면 추가 코드 작성에 많은 도음이 될것 같습니다. 수식 부탁드립니다.
- 국내선물 차트는 2개(20틱봉 차트, 1분봉 차트)를 이용.
- 지표이름을 지정해 각 차트에 적용.
- 9시 장 시작했을 때 틱봉차트에서 첫번째 20틱 양봉 종가 > sar(0.02, 0.2) 이고 분봉차트에서 1분봉 종가 > ma(10) 일때 1분봉 매수 진입하고 1분봉 종가 < ma(10) 일때 매수 청산
감사합니다.