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

 
MakarFX :

MetaQuotes 데모 서버 닫기

MetaQuotes Software Corp.

2009년 3월 4일

2009년 4월 5일에 "demo.metaquotes.net" 서버가 중지됩니다. 그와 동시에 분 히스토리가 있는 히스토리 센터도 계속 운영될 예정이다.

오늘부터 저희 회사는 데모 서버 사용을 거부합니다. 현재 MetaTrader 4 플랫폼 에서 운영하는 회사의 수가 너무 많아 자체 서버를 유지할 필요가 없습니다.

이것은 일종의 고대입니다(다른 서버가 언급됨). 올해에 몇 번, 마지막으로 한 달 전에 MetaQuotes-Demo에 새 데모 계정이 생성되었습니다.

또한 서버가 원격인 경우 계정 개설 마법사에서 서버가 표시되고 ping을 보내는 이유는 무엇입니까? 플러깅은 마지막 단계에서만 발생합니다.

 
Artyom Trishkin :

표시기에서 이력 데이터에 처음 액세스할 때 로컬 데이터가 충분하지 않으면 데이터 로드가 시작되고 함수는 오류를 반환합니다.

이것은 나는 완벽하게 이해합니다. 기록에 막대가 없는 경우 두 함수 모두 0을 반환합니다. 그렇지 않으면 하나는 0을 반환하고 두 번째는 기록 의 막대 수를 올바르게 반환합니다 . 그들이 차례로 불리는 이유는 다음과 같습니다.

Loader(): symbol( Symbol ()), timeframe( Period ()) 
  {
     Print ( __FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString (timeframe));
     ResetLastError ();
     Print ( __FUNCTION__ + " bars: " + ( string ) iBars (symbol, timeframe) ); // Данный вызов iBars() даёт 0 при перезапуске терминала
     Print ( __FUNCTION__ + " Error: " + ( string ) GetLastError ());
     Print ( __FUNCTION__ + " bars (2): " + ( string ) iBars ( Symbol (), Period ()) ); // Этот же вызов iBars() работает нормально
  }

데이터만 가져옵니다. 첫 번째 경우에는 Loader 클래스의 미리 만들어진 변수 멤버(심볼 및 시간 프레임)(올바르게 초기화됨)에서 가져오고 두 번째 경우에는 Symbol() 및 Period() 함수(정확하게 기호 및 시간 프레임에 작성된 것과 동일한 값). 변수 값은 함수 값과 동일합니다(확인했습니다). 그러나 iBars(symbol, timeframe)가 절대적으로 정확한 기호와 시간 프레임을 엉망으로 만드는 곳은 나에게 명확하지 않습니다. iBars(Symbol(), Period())는 엉망이 되지 않습니다. 그래서 어딘가에 터미널 자체의 작동에 오류가 있거나 소스 코드의 잘못된 컴파일이 있다고 판단했습니다.

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Если указаны параметры start_time и stop_time, то функция возвращает количество баров в диапазоне дат. Если эти параметры не указаны, то функция возвращает общее количество баров. Если данные для таймсерии с указанными параметрами при вызове функции Bars() еще не сформированы в терминале, или данные таймсерии в момент вызова функции не...
 
Mihail Matkovskij :

이것은 나는 완벽하게 이해합니다. 기록에 막대가 없는 경우 두 함수 모두 0을 반환합니다. 그렇지 않으면 하나는 0을 반환하고 두 번째는 기록 의 막대 수를 올바르게 반환합니다 . 그들이 차례로 불리는 이유는 다음과 같습니다.

데이터만 가져옵니다. 첫 번째 경우에는 Loader 클래스의 미리 만들어진 변수 멤버(심볼 및 시간 프레임)(올바르게 초기화됨)에서 가져오고 두 번째 경우에는 Symbol() 및 Period() 함수(정확하게 기호 및 시간 프레임에 작성된 것과 동일한 값). 변수 값은 함수 값과 동일합니다(확인했습니다). 그러나 iBars(symbol, timeframe)가 절대적으로 정확한 기호와 시간 프레임을 엉망으로 만드는 곳은 나에게 명확하지 않습니다. iBars(Symbol(), Period())는 엉망이 되지 않습니다. 그래서 터미널 자체에 어딘가에 오류가 있다고 판단했습니다.

그리고 이제 Igor가 조언한 대로 다음과 같이 기록합니다.

Loader(): symbol( Symbol ()), timeframe( Period ()) 
  {
     Print ( __FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString (timeframe));
     ResetLastError ();
     Print ( __FUNCTION__ + " bars: " + ( string ) iBars ( Symbol (), Period ())); // Данный вызов iBars() даёт 0 при перезапуске терминала
     Print ( __FUNCTION__ + " Error: " + ( string ) GetLastError ());
     Print ( __FUNCTION__ + " bars (2): " + ( string ) iBars (symbol, timeframe)); // Этот же вызов iBars() работает нормально
  }
그리고 이것은 클래스 생성자이며 초기화 전에도 호출된다는 것을 잊지 마십시오.
 
Mihail Matkovskij :

이것은 나는 완벽하게 이해합니다. 기록에 막대가 없는 경우 두 함수 모두 0을 반환합니다. 그렇지 않으면 하나는 0을 반환하고 두 번째는 기록 의 막대 수를 올바르게 반환합니다 . 그들이 차례로 불리는 이유는 다음과 같습니다.

이야기가 나왔나요?

그런 다음 우리는 이 이야기를 클레임 형식으로 발행하고 질문 형식으로 발행하기로 결정했습니다.

오류 4401에 대해 작성하는 데 도움이 되는 것은 무엇입니까?

내가 뭐라고 썼어?

막대가 없는 것과 완성되지 않은 차트의 차이점을 이해하십니까?

표시기 실행으로 터미널을 다시 시작한 후 상황이 발생하고 OnInit() 전에 실행될 MQL 프로그램(클래스 생성자)의 전역 초기화에서 데이터를 요청합니다.


사라짐, 읽는 것보다 빠르게 작성 , 포럼 검색 4401 - 모든 답변

 
MakarFX :

내 몫은 이렇게 계산된다

어드바이저의 시작 부분에 서서 ... 코드의 맨 끝에 넣습니다.

 #property link        "http://www.mql5.com"
input double CheckLots = 0.01 ;
input int     Persent   = 5 ;
   double Lots= NormalizeDouble (AccountBalance()*CheckLots/ 1000 - 0.005 , 2 );  

OnTick 함수에서 Lot 변수가 호출되면 EA가 찾아서 다시 계산합니다.

그건 불가능합니다. 당신은 선언하고 초기화하는 중이며 표현식이 Lot 변수에 할당됩니다.

 NormalizeDouble (AccountBalance()*CheckLots/ 1000 - 0.005 , 2 )

이러한 할당은 시작 시 한 번만 수행할 수 있으며, Lot 에 액세스할 때마다 표현식이 자동으로 할당될 수는 없습니다. 나는 mql이 이것을 할 수 있다는 말을 듣지 못했습니다.

 
Seric29 :

그건 불가능합니다. 당신은 선언하고 초기화하는 중이며 표현식이 Lot 변수에 할당됩니다.

이러한 할당은 시작 시 한 번만 수행할 수 있으며, Lot 에 액세스할 때마다 표현식이 자동으로 할당될 수는 없습니다. 나는 mql이 이것을 할 수 있다는 말을 듣지 못했습니다.

확인해보니 잔고가 바뀌면 로트도 바뀝니다
 
MakarFX :
확인해보니 잔고가 바뀌면 로트도 바뀝니다

와우, 확인하겠습니다. 배열 요소 로 변수를 함수로 초기화할 수 있다는 건 알지만 자동으로 바뀌는 줄은 몰랐는데 C++에도 그런 게 없는 것 같으니 나중에 확인해 보겠습니다.

 
Artyom Trishkin :
그리고 이것은 클래스 생성자이며 초기화 전에도 호출된다는 것을 잊지 마십시오.

객체가 자동인 경우입니다. 그리고 (OnInit()에서) new 키워드 로 생성하고 (OnDeinit()에서) delete 키워드로 삭제합니다. 즉, Loader 유형의 개체에 대한 포인터를 사용합니다. 하지만 그런 디테일을 희생해서라도 아실거라 생각합니다... 따라서 OnInit()에서 로더를 생성하고 오류가 있을 수 없습니다.

기능을 바꾸려는 경우 어쨌든 시도했지만 결과는 여전히 동일합니다. 메시지 만 다른 순서로 있습니다. :)

 public :  
  Loader(): symbol( Symbol ()), timeframe( Period ()) 
  {
     Print ( __FUNCTION__ + " symbol: " + symbol + " timeframe: " + EnumToString (timeframe));
     Print ( __FUNCTION__ + " bars (2): " + ( string ) iBars ( Symbol (), Period ())); 
     ResetLastError ();
     Print ( __FUNCTION__ + " bars: " + ( string ) iBars (symbol, timeframe)); 
     Print ( __FUNCTION__ + " Error: " + ( string ) GetLastError ());
  }

결과:

2020.06.24 23:10:48.568 로더::로더 기호: EURUSD 기간: PERIOD_H1

2020.06.24 23:10:48.568 로더::로더 바(2): 140435

2020.06.24 23:10:48.568 로더::로더 바: 0

2020.06.24 23:10:48.568 로더::로더 오류: 4401

나는 이것이 정확히 터미널이 다시 시작되었을 때 그리고 그것이 다시 시작되었을 때만 발생한다는 사실에 주의를 기울입니다! 터미널을 처음 시작할 때 (Windows를 시작한 후)부터 예제가 올바르게 작동합니다.
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Igor Makanu :

이야기가 나왔나요?

그런 다음 우리는 이 이야기를 클레임 형식으로 발행하기로 결정했습니다.

불만 없음! 그리고 내가 소스 코드를 제공하고 작업을 테스트하기 위해 일련의 작업을 그린 경우 허구는 무엇입니까? 분명히 당신은 나를 오해했습니다 ...

이고르 마카누 :

또한 OnInit() 전에 실행될 MQL 프로그램(클래스 생성자)의 전역 초기화에서 데이터를 요청합니다.


사라짐, 읽는 것보다 빠르게 작성 , 포럼 검색 4401 - 모든 답변


이전 포스트에서 쓴 OnInit() 이전에 실행하면 안됩니다. 당신은 내가 테스트를 위해 추가한 게시물과 소스 코드를 모두 부주의하게 읽고 있습니다.

 
Stanislav Korotky :

이것은 일종의 고대입니다(다른 서버가 언급됨). 올해에 몇 번, 마지막으로 한 달 전에 MetaQuotes-Demo에 새 데모 계정이 생성되었습니다.

또한 서버가 원격인 경우 계정 개설 마법사에서 서버가 표시되고 ping을 보내는 이유는 무엇입니까? 플러깅은 마지막 단계에서만 발생합니다.

예, 모바일 터미널 에서도 무언가가 등록되지 않습니다. 올해 초에는 모든 것이 등록되었습니다.