답변완료
질문드립니다.
다음 수식 문의드립니다.
항상 좋은 답변 감사드립니다.
1. 1분봉 차트(차트1)에서 봉이 완성될때마다 차트2(60분봉)에서의 X지표값을 기억한다. GetIndicatorData함수 활용 (ex: X1, X2, X3...., 메세지 함수로 X지표값 표시)
2. 차트1에서 봉이 완성되는 시점마다 직전봉(-1봉)과 직전전봉(-2봉)의 X지표값이 직전봉이 크다면 -> con=1
직전전봉(-2봉)과 직전전전봉(-3봉)의 X지표값이 직전전봉이 크다면 -> con=2
3. 차트2(60봉)에서 가격이 변동(1틱 상승 또는 하락)될때마다(만약 1틱이 너무 짧다면 5틱의 가격변동) 차트2의 Y지표값을 기억한다. (시계열순서대로 Y1, Y2,, 메시지 함수로 현재 최종 Y지표값 표시)
4. 차트2(60봉)에서 당일 고가인 경우 차트2의 Z지표값을 기억한다.(Z high 1) 또한 당일 저가인 경우 차트2의 Z지표값을 기억한다. (Z Low 1, 메시지 함수 표시)
당일 고가나 저가가 갱신되는 경우 기존의 지표값을 삭제하지 않고 Z지표값을 새롭게 기억한다.(Z high 2 표시)
감사합니다.
2023-09-22
925
글번호 225842
답변완료
종목검색 후 자동매매(3) _ 검색종목의 선별작업
안녕하세요.
약 5년전에(2018년5월) 질문드리고 다시 돌아왔습니다. ^^;;
요점을 간단하게 말씀드리면,
아래의 방법이 파워종목검색식으로 종목을 검색하고, 확장차트를 생성한 다음에, 시스템식으로 시그널이 발생하면 바로바로 매수하는 로직인데요.
여기서 발전해서 종가에 매수를 하려고 합니다.
15시10분에 파워종목검색식으로 종목을 검색하고, , 확장차트를 생성한 다음에, 시스템식으로 시그널이 발생하는데요.
약 20개 종목에서 동시에 시그널이 발생하고 있습니다.
이 중에서 특정 선별조건으로(예, RSI가 가장 큰 순으로) 5개 종목만 골라서 매수하려고 하는데,
이 부분을 예스스팟에서 구현할 수 있을까요?
언제나 감사드립니다.
수고하세요.
######################################################################### #########################################################################
1. 2분간격으로 사용자 종목검색을 지속적으로 수행
2. 새로 검색된 종목에 대해 차트 생성, 기존 검색된 차트는 유지
3. 종목검색에서 새로 파악된 종목을 종목차트로 시스템 적용
4. 생성된 차트에 시스템 적용
5. 차트 생성이 50개가 되면 새 종목 추가 완료
아래 내용은 다른분이 이전에 질문한 답변입니다.
여기에서 파워종목검색이 2분간격시간에 따라 추가되는 종목에 대한 추가 매수는 어떻게 하면 좋을까요?
var ItemList;
var Count;
var ReqCount;
function Main_OnStart()
{
Main.MessageLog("스팟시작");
Main.MessageLog("종목검색시작");
Main.ReqPowerSearch("전략1");
}
function Main_OnRcvItemList(aItemList, nCount)
{
ItemList = aItemList;
Count = nCount;
Main.SetTimer(1, 1000);
ReqCount = 0;
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
var StopSet = new SystemStopInfo(new StopLoss(4, CALCMETHOD_PERCENT, 0xFFDA93),
new StopTrailing(2, 5, CALCMETHOD_PERCENT, 0),
//new StopProfitTarget(10, CALCMETHOD_PERCENT, 0xFFDA93),
//new StopInactivity(0.5, 6, CALCMETHOD_PERCENT, 0xFFDA93),
new StopEndOfDay(151500));
var ChartSet = new ReqChartItem(ItemList[ReqCount],3,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,StopSet);
var SystemSet = new SystemInfo("10전략1", YL_TYPE_NORMAL, null, null, null);
Main.ReqChartEx(ChartSet,SystemSet);
Main.MessageLog("확장차트생성_"+ItemList[ReqCount]);
ReqCount = ReqCount+1;
if (ReqCount == Count)
{
Main.KillTimer(1);
Main.MessageLog("종목검색완료");
}
}
}
//신호발생
function Main_OnRiseSignal(ChartEx, Signal)
{
//신호발생 종목에 대해 잔고셋팅
Account1.SetBalance(Main.GetOrderCode(Signal.code),0);
//매수신호이고 잔고가 없을때만 매수
if (Signal.signalKind == 1 && Account1.Balance.count == 0)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Math.floor(100000/ChartEx.GetClose(1,0)),0,1);
Main.MessageLog("매수주문");
}
if (Signal.signalKind == 2)
{
//전체미체결주문 갯수
var num = Account1.GetTheNumberOfUnfills();
//전체 미체결수 만큼 루프를 돌면서
for (var i = 0; i < num; i++)
{
//미체결을 하나씩 셋팅하고
Account1.SetUnfill(i);
//미체결종목이 신호종목과 같고 미체결수량이 있으면
if (Account1.Unfill.code == Main.GetOrderCode(Signal.code) && Account1.Unfill.count > 0)
{
Account1.OrderCancel(Account1.Unfill.orderNum);
}
}
//잔고수량만큼만 매도
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,0,1);
Main.MessageLog("매도주문");
}
}
}
######################################################################### #########################################################################
2023-09-10
1239
글번호 225836