예스스탁
예스스탁 답변
2019-12-19 14:00:56
안녕하세요
예스스탁입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
차트객체 생성없이 신호감시는 가능하지 않습니다.
var SList = [],CT = [], AList = [];
var Req = 0;
function Main_OnStart()
{
Main.SetTimer(1,6000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
if (nEventID == 1 && HHMMSS >= 90500)
{
Main.KillTimer(1);
Main.MessageList("검색요청");
Main.ReqPowerSearch("hancom25");
Main.SetTimer(2,300000);
}
if (nEventID == 2 && HHMMSS >= 120000)
{
Main.KillTimer(2);
Main.ReqPowerSearch("사용자검색조건");
Main.SetTimer(3,600000);
}
if (nEventID == 3 && HHMMSS < 150000)
{
if (HHMMSS < 150000)
{
Main.ReqPowerSearch("사용자검색조건");
}
else
{
Main.KillTimer(3);
}
}
if (nEventID == 99 && HHMMSS < 150000)
{
Main.KillTimer(99);
Main.ReqMarketData(SList[req][0]);
}
}
function Main_OnRcvItemList(aItemList, nCount)
{
Main.MessageList("검색완료",nCount);
if (nCount >= 1)
{
SList = [];
for (var i = 0; i < nCount; i++)
{
SList[i] = new Array(0,aItemList[i]);
}
Main.MessageList("종목객체생성시작");
req = 0;
Main.ReqMarketData(SList[req][1]);
}
}
function Main_OnRcvMarketData(MarketData)
{
if (MarketData.code == SList[req][1])
{
SList[req][0] = MarketData.volumeTotal;
Main.RemoveMarketData(MarketData);
req = req+1;
if (req < SList.length)
{
var S = Main.ReqMarketData(SList[req][1]);
if (S == -1)
{
Main.SetTimer(99,15000);
}
}
else
{
Main.MessageList("객체생성완료");
SList.sort(CompareForSort);
if (SList.length > Math.min(10,30-CT.length))
{
SList.splice(Math.min(10,30-CT.length),SList.length);
}
Main.MessageList("SList",SList);
if (CT.length == 0)
{
for (var i = 0; i < SList.length;i++)
{
AList.push(SList[i][1]);
}
}
if (CT.length > 0 && CT.length < 30)
{
AList = [];
for (var i = 0; i < CT.length;i++)
{
var add = true;
for (var z = 0; z < SList.length;z++)
{
if (CT[i].GetCode(1) == SList[z][1])
{
add = false;
}
}
if (add == true)
{
AList.push(SList[z][1]);
}
}
}
Main.MessageList("AList",AList);
if (AList.length > 0)
{
req = 0;
Main.MessageList("차트객체요청시작 : ");
var CTSet = new ReqChartItem(AList[req],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false);
var STSet = new SystemInfo("#");
Main.ReqChartEx(CTSet, STSet);
}
}
}
}
function Main_OnRcvChartEx(ChartEx)
{
if (AList[req] == ChartEx.GetCode(1))
{
CT[req] = ChartEx;
req = req + 1;
if (req < AList.length)
{
var CTSet = new ReqChartItem(AList[req],1,CHART_PERIOD_MINUTE,1000,CHART_REQCOUNT_BAR,false,false);
var STSet = new SystemInfo("#");
Main.ReqChartEx(CTSet, STSet);
}
else
{
Main.MessageList("차트객체요청종료");
}
}
}
function CompareForSort(a, b)
{
//내림차순
return( a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : 0 );
//오름차순
//return( a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0 );
}
function Main_OnRiseSignal(ChartEx, Signal)
{
if (Signal.signalKind == 1)
{
Account1.OrderBuy(Signal.code,Signal.count,0,1);
}
if (Signal.signalKind == 2)
{
Account1.OrderSell(Signal.code,Signal.count,0,1);
}
}
즐거운 하루되세요
> 순두부남 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 스팟식 문의드립니다.
A. 09:05분 종목검색
B. 검색된 종목 중 거래량 상위 10종목 시스템 적용
C. A, B 과정 반복
- 12:00 까지 5분 주기로 반복
- 12시 이후는 10분주기로 반복
- 15시 이후는 반복 종료
- B에서 적용된 종목이 다음 검색에 안나오더라도 시스템 유지
- 새로 검색된 종목 중 거래량 10위안에 새로운 종목이 있다면 시스템 추가
- 총 시스템적용 종목 30개로 제한
D. 시스템부하를 줄이기위해 차트는 안띄우고 매매신호만 감시하여 처리
이상입니다.