MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 178

 
Andrey Dik :

네 감사합니다!

아니, 하지만 어쨌든 고마워!
이렇게 막힐 줄은 몰랐네요... :-)))
 

좋은 저녁이에요.

iOpen을 사용할 때 shift가 지정됩니다. 지정된 시프트에 대한 이력이 충분하지 않으면 가장 오래된 막대의 iOpen이 반환됩니다.

질문: 지정된 시프트가 있는 막대가 있는지 확인하는 방법은 무엇입니까? 그리고 이력이 부족하면 iOpen을 반환하지 않습니까?

 
Sergey :

좋은 저녁이에요.

iOpen을 사용할 때 shift가 지정됩니다. 지정된 시프트에 대한 이력이 충분하지 않으면 가장 오래된 막대의 iOpen이 반환됩니다.

질문: 지정된 시프트가 있는 막대가 있는지 확인하는 방법은 무엇입니까? 그리고 이력이 부족하면 iOpen을 반환하지 않습니까?


복사 열기

함수는 지정된 양의 지정된 기호-기간 쌍에 대한 막대 시가의 과거 데이터를 open_array 배열로 수신합니다. 요소는 시작 위치에서 현재부터 과거까지 계산된다는 점에 유의해야 합니다. 즉, 시작 위치가 0이면 현재 막대를 의미합니다.


알 수 없는 양의 데이터를 복사할 때 동적 배열을 수신 배열로 사용하는 것이 좋습니다. 배열이 보유할 수 있는 것보다 적은(또는 더 많은) 데이터가 있는 경우 요청된 데이터가 배열을 재분배하려고 시도하기 때문입니다. 데이터가 완전히 맞습니다.

알려진 양의 데이터를 복사해야 하는 경우 불필요한 메모리 재할당을 피하기 위해 정적으로 할당된 버퍼에서 복사하는 것이 좋습니다.

수신 어레이가 어떤 속성을 가지고 있는지(as_series=true 또는 as_series=false)는 중요하지 않습니다. 시간에서 가장 오래된 요소가 어레이에 할당된 물리적 메모리의 시작 부분에 있도록 데이터가 복사됩니다. 기능에는 3가지 옵션이 있습니다.

시작 위치 및 필요한 요소 수로 참조

int 복사열기 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    정수                start_pos , // 시작 위치
    정수                count , // 복사할 양
    더블             open_array[]       // 시가를 복사하기 위한 배열
);

시작 날짜 및 필요한 항목 수로 참조

int 복사열기 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    정수                count , // 복사할 양
    더블             open_array[]       // 시가를 복사하기 위한 배열
);

필요한 시간 간격의 시작 날짜와 종료 날짜로 호출

int 복사열기 (
                symbol_name , // 기호 이름
    ENUM_TIMEFRAMES    timeframe , // 기간
    날짜 시간           start_time , // 어떤 날짜부터
    날짜 시간           stop_time , // 날짜
    더블             open_array[]       // 시가를 복사하기 위한 배열
);

옵션

symbol_name

[인] 문자.

시간대

[in] 기간.

start_pos

【인】 복사할 첫 번째 요소의 번호입니다.

세다

【인】 복사할 요소의 수입니다.

시작 시간

【인】 첫 번째 요소에 해당하는 막대 시간입니다.

stop_time

【인】 마지막 요소에 해당하는 막대 시간입니다.

open_array[]

【아웃】 double 형식의 배열입니다.

반환 값

복사된 배열 요소의 수 또는 오류의 경우 -1입니다.

메모

요청된 데이터 간격이 서버에서 사용 가능한 데이터를 완전히 벗어나면 함수는 -1을 반환합니다. TERMINAL_MAXBARS(차트 의 최대 막대 수) 외부에서 데이터를 요청하면 함수도 -1을 반환합니다.

요청한 시계열이 아직 빌드되지 않았거나 서버에서 다운로드해야 하는 경우 함수는 즉시 -1을 반환합니다.

Expert Advisor 또는 스크립트에서 데이터를 요청할 때 터미널에 이 데이터가 로컬에 없으면 서버에서 다운로드가 시작되고 로컬 히스토리에서 데이터를 빌드할 수 있는 경우 필요한 시계열 구성이 시작되지만 아직 준비되지 않았습니다. 함수는 시간 초과가 만료되는 순간까지 준비될 데이터의 양을 반환하지만 기록 로드는 계속되고 다음 유사한 요청은 더 많은 데이터를 반환합니다.

시작 날짜 및 필요한 항목 수로 데이터를 쿼리할 때 날짜가 지정된 날짜(이전) 이하인 데이터만 반환됩니다. 이 경우 간격이 설정되고 최대 1초의 정확도로 고려됩니다. 즉, 값(볼륨, 스프레드, 표시기 버퍼의 값, 시가, 고가, 저가, 종가 또는 시간)이 반환되는 막대의 시가 날짜는 항상 지정된 날짜보다 작거나 같습니다.

지정된 날짜 범위의 데이터를 요청하면 요청한 간격에 해당하는 데이터만 반환되며 간격은 최대 1초의 정확도로 설정 및 고려됩니다. 즉, 값(볼륨, 스프레드, 지표 버퍼의 값, 시가, 고가, 저가, 종가 또는 시간)이 반환되는 모든 막대의 개장 시간은 항상 요청된 간격 내에 있습니다.

따라서 현재 요일이 토요일인 경우 start_time= Last_Tuesday stop_time=Last_Friday 인 주간 시간대의 데이터를 복사하려고 하면 주간 시간대의 시작 시간이 항상 일요일이기 때문에 함수는 0을 반환합니다. 그러나 단일 주간 막대가 지정된 범위에 속하지 않습니다.

현재 불완전한 막대에 해당하는 값을 가져와야 하는 경우 start_pos =0 및 count =1 인 호출의 첫 번째 형식을 사용할 수 있습니다 .

 

인사말.

여러분, 가격이 마지막에 1-2-3 0으로 교차하는 조건을 작성하는 방법을 알려주십시오.

 
Andrey Sokolov :

인사말.

여러분, 가격이 마지막에 1-2-3 0으로 교차하는 조건을 작성하는 방법을 알려주십시오.


이 수준과 과거 및 현재 가격 값을 비교하여 수준이 이 값 사이에 있으면 교차가 발생한 것입니다.
 
Sergey Gritsay :

이 수준과 과거 및 현재 가격 값을 비교하여 수준이 이 값 사이에 있으면 교차가 발생한 것입니다.


그리고 비교를 위해 이러한 레벨을 등록하는 방법은 무엇입니까?

또는 - 숫자가 필요한 소수 자릿수를 갖도록 작성하는 방법은 무엇입니까? 반올림이 아니라 삭제입니다.

 
Andrey Sokolov :


그리고 비교를 위해 이러한 레벨을 등록하는 방법은 무엇입니까?

또는 - 숫자가 필요한 소수 자릿수를 갖도록 작성하는 방법은 무엇입니까? 반올림이 아니라 삭제입니다.

다음은 찾기 기능입니다.

 //===============================================================================================
//---------------------------- Возвращает ближайший круглый уровень ----------------------------+
//===============================================================================================
double GetUniversalLevel( int ne= 100 , string symb= "0" ) {
 if (symb== "0" ) symb= Symbol ();
 static double LastBid;
 double _Level= 0 , PriceStep= 0 , bid= 0 , point= 0 ;
 bid=dBid(symb);
 point=dPoint(symb);
   if (LastBid<point) {LastBid=bid;} // Инициализация прошлой цены
   PriceStep=ne*point; // Шаг цены N пунктов.
   _Level= MathRound (bid/PriceStep)*PriceStep; // Круглый уровень
  LastBid=bid;
   return (_Level);
 }
 Comment ( GetUniversalLevel( 50 ) );
 

Sergey Gritsay, Vitaly Muzichenko 감사합니다.

또한 MathFloor() 함수에 의해 프롬프트가 표시됩니다. - 가장 아래에 가장 가까운 정수 숫자 값을 반환합니다.

 
Vitalie Postolache :

MySQL을 파십시오.
파헤치고 있습니다...흥미롭습니다...몇 달 안에 현재의 질문에 웃게 될 것입니다. 그러나 그것은 아직 여행의 시작 단계에 있습니다...

세르게이 그리제이 :
이렇게 하려면 로컬 컴퓨터 외부에 서버를 만들고 이 서버를 통해 데이터를 전송해야 합니다. MT에 대해 이 데이터를 처리하는 인디케이터 또는 어드바이저를 각각 작성하거나 일부 VPS 서버에 터미널을 놓고 복사기를 설정합니다. 귀하의 계정에서 친구의 계정으로의 거래. 또 다른 옵션은 신호 서비스를 사용 하여 이러한 수준에 따라 이루어진 거래를 복사하는 것입니다. 일반적으로 적절한 소프트웨어를 주문하려면 재정적 능력에서 접근해야 합니다.


모쉐 다얀 :

역사를 상기시켜 드리겠습니다. 매일 csv에서 데이터를 받아 차트에 표시(수평 레벨)하는 인디케이터가 있습니다. 가정용 랩톱에서 서버를 만들었습니다(약하지만 계산할 필요가 없고 csv를 제공하며 매우 작음). 연결 테스트를 위한 서버에서 일반 포럼의 엔진을 플러딩했습니다. 모든 것이 외부에서 보이는 것 같습니다. 조언을 도와주세요. csv 파일을 읽으려면 서버에 무엇이 있어야 합니까? 저것들. 지표는 csv 데이터베이스에 어떻게 연결됩니까? 서버의 FTP 엔진이나 다른 것을 채우고 MT를 위해 특별한 포트를 열어야 합니까? 아니면 전혀 잘못된 방향으로 갔습니까? 감사해요


친구, 질문 하나 더. 가정용 랩톱을로드하지 않고 표시기를 csv 파일과 연결하기 위해 Yandex.Disk 또는 Cloud@mail.ru 또는 Box.net과 같은 무료 클라우드 파일 저장소를 사용할 수 있습니까? 감사해요
 
Vitaly Muzichenko :

다음은 찾기 기능입니다.

dBid와 dPoint를 따로 등록해야 하나요?