커뮤니티

과부하문제...

프로필 이미지
jinee
2003-07-11 00:00:00
459
글번호 195329
수고하십니다... 예전 부하문제로 게시된걸로 봐서는 100줄 정도는 충분하다는 정도로 답변을 해놓으셨던데요..만약에 200~300줄 이상의 수식이라면 어떻게 되는지요... 예스트레이더 프로 시스템에서 부하가 최소로 걸리는 방법을 좀 가르쳐 주시면 감사하겠습니다.. 가령...매매식 중에 반복되는 것은 최대한 변수로 지정을 해주는게 좋은가요? 예전의 구버젼의 함수를 사용자함수로 변경하여 썼을때 메모리를 많이 잡아먹을까요? 단순히 줄수가 문제라면 공백을 최대한 없애기라도 해야하나요? 등등... 시스템에 최적이 될수있는 환경을 제시해주시면 감사하겠습니다... 신호발생으로 인한 매매는 모르겠지만...시스템을 적용할때는 예전보다 더 많은 시간이 걸리는것 같습니다.. 그리고 앞전에 말씀하신 분처럼 거래가 많을때 시스템 적용을 시도하다보면 "네트윅이 끊어져서 ...." 어쩌구 저쩌구 하면서 꺼져버리는게 사실입니다.. 답변부탁드리겠습니다...
예스트레이더 (iM증권)
답변 1
프로필 이미지

예스트레이더 예스스탁 답변

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(); } } 충분한 답변이 되었는지 모르겠습니다. 좋은 하루 되십시요 ..