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

 
Artyom Trishkin :

나는 그것을 직접 확인했다 - 모든 것은 mql4에서 컴파일된다.

다른 곳에서 실수를 하셨습니다.

이것은 내 코드가 아니라 Vasily Sokolov의 수업입니다. 두 사람이 MT4에서 컴파일되지 않는다고 불평했습니다. 또한 빌드 1090이라는 오류가 발생합니다. MT4에서 컴파일을 위한 전체 클래스를 확인할 수 있습니까? 그러면서 엉뚱한 말이 나옵니다. 미리 감사드립니다.

https://www.mql5.com/ru/articles/1334#summary - 기사 하단의 클래스 자체

Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • 2015.03.23
  • Vasiliy Sokolov
  • www.mql5.com
Эта статья описывает удобный класс для хранения информации - ассоциативный массив или словарь. Благодаря этому классу можно получать доступ к информации по ее ключу. Ассоциативный массив напоминает обычный массив, однако вместо индекса он использует некий уникальный ключ, например, перечисление ENUM_TIMEFRAMES или какой-либо текст. Что...
 
Alexey Volchanskiy :

이것은 내 코드가 아니라 Vasily Sokolov의 수업입니다. 두 사람이 MT4에서 컴파일되지 않는다고 불평했습니다. 또한 빌드 1090이라는 오류가 발생합니다. MT4에서 컴파일을 위한 전체 클래스를 확인할 수 있습니까? 그러면서 엉뚱한 말이 나옵니다. 미리 감사드립니다.

https://www.mql5.com/en/articles/1334#summary - 기사 하단의 클래스 자체

컴파일
 
Artyom Trishkin :
컴파일

어떻게 확인했는지 보여주세요.

 
Victor Nikolaev :

어떻게 확인했는지 보여주세요.

비트, 지금은 보여주지 않겠습니다. 컴퓨터가 아닙니다.
내 성경에서는 이 Vasily 클래스를 사용합니다. 두 플랫폼 모두.
그리고 한 가지 더 - 그는 이 라인을 그의 첫 번째 4학년 수업의 비공개 섹션에 삽입했습니다. 그리고 모든 것이 컴파일되었습니다.
 
Victor Nikolaev :

어떻게 확인했는지 보여주세요.

여기 수업이 있습니다

파일:
Dictionary.mqh  45 kb
 
인사말.
이름 = 티켓 + 기호로 파일을 만듭니다.
나는 파일 에 포지션 개시 가격과 현재 가격, 가격의 위치에 따라 문자 "P" 또는 "L"을 씁니다.
30분을 넘지 않은 포지션 오픈 시간의 데이터를 작성하는 것이 필요합니다.
문제는 데이터가 가장 최근의 한 위치에 대해서만 기록된다는 것입니다.
나머지 파일은 기록되지 않습니다. 위치 4.
결정하는 방법?

datetime t_pre= 0 ,t_lo;
string param= "" ; string sy= "" ; int op=- 1 ; int mn=- 1 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
  PO= MarketInfo ( Symbol (), MODE_POINT );
   vspread=( int ) MarketInfo ( Symbol (), MODE_SPREAD );
   datetime _o_t;
   double _Profit,_lot,_Swap,_pr,_tp,_sl,lA=- 1 ;
   int _Ticket,_Type;
   string _Comm;
   int       i,k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
        {
         if ( OrderSymbol ()==sy || sy== "" ) 
           {
             if ( OrderType ()== OP_BUY || 
               OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {

                     _o_t= OrderOpenTime ();

                     _pr= OrderOpenPrice ();

                     _Ticket= OrderTicket ();

                     _Type= OrderType ();
                     ИмяФайла=_Ticket+ Symbol ()+ ".txt" ;
                     if (_o_t+ 60 < TimeCurrent ())
                         if (t_pre+ 60 < TimeCurrent () && _o_t+ 1800 > TimeCurrent ())
                          {
                           if (_Type== OP_BUY ){ if ( Bid >_pr)text_= "P" ; else text_= "L" ;}
                           if (_Type== OP_SELL ){ if ( Bid <_pr)text_= "P" ; else text_= "L" ;}
                           t_pre= TimeCurrent ();
                           string Текст,Строка;

                           // Открытие или создание файла и перемещение указателя в конец
                           int Файл= FileOpen (ИмяФайла, FILE_CSV | FILE_READ | FILE_WRITE , " " );
                           if (Файл == - 1 )
                             {
                               Alert ( "Ошибка при открытии файла " ,ИмяФайла);
                               return ;
                             }
                           FileSeek (Файл, 0 , SEEK_END );

                           // Если новый файл записать строку заголовков колонок
                           if ( FileSize (Файл)== 0 ) FileWrite (Файл, "           Время Полу   BID     Цена " );

                           // Сбор информации и запись в файл
                           FileWrite (Файл,
                                     TimeToStr ( TimeCurrent ()),
                                     text_,
                                     dstr( Bid ),
                                     "  " ,
                                     dstr(_pr));
                           FileClose (Файл);
                           Файл= 0 ;

                          }
                    }
                 }
              }
           }
        }
     }

   Comment ( "" );
  }
// Преобразование числа double в строку с запятой или точкой в соответствии с локализацией
string dstr( double Цена)
  {
   if (!RUS) return DoubleToStr (Цена, Digits );
   return StringSetChar ( DoubleToStr (Цена, Digits ), StringFind ( DoubleToStr (Цена, Digits ), "." ), ',' );
  }


 
Artyom Trishkin :

여기 수업이 있습니다


그래서-투-투. 다른 버그를 찾았습니다. 한때 개발용 MT4 터미널이 완전히 업데이트되지 않았습니다. 터미널 버전은 1090이고 편집기 버전은 1562입니다. Union은 다른 터미널에서 잘 컴파일되고 편집기 버전은 1601입니다! 업데이트 당시 에디터가 이미 열려있었기 때문에 발생했을 가능성이 있어 이전 버전이 그대로 유지되었습니다. 젠장, 이 쓰레기장에서 반나절을 죽였어.

요컨대, 모든 것이 1601 편집기에서 잘 컴파일됩니다.

 
lil_lil :
인사말.
이름 = 티켓 + 기호로 파일을 만듭니다.
나는 파일 에 포지션 개시 가격과 현재 가격, 가격의 위치에 따라 문자 "P" 또는 "L"을 씁니다.
30분을 넘지 않은 포지션 오픈 시간의 데이터를 작성하는 것이 필요합니다.
문제는 데이터가 가장 최근의 한 위치에 대해서만 기록된다는 것입니다.
나머지 파일은 기록되지 않습니다. 위치 4.
결정하는 방법?

누락 된 FileSeek - 파일의 끝을 검색하고 FileOpen 후에 매번 시작 부분에 씁니다.

 

Alexey Volchanskiy :

그래서-투-투. 다른 버그를 찾았습니다. 한때 개발용 MT4 터미널이 완전히 업데이트되지 않았습니다. 터미널 버전은 1090이고 편집기 버전은 1562입니다. Union은 다른 터미널에서 잘 컴파일되고 편집기 버전은 1601입니다! 업데이트 당시 에디터가 이미 열려있었기 때문에 발생했을 가능성이 있어 이전 버전이 그대로 유지되었습니다. 젠장, 이 쓰레기장에서 반나절을 죽였어.

요컨대, 모든 것이 1601 편집기에서 잘 컴파일됩니다.

글쎄, 그것은 이상하다 ;)

 
STARIJ :

누락된 FileSeek() - 파일의 끝을 검색하고 FileOpen 후에 매번 처음에 씁니다.

FileSeek (파일, 0 , SEEK_END )가 있습니다. 모든 것이 새 줄 에서 파일에 기록됩니다.

문제는 4개의 파일이 있고 4개의 위치에 대한 데이터를 각각 별도의 파일에 작성해야 하며, 각 파일에는 이름에 위치 티켓이 있고 데이터는 마지막 파일, 마지막 파일에 데이터 하나만 기록된다는 것입니다. 위치.