예스트레이더
예스스탁 답변
2003-07-14 00:00:00
안녕하세요.. 예스트레이더 담당자입니다.
답변이 늦어 죄송합니다.
시스템식의 부하문제는 사용하는 컴퓨터의 성능이나 작성하신 시스템식의 내용에 따라 많은 차이가 있습니다. 정답이 있을수 있는 부분이 아닙니다.
가장 우선적으로 생각해야 될 것이 사용자님이 사용하시는 예스트레이더나 예스트레이더 프로의 랭귀지에 대한 이해입니다.
예스트레이더나 예스트레이더 프로에서 사용되는 시스템들의 특성은 매 봉 마다 최근봉의 경우 데이타다 수신 될때 마다 1번씩 수행되어 현재의 data가 시스템의 조건에 만족하는지 여부를 확인하는 방법입니다.
이런 특성을 감안한다면 과도한 for 문 같은 것은 과부하를 방지하는데 좋은 방법은 아닐것입니다.
또한 한번 시스템의 로직을 수행할때 중복되는 로직은 없어야 한다는 것입니다.
중복되는 로직이 필요할 경우 해당 결과 값을 변수에 저장 후 그 변수를 사용하도록 해야 할 것입니다.
이외에도 작성하는 시스템식의 방법에 따라 많은 차이가 있을 수 있습니다.
시스템식을 작성하실때 우선 사용자님이 구상을 문법에 맞게 시스템으로 작성을 하신 후 여기서 끝이 아니라 작성하신 시스템식에 중복되는 부분이나 굳이 많은 부하를 주는 방법이외에 다른 방법은 없는지 몇번이고 다시 확인을 해 보셔야 합니다.
네트워크 연결이 끊어지는 현상은 예스트레이더나 예스트레이더 프로가 매번 들어오는 data를 시스템식의 로직에 부합되는지 여부를 계산하는데 걸리는 시간보다 다음 data가 들어오는 시간이 더 빠를 경우 네트워크에 아직 처리하지 못한 data가 계속 누적될 것이며 서버에서는 보낸 data를 PC가 받지 않은 것으로 판단하여 연결을 끊어 버리는 것입니다.
다음은 5일 10일 이평선을 이용한 하루에 1번 매매식입니다. 좀 허술하지만 예로 참고하시기 바랍니다.
최초 작성시
===================================================================================
input : sp(5), lp(10);
var : 진입(0), 청산(0), 당일봉갯수(0);
당일봉갯수 = dayindex();
// 매일 진입과 청산이 가능하도록 변경
if( 당일봉갯수 == 0 ) then
{
진입 = 0;
청산 = 0;
}
// 1번도 진입을 하지 않은 경우
if( 진입 == 0 ) then
{
// 첫번째 진입신호시 변수를 변경
if( CrossUp(ma(C, sp), ma(C, lp)) ) then
{
진입 = 1;
}
}
// 1번도 진입을 하지 않은 경우
if( 진입 == 0 ) then
{
// 주문
if( CrossUp(ma(C, sp), ma(C, lp)) ) then
{
buy();
}
}
if( 진입 == 0 ) then
{
// 주문
if( CrossUp(ma(C, sp), ma(C, lp)) ) then
{
exitshort();
}
}
// 현재 매수 또는 매도진입 상태이면서 청산 신호가 1번도 발생하지 않은 경우
if( 진입 == 1 && 청산 == 0 ) then
{
// 신호 발생시 청산신호가 발생했음을 변수에 설정
if( CrossDown(ma(C, sp), ma(C, lp)) ) then
{
청산 = 1;
}
}
// 현재 매수 또는 매도진입 상태이면서 청산 신호가 1번도 발생하지 않은 경우
if( 진입 == 1 && 청산 == 0 ) then
{
// 주문
if( CrossDown(ma(C, sp), ma(C, lp)) ) then
{
sell();
}
}
// 현재 매수 또는 매도진입 상태이면서 청산 신호가 1번도 발생하지 않은 경우
if( 진입 == 1 && 청산 == 0 ) then
{
// 주문
if( CrossDown(ma(C, sp), ma(C, lp)) ) then
{
exitlong();
}
}
몇번의 수정 작업을 거친 후
=================================================================================
input : sp(5), lp(10);
var : 진입(0), 청산(0), 당일봉갯수(0);
당일봉갯수 = dayindex();
if( 당일봉갯수 == 0 ) then
{
진입 = 0;
청산 = 0;
}
if( 진입 == 0 ) then
{
if( CrossUp(ma(C, sp), ma(C, lp)) ) then
{
진입 = 1;
buy();
exitshort();
}
}
if( 진입 == 1 && 청산 == 0 ) then
{
if( CrossDown(ma(C, sp), ma(C, lp)) ) then
{
청산 = 1;
sell();
exitlong();
}
}
충분한 답변이 되었는지 모르겠습니다.
좋은 하루 되십시요 ..