그냥 오타인가요, 아니면 정말 그래야 하나요?
아무리 여러 번 시도해도 '복사 팀'의 모든 함수가 0을 반환하지 않고 -1 또는 >0만 반환합니다.
//+------------------------------------------------------------------+ //| 모든 문자에 대해 사용 가능한 데이터 수를 확인합니다 ||. //+------------------------------------------------------------------+ bool CheckAvailableData() { int attempts=100; //--- for(int s=0; s<SYMBOLS_COUNT; s++) { //--- 그런 문자가 있는 경우 if(symbol_names[s]!=empty_symbol) { datetime time[]; // 배열로 막대 개수 확인 int total_period_bars =0; // 현재 기간의 막대 수 datetime terminal_first_date =NULL; // 터미널에서 현재 기간의 사용 가능한 데이터의 첫 번째 날짜 //--- 터미널에서 현재 기간 데이터의 첫 번째 날짜를 가져옵니다. terminal_first_date=(datetime)SeriesInfoInteger(symbol_names[s],Period(),SERIES_TERMINAL_FIRSTDATE); //--- 지정된 날짜부터 사용 가능한 막대 수를 가져옵니다. total_period_bars=Bars(symbol_names[s],Period(),terminal_first_date,TimeCurrent()); //--- 이 막대의 준비 상태 확인 for(int i=0; i<attempts; i++) { //--- 지정된 양의 데이터를 복사합니다. if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time)) { //--- 필요한 양이 복사되면 루프를 중지합니다. if(ArraySize(time)>=total_period_bars) break; } } //--- 복사된 데이터가 적으면 다시 시도해야 합니다. if(ArraySize(time)==0 || ArraySize(time)<total_period_bars) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } } //--- 가격 차이의 시작점에 대해 수직선 모드인 경우 종료합니다. if(StartPriceDivergence==VERTICAL_LINE) return(true); else { datetime time[]; // 배열로 막대 개수 확인 int total_period_bars =0; // 현재 기간의 막대 수 datetime terminal_first_date =NULL; // 터미널에서 현재 기간의 사용 가능한 데이터의 첫 번째 날짜 //--- 터미널에서 현재 기간 데이터의 첫 번째 날짜를 가져옵니다. for(int i=0; i<attempts; i++) if((terminal_first_date=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_FIRSTDATE))>0) break; //--- 지정된 날짜부터 사용 가능한 막대 수를 가져옵니다. for(int i=0; i<attempts; i++) if((total_period_bars=(int)SeriesInfoInteger(Symbol(),timeframe_start_point,SERIES_BARS_COUNT))>0) break; //--- 이 막대의 준비 상태 확인 for(int i=0; i<attempts; i++) //--- 지정된 양의 데이터를 복사합니다. if(CopyTime(Symbol(),timeframe_start_point, terminal_first_date+PeriodSeconds(timeframe_start_point),TimeCurrent(),time)>0) break; //--- 복사된 데이터가 적으면 다시 시도해야 합니다. if(ArraySize(time)<=0 || total_period_bars<=0) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } //--- return(true); }
그냥 오타인가요, 아니면 정말 그래야 하나요?
아무리 여러 번 시도해도 '복사 팀'의 모든 함수는 0을 반환하지 않고 -1 또는 >0만 반환합니다.
일반적으로 >0을 수행해야 하지만 이 경우 후속 확인을 통해 수행하지 않아도 됩니다.
그러나 이 표현식은 항상 참입니다:
if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time))
그러나 이 표현식은 항상 참입니다:
if를 아예 제거할 수도 있습니다. 이 경우 중요하지 않습니다.
일반적으로 심볼에 대한 기록 데이터 로딩은 도움말에 기록된 방식대로 이루어지지 않습니다.
실제로는 다음과 같이 발생합니다:
예를 들어 mql5 프로그램에서 CopyTime 함수를 사용하여 일부 시계열 데이터를 요청하는 경우
함수를 사용하여 데이터를 요청했는데 이 데이터가 터미널에 없는 경우(아직 로드되지 않은 경우) 터미널은 요청된 양이 아닌 서버에서 이 데이터를 다운로드합니다(도움말 예제에서는 100바),
그러나 "차트의 최대 막대" 매개변수가 허용하는 만큼 필요한 시계열의 막대를 RAM에 "배치"할 수 있습니다.
전체 기록이 서버에서 다운로드되므로 더 높은 기간의 막대 하나만 요청하면 충분합니다(예: PERIOD_W1).
일반적으로 심볼에 대한 기록 데이터 로딩은 도움말에 기록된 방식대로 이루어지지 않습니다.
실제로는 다음과 같이 발생합니다:
예를 들어 mql5 프로그램에서 CopyTime 함수를 사용하여 일부 시계열 데이터를 요청하는 경우
함수를 사용하여 데이터를 요청했는데 이 데이터가 터미널에 없는 경우(아직 로드되지 않은 경우) 터미널은 요청된 양이 아닌 서버에서 이 데이터를 다운로드합니다(도움말 예제에서는 100바),
그러나 "차트의 최대 막대" 매개변수가 허용하는 만큼 필요한 시계열의 막대를 RAM에 "배치"할 수 있습니다.
더 높은 기간의 막대 하나만 요청하면 충분합니다(예: PERIOD_W1). 그러면전체 기록이 서버에서 다운로드됩니다.
도움말은 원하는 모든 것을 말할 수 있습니다. 원하는 대로 자유롭게 하세요. ;)
도움말의 예는 다른 문서인 다른 프로그램용 메타트레이더 5 시세 준비 방법 >>>에서 설명했습니다.
인증서에는 원하는 내용이 무엇이든 적을 수 있습니다. 원하는 대로 자유롭게 작성할 수 있습니다. ;)
도움말의 예는 다른 문서인 다른 프로그램용 메타트레이더 5 견적 준비 방법 >>>에서 설명했습니다.
그게 제가 한 일입니다. 방금 코드에서 서버의 나머지 "언로드 된 바"를 계산하는 것을 보았습니다.
그리고 나는 터미널이 신경 쓰지 않고 형성하는 데 필요한만큼 펌핑한다고 생각했습니다.
글의 마지막에"이 지표는 더 나은 방향으로 무한히 발전할 수 있습니다" 라고 썼습니다.
제 생각에는 가격 차이를 고려하는 것은 인간의 눈에는 거의 쓸모가 없습니다. 인간은 로봇이 아니니까요!
하지만 로봇에게는 흥미로운 주제입니다.
몇 가지 렌더링 옵션을 제안하셨습니다:
1. 라인에서.
2. "하루."
저는 현재 "주" 모드에서만 비슷한 작업을 하고 있습니다.
글의 마지막에"이 지표는 더 나은 방향으로 무한히 발전할 수 있습니다" 라고 썼습니다.
제 생각에는 가격 차이를 고려하는 것은 인간의 눈에는 거의 쓸모가 없습니다. 인간은 로봇이 아니니까요!
하지만 로봇에게는 흥미로운 주제입니다.
몇 가지 렌더링 옵션을 제안하셨습니다:
1. 라인에서.
2. "하루."
저도 현재 "주" 모드로만 비슷한 작업을 하고 있습니다.
다른 문제를 다루고 있기 때문에 조만간 다른 글을 쓸 수 있을지 잘 모르겠습니다. 하지만 이 기사에 따르면 개발은 아직 다중 통화 계산과 캔버스에서 이러한 계산을 시각화하는 단계라고 합니다.
예, 사람은 로봇이 아니지만 때로는 아이디어를 얻기 위해 다른 방식으로 연구 주제를 살펴볼 필요가 있습니다. ;)
새로운 기고글 MQL5 Cookbook: 가격 다이버전스를 분석하기 위한 다중 기호 지표 개발 가 게재되었습니다:
이 글에서는 지정된 기간의 가격 다이버전스를 분석하기 위해 다중 기호 지표의 개발을 고려할 것입니다. 핵심 주제는 다중 통화 표시기 프로그래밍에 대한 이전 글 "MQL5 Cookbook: MQL5의 다중기호 변동성 지표 개발"에서 이미 논의되었습니다. 따라서 이번에는 극적으로 변경된 새로운 기능에 대해서만 설명하겠습니다. 다중 통화 표시기 프로그래밍이 처음이라면 먼저 이전 글을 읽는 것이 좋습니다.
이 글에서는 다음 질문을 고려할 것입니다.
작성자: Anatoli Kazharski