예스스탁
예스스탁 답변
2014-08-22 16:59:25
안녕하세요
예스스탁입니다.
var aSignal;
var RcvChCount =0;
var ChartExe = new Array(20);
var SystemSet = new Array(20);
var ChartSet = new Array(20);
function Main_OnStart()
{
RcvChCount = 0 ;
ChartSet[0] = new ReqChartItem( "00000000" ,5 ,CHART_PERIOD_MINUTE, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[0],SystemSet[0],null);
ChartSet[1] = new ReqChartItem( "00000000" ,5 , CHART_PERIOD_MINUTE, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[1],SystemSet[1],null);
}
function Main_OnRcvChartEx(ChartEx)
{
RcvChCount = RcvChCount + 1 ;
ChartExe[RcvChCount] = ChartEx ;
if (RcvChCount == 2)
Main.SetTimer(99, 3000);
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageList("종목코드1",ChartExe[1].GetCode(1) );
Main.MessageList("종목코드2",ChartExe[2].GetCode(1) );
Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() );
Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() );
var aSignal = ChartExe[2].GetIncompleteSignal();
Main.MessageList("aSignal[0]",aSignal[0]);
if (
nEventID == 99
&& HHMMDD < 090000
&& ( ChartExe[2].GetOpenContracts() == 0 )
//매도청산 예비신호발생시 동시호가 매도진입 불가
&& !(aSignal != null && aSignal[0].signalKind == 4 )
)
{
Main.KillTimer(99);
Main.MessageLog("동시호가매도조건충족:매도실행");
}
}
전화상으로 답변을 잘못드렸습니다. 따라 미완성신호 이벤트를 사용하지 않으셔도 됩니다.
작성하신 내용에서 타이머의 셋팅만 2개차트가 모두 만들어진 이후에 셋팅되게 수정했습니다.
위와 같이 처리하시면 첨부된 그림과 같이 "동시호가매도조건충족:매도실행" 메세지 출력됩니다.
차트의 주기와 ChartExe[2].GetOpenContracts() == 0 조건은 조건만족을 시키기 위해 변경했습니다.
컴퓨터의 시간을 오전 9시 이전으로 셋팅하시면 9시 이후에도 테스트를 해보실수 있습니다.
즐거운 하루되세요
> 재령 님이 쓴 글입니다.
> 제목 : 수식 검증 부탁드립니다
> 항상수고 많으십니다
ChartExe[1]은 매수차트이고 ChartExe[2]는 매도차트입니다.
전일 매도포지션이더라도 종가봉에 매도청산 예비신호 발생 시 동시호가 매도진입 불가입니다.
나머지 변수들은 올바르게 리턴하는데,
미완성봉을 리턴하는 aSignal 이 undefined 가 나오는데 이유를 알수 없습니다.
감사합니다.
var aSignal ;
var RcvChCount ;
var ChartExe = new Array(20);
var SystemSet = new Array(20);
var ChartSet = new Array(20);
function Main_OnStart()
{
Main.SetTimer(99, 3000);
RcvChCount = 0 ;
ChartSet[0] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[0] = new SystemInfo("매수",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[0],SystemSet[0],null);
ChartSet[1] = new ReqChartItem( "00000000" ,300 , CHART_PERIOD_TICK, 1000, CHART_REQCOUNT_BAR, false, false);
SystemSet[1] = new SystemInfo("매도",YL_TYPE_NORMAL,null,null);
Main.ReqChartEx(ChartSet[1],SystemSet[1],null);
}
function Main_OnRcvChartEx(ChartEx)
{
RcvChCount = RcvChCount + 1 ;
ChartExe[RcvChCount] = ChartEx ;
}
function Main_OnTimer(nEventID)
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
var aSignal = ChartExe[2].GetIncompleteSignal();
Main.MessageList("종목코드1",ChartExe[1].GetCode(1) );
Main.MessageList("종목코드2",ChartExe[2].GetCode(1) );
Main.MessageList("전일포지션",ChartExe[1].GetOpenContracts() );
Main.MessageList("전일포지션",ChartExe[2].GetOpenContracts() );
if (
nEventID == 99
&& HHMMDD < 090000
&& ( ChartExe[2].GetOpenContracts() < 0 )
//매도청산 예비신호발생시 동시호가 매도진입 불가
&& !(aSignal != null && aSignal[0].signalKind == 4 )
)
{
Main.KillTimer(99);
Main.MessageLog("동시호가매도조건충족:매도실행");
}
}