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

 
Artyom Trishkin :

나는 이미 당신에게 대답했습니다:

목록의 마지막 주문을 받습니다.

그리고 먼저 주문 목록에서 상태가 얼마나 변경되었는지 알아야 합니다. 12에서 8이 되어 4주문으로 바뀌었습니다. 따라서 네 가지 주문을 모두 인쇄해야 합니다. 그리고 항상 목록의 마지막 항목만 인쇄합니다.

얼마나 많이 변했는지 어떻게 알 수 있습니까? 어드바이저를 시작할 때 변수에 주문 수를 기록해야 합니다(예: int last_total). 그런 다음 각 틱에서 OrdersTotal()을 last_total과 비교합니다. 동일하지 않으면 변경이 발생한 것입니다. OrdersTotal()과 last_total의 차이를 num_changes와 같은 변수에 쓰고 OrdersTotal()의 새로운 상태를 last_total에 저장합니다.
예를 들어 보류 중인 주문이 트리거될 때 여기에 뉘앙스가 있을 수 있습니다. 그러나 지금은 시작하는 데 필요한 작업을 수행합니다.
누락된 주문의 수를 알면 내역에서 확인할 수 있습니다. 그러나 과거 목록에서 주문을 통제하는 것만으로 제한할 수 있습니다. 시장 목록이 아니라 과거 주문 목록에 대해 위에서 설명한 모든 작업을 수행하십시오. 과거와 현재의 차이는 분석해야 하는 주문의 수입니다. 항상 목록의 마지막 항목만 분석합니다.

동시에 기록 목록의 마지막 주문이 마감된 마지막 주문이 될 것이라는 보장은 없습니다. 이것들은 또한 고려해야 할 뉘앙스입니다. 하지만.

매우 감사합니다. 훨씬 더 명확합니다. 키워드 - 한 번에 하나가 아닌 4개의 주문을 인쇄해야 합니다 . 당신이 첫 번째 게시물에서 그들에게 말했다면, 나는 당신을 "고통"시키지 않았을 것입니다.

 
ANDREY :

매우 감사합니다. 훨씬 더 명확합니다. 키워드 - 한 번에 하나가 아닌 4개의 주문을 인쇄해야 합니다 . 당신이 첫 번째 게시물에서 그들에게 말했다면, 나는 당신을 "고통"시키지 않았을 것입니다.

별말씀을요. 이것 또는 그 행동의 논리를 스스로 작성하는 방법을 배우기 전까지는 결코 시작하지 않을 것입니다. 포럼에서 질문할 것입니다. 그리고 논리는 구성하기가 더 쉬운 곳이 없습니다. 간단한 단어로 컴파일됩니다. 이 경우 주문/목록/티켓 등에 묶일 필요는 없습니다.

사과에서 숫자를 추적하는 알고리즘을 쉽게 만들 수 있다고 생각합니다. 모든 것이 인생과 같습니다. 테이블에 사과가 몇 개 있는지 기억하고 담배를 피우러 가십시오. 사과가 더 적습니다 ...
당신은 그것에 대해 어떻게 알았습니까? 쉬움 - 그것은 5, 지금은 3입니다. 2가 사라졌습니다. 고양이는 아마 ... 아니면 5 였을 때 6이되었습니다. 하나가 나타났습니다. 습기에서 아마도 ... 어떤 경우에도 마음의 차이를 계산했습니다.

그렇다면 동일한 작업이 주문을 계산하는 것과 어떻게 다릅니까? 같은 사과 ... "마음에"대신 "기능에"라고 쓰십시오

 

코드가 200줄이 넘고 이 모든 것을 넘기는 것이 불편하다면 코드에서 함수를 빼는 방법( decomposition )을 알려주세요. "역학"에 관심: 나중에 메인 코드에서 호출할 수 있도록 함수가 작성되는 "수행" 방법.

설명이 포함된 예가 있는 경우 - 링크에 감사드립니다.
 
Alexey Kolybelnikov :

코드가 200줄이 넘고 이 모든 것을 넘기는 것이 불편하다면 코드에서 함수를 빼는 방법( decomposition )을 알려주세요. "역학"에 관심: 나중에 메인 코드에서 호출할 수 있도록 함수가 작성되는 "수행" 방법.

설명이 포함된 예가 있는 경우 - 링크에 감사드립니다.

그것은 다음과 같았습니다.

 double a = (b + c) / (d - e);


그것은되었다:

 double a = Add(b,c) / Sub(d,e);

//---------

Add( const double v1, const double v2) { return v1 + v2; }

Sub( const double v1, const double v2) { return v1 - v2; }
 
Artyom Trishkin :

별말씀을요. 이것 또는 그 행동의 논리를 스스로 작성하는 방법을 배우기 전까지는 결코 시작하지 않을 것입니다. 포럼에서 질문할 것입니다. 그리고 논리는 구성하기가 더 쉬운 곳이 없습니다. 간단한 단어로 컴파일됩니다. 이 경우 주문/목록/티켓 등에 묶일 필요는 없습니다.

사과에서 숫자를 추적하는 알고리즘을 쉽게 만들 수 있다고 생각합니다. 모든 것이 인생과 같습니다. 테이블에 사과가 몇 개 있는지 기억하고 담배를 피우러 가십시오. 사과가 더 적습니다 ...
당신은 그것에 대해 어떻게 알았습니까? 쉬움 - 그것은 5, 지금은 3입니다. 2가 사라졌습니다. 고양이는 아마도 ... 아니면 5가 6이되었습니다. 하나가 나타났습니다. 습기에서 아마도 ... 어떤 경우에도 마음의 차이를 계산했습니다.

그렇다면 동일한 작업이 주문을 계산하는 것과 어떻게 다릅니까? 같은 사과 ... "마음에"대신 "기능에"라고 쓰십시오

알겠습니다. 설명해주셔서 감사합니다. 이 질문은 오랫동안 내 머리에서 맴돌았다.... 내 코드에서는 Print() 함수 가 로그에 자주 인쇄된다고 가정합니다. 자동으로 각 미결 주문과 각 주문의 마감이 저널에 인쇄됩니다. 주문이 많습니다. 따라서 많은 주문 기록이 있을 것입니다. 이러한 레코드로 인해 Print() 함수에서 데이터를 수락하지 못하는 경우가 많습니다. 이 함수도 많을 수 있습니다.

문제

내가 필요할 때 오픈 주문과 마감 주문에 대한 정보 가 로그에 표시되지 않고 Print() 함수만 표시되도록 만드는 방법

MQL4 언어의 일부 기능을 사용하여 이 작업을 수행할 수 있습니까? 아니면 이를 위해 MT4 터미널 코드를 변경해야 합니까?

고맙습니다.
 
ANDREY :

알겠습니다. 설명 감사합니다. 이 질문은 오랫동안 내 머리에서 맴돌았다.... 내 코드에서는 Print() 함수 가 로그에 자주 인쇄된다고 가정합니다. 자동으로 각 미결 주문과 각 주문의 마감이 저널에 인쇄됩니다. 주문이 많습니다. 따라서 많은 주문 기록이 있을 것입니다. 이러한 레코드로 인해 Print() 함수에서 데이터를 수락하지 못하는 경우가 많습니다. 이 함수도 많을 수 있습니다.

문제

내가 필요할 때 오픈 주문과 마감 주문에 대한 정보 가 로그에 표시되지 않고 Print() 함수만 표시되도록 만드는 방법

MQL4 언어의 일부 기능을 사용하여 이 작업을 수행할 수 있습니까? 아니면 이를 위해 MT4 터미널 코드를 변경해야 합니까?

고맙습니다.

조사를 하고 있다면 파일에 쓰는 것이 좋습니다. 로그에 주문이있는 작업 표시를 비활성화하는 방법을 모르겠습니다. 존재하지 않는 것 같습니다. 이것은 고문의 작업 시작과 끝의 기록 수준입니다. 이것은 로그 파일 항목입니다. 파일에는 원하는 항목만 포함되며 로그에 터미널 항목이 있을 것입니다. 터미널에서 변경할 수 있으며 직접 작성할 수도 있습니다))) 그러나 비용은 얼마입니까 ???

 
Alexey Kolybelnikov :

코드가 200줄이 넘고 이 모든 것을 넘기는 것이 불편하다면 코드에서 함수를 빼는 방법( decomposition )을 알려주세요. "역학"에 관심: 나중에 메인 코드에서 호출할 수 있도록 함수가 작성되는 "수행" 방법.

설명이 포함된 예가 있는 경우 - 링크에 감사드립니다.

https://www.mql5.com/ru/docs/runtime/imports

https://www.mql5.com/ru/docs/basis/preprosessor/include

그런 다음 링크를 따라가세요... 일반적으로: *.mqh 라이브러리에 대한 모든 "추가"는 주 코드 시작 부분에 포함합니다. 컴파일러는 "접착"합니다

그러나 일반적으로 200줄은 많지 않습니다 - 버튼을 사용하여 수천줄이 넘는 대사에도 편안함을 느낄 수 있습니다.

 
Valeriy Yastremskiy :

조사를 하고 있다면 . 로그에 주문이있는 작업 표시를 비활성화하는 방법을 모르겠습니다. 존재하지 않는 것 같습니다. 이것은 고문의 작업 시작과 끝의 기록 수준입니다. 이것은 로그 파일 항목입니다. 파일에는 원하는 항목만 포함되며 로그에 터미널 항목이 있을 것입니다. 터미널에서 변경할 수 있으며 직접 작성할 수도 있습니다))) 그러나 비용은 얼마입니까 ???

팁 고마워. 그러나 내가 보기에는 파일에 고문을 쓴 적이 없습니다. 저는 항상 MetaEditor 4 편집기에서 Expert Advisor를 작성했는데 전체 테스트 기간 동안 Print() 함수가 출력하는 내용을 보려면 Log - Open 탭을 선택합니다. 그리고 파일은 로그 탭과 동일한 내용으로 메모장에서 열립니다. 로그 파일인 것 같아요.
하지만 이 메모장 파일에서 열려 있는 모든 주문과 해당 마감을 제거할 방법이 없는 것 같습니다. 또는 오히려 있습니다. 그러나 이것은 매우 지루하고 힘든 작업입니다.
제 주문코드를 열고 닫는 비법을 알려주시면 정말 감사하겠습니다만, 파일에 모든 주문을 열고 닫는 정보는 없고 Print() 함수만 기록되어 있습니다.
도와 주셔서 감사합니다.

 
ANDREY :


최신 MQL4 업데이트에 대한 자세한 내용을 어디에서 읽을 수 있는지 알고 있습니까?그렇지 않으면 도처에 많은 정보가 있고 올바른 정보를 찾기가 매우 어렵습니다.

https://www.mql5.com/en/forum/160683/page1109#comment_15711102

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2020.03.31
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
ANDREY :

팁 고마워. 그러나 내가 보기에는 파일에 고문을 쓴 적이 없습니다. 저는 항상 MetaEditor 4 편집기에서 Expert Advisor를 작성했는데 전체 테스트 기간 동안 Print() 함수가 출력하는 내용을 보려면 Log - Open 탭을 선택합니다. 그리고 파일은 로그 탭과 동일한 내용으로 메모장에서 열립니다. 로그 파일인 것 같아요.
하지만 이 메모장 파일에서 열려 있는 모든 주문과 해당 마감을 제거할 방법이 없는 것 같습니다. 또는 오히려 있습니다. 그러나 이것은 매우 지루하고 힘든 작업입니다.
제 주문코드를 열고 닫는 비법을 알려주시면 정말 감사하겠습니다만, 파일에 모든 주문을 열고 닫는 정보는 없고 Print() 함수만 기록되어 있습니다.
도와 주셔서 감사합니다.

 int OnInit ()
  {   
//----------
   FileTest() // функция открытия файла записи данных
   point = 1 / Point ; // чтобы не делить на пойнт
   tx= TimeCurrent (); // задание времени начала работы советника
//--- create timer
   EventSetTimer ( 60 );

//---
   return ( INIT_SUCCEEDED );
  }

void OnDeinit ( const int reason)
  {

   FileClose ( Handle );                 // Закрываем файл
   Alert ( "Файл " ,File_Name, " закрыт." ); // Сообщение
     
//--- destroy timer
   EventKillTimer ();

  }

void OnTick ()     // Функция start() раньше называлась
  {
.................
 Qnt_Symb= FileWrite (Handle, Symbol (), " ТФ " , Period (), "Открыт ордер Buy по цене " ,Ask,
             "Ticket = " ,Ticket, " ProfB=" ,ProfB, " MxProfB=" ,MxProfB, " ProfS=" ,ProfS, " MxProfS=" ,MxProfS); //Запись в файл
             if (Qnt_Symb<= 0 ) // Если не получилось
              {
               Alert ( "Ошибка записи в файл " , GetLastError ()); // Сообщение
              };
.................
}
//-------------------------------------------------------------- 12 --

int FileTest()
  {
   Handle= FileOpen (File_Name, FILE_CSV | FILE_WRITE , ";" ); //Открытие файла
   if (Handle==- 1 ) // Неудача при открытии файла
     {
       Alert ( "Ошибка при открытии файла. " , // Сообщение об ошибке
             "Возможно, файл занят другим приложением" );

     }

   return (Handle);
  }
//+------------------------------------------------------------------+

테스터에서 파일은 \tester\files 폴더에 있고 창에 던지면 \MQL4\Files 폴더에 있습니다. 그리고 Kovalev는 그것을 자세히 가지고 있습니다.