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

 

mql4가 아닌 C++ 언어가 Expert Advisor 구현에 최대한 참여하도록 dll 라이브러리가 주문을 보내고 데이터를 교환 할 수 있도록 Meta Quotes 서버에 연결하는 방법은 무엇입니까?


dll 라이브러리를 사용하여 MT4에서 개체를 그릴 수 있습니까? 이 문제에 대해 무엇을 연구할 수 있습니까?

 
Mihail Matkovskij :

그런데 왜 iBars(symbol, timeframe)에서는 역사가 끝나지 않고 iBars(Symbol(), Period())에서는 매우 정상적입니까? 그리고 이것은 터미널이 다시 시작될 때만 발생하며 항상 그런 것은 아닙니다. 그리고 초기화 섹션에서 멤버 변수 기호인 timeframe이 올바르게 초기화됩니다(제가 직접 확인했습니다).

내 예를 밀어보십시오 : https://c.mql5.com/3/324/Test.mq5

시퀀싱:

1. 컴파일된 파일을 차트에 던집니다. 결과 메시지는 다음과 같습니다.

2. 터미널을 닫고 다시 시작하십시오. 로그 메시지는 다음과 같습니다.

결정됐다.

이 코드 대신

 public :  
  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() работает нормально
  }

나는 다음을 썼다

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

이제 터미널을 다시 시작할 때 오류가 없습니다. 그러나 심볼과 타임프레임은 빈 값으로만 초기화하면 됩니다.

버그와 작동하는 소스 코드의 두 가지 버전을 첨부합니다. 테스트 순서는 다음과 같습니다. https://www.mql5.com/ru/forum/160683/page1189#comment_17047032

파일:
Bug.mq5  7 kb
Correct.mq5  6 kb
 
Seric29 :

mql4가 아닌 C++ 언어가 Expert Advisor 구현에 최대한 참여하도록 dll 라이브러리가 주문을 보내고 데이터를 교환할 수 있도록 Meta Quotes 서버에 연결하는 방법은 무엇입니까?

안 돼요. 프로토콜이 닫힙니다.

dll 라이브러리를 사용하여 MT4에서 개체를 그릴 수 있습니까? 이 문제에 대해 무엇을 연구할 수 있습니까?

금지되어 있습니다.

 
Seric29 :

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

제가 실수를(

거래 작업 전에 로트를 다시 계산해야 하는 경우 OnTick의 시작 부분에 로트 정의를 배치하는 것이 좋습니다.

또는 (내가 변경함에 따라) OnTimer

 

안녕하세요! 모든 값을 표시하도록 도와주세요. 저는 마지막 값만 표시할 수 있습니다. 그리고 두 번째 질문은 오른쪽으로 이동하여 이러한 값을 표시하는 방법입니다(모든 이동 설정). 고맙습니다!

   for ( int p = 0 ; p < 4 ; p++)
       for ( int c = 0 ; c < 4 ; c++)
         for ( int ps = 0 ; ps < 4 ; ps++)
             Comment ( StringFormat ( "Выводим значения\nP = %G\nC = %G\nPS = %d" , p, c, ps));
 

언론에서 분리기에 대해 존중할 수 있는 곳은 어디입니까? 그런 다음 그들은 그것을 더하기, 그 다음 쉼표, 이해하지 못함, 문제로 나눕니다.

인쇄 (a, b + "abc") ;

 
Koldun Zloy :

안 돼요. 프로토콜이 닫힙니다.

금지되어 있습니다.

프로토콜 폐쇄는 무엇을 의미합니까? mql4에는 주문을 여는 기능이 있으며 이는 본질적으로 일반 코드입니다. 그래픽 개체의 경우에도 마찬가지입니다. mql4는 상용 제품이고 바로 이러한 이유로 내장 기능(예: Arrayresize/Range 등)에 대한 소스 코드나 코드가 없다고 들었습니다. 예를 들어, mql4를 사용 하여 프로그램을 작성하는 것이 편리하지 않습니다. 언어가 너무 죽어서 매우 제한적입니다. 그리고 내 질문에 대해 아무 것도 할 수없는 언어 Win API 32는 어떻습니까? 아마도 Win API 32에서도 모든 것이 닫혀 있을 것입니다.

 
Seric29 :

프로토콜 폐쇄는 무엇을 의미합니까? mql4에는 주문을 여는 기능이 있으며 이는 본질적으로 일반 코드입니다. 그래픽 개체의 경우에도 마찬가지입니다. mql4는 상용 제품이고 바로 이러한 이유로 내장 기능(예: Arrayresize/Range 등)에 대한 소스 코드나 코드가 없다고 들었습니다. 예를 들어, mql4를 사용 하여 프로그램을 작성하는 것이 편리하지 않습니다. 언어가 너무 죽어서 매우 제한적입니다. 그리고 내 질문에 대해 아무 것도 할 수없는 언어 Win API 32는 어떻습니까? 아마도 Win API 32에서도 모든 것이 닫혀 있을 것입니다.

별도의 주제를 만드는 것이 좋습니다. 더 생생합니다)

 
MakarFX :

제가 실수를(

거래 작업 전에 로트를 다시 계산해야 하는 경우 OnTick의 시작 부분에 로트 정의를 배치하는 것이 좋습니다.

또는 (내가 변경함에 따라) OnTimer

그래서 변수 "Lot"를 표현식으로 초기화한 것에 대해 이야기하고 있는데, 이 표현식이 자동으로 거기에 대체될 수는 없습니다. 확인하고 일반 카운터를 가져 와서 수행하고 초기화 중에 카운터 값을 할당 한 다음 카운터를 변경할 수도 있으며 직접 변경하지 않으면 Lot 값이 변경되지 않습니다. 이것은 C++에서 작동합니다.

 int Pomidor= 9 ;
int Pomidor1( int q=Pomidor){ return q;} //при инициализации
Вызов
Print (Pomidor()); // результат будет автоматически равен Pomidor и это будет регулярная смена значений 

그리고 mql4에서는 다음과 같이 작동하지 않습니다.

 int Pomidor1( int q= 67 ){ return q;}

결과 67.

 
Valeriy Yastremskiy :

별도의 주제를 만드는 것이 좋습니다. 더 생생합니다)

글쎄, 나는 또한 주제가 관련이 있다고 생각했지만 물론 포럼을 망치는 가치가 있다는 사실은 아니며 아마도 여전히 많은 사람들에게 흥미롭지 않을 수 있습니다. 저에게는 흥미롭습니다. 저는 C++로 코드를 작성하는 것을 좋아합니다.