Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 591

 
artmedia70:
Nah... J'ai toujours aimé les filles.

Euh... (expire doucement) : )

C'est génial ! :)

Je promets de ne pas abuser de ces connaissances. :)

Lan. Nuit-nuit ! Je vais dormir maintenant.

 
DiPach:

Artyom voulait dire par "... condition déclenchée - mettre une marque", ce qu'il voulait dire c'est qu'il fallait écrire dans le code du script pour mettre l'icône (marqueur) lorsque la condition est déclenchée.

La référence MQL4 contient de très bons exemples de scripts pour la création d'icônes. Par exemple, ce script qui crée et déplace les icônes "Acheter" sur un graphique.

r772ra:

Bon script, tirez la fonction requise de là,

et voilà.

Merci !
 
 

Je veux écrire la structure, mais je ne peux pas ! Il est écrit dans l'aide que FileWriteStruct écrit dans un fichier binaire, si la taille n'est pas spécifiée, alors la structure entière.

Qui a une opinion ?

Il écrit toujours sur un binaire.

Ou m'envoyer dans une agence où ils pourront m'aider.

Dossiers :
 
_SERG_:

Je veux écrire la structure, mais je ne peux pas ! Il est écrit dans l'aide que FileWriteStruct écrit dans un fichier binaire, si la taille n'est pas spécifiée, alors la structure entière.

Qui a une opinion ?

Il écrit toujours sur un binaire.

Ou me diriger vers une agence où ils peuvent m'aider.


Où définissez-vous la taille du tableau?

 
Vinin:


Où définissez-vous la taille du tableau ?


Dans la déclaration " ORD Orders[10] ;" ou via "ArrayResize( Orders, 10)", mais cela n'affecte pas l'erreur. Je viens de le vérifier. (Je n'ai pas vraiment précisé la taille dans le script).

Je suppose qu'il n'y a pas de possibilité de convertir différents types de données.

Terminal 646, ME 934.

 
_SERG_:

dans la déclaration " ORD Orders[10] ;" ou via "ArrayResize( Orders, 10)", mais cela n'affecte pas l'erreur. Je viens de vérifier. (Je n'ai pas vraiment spécifié de taille dans le script).

Je suppose qu'il n'y a pas de possibilité de convertir différents types de données.

Terminal 646, ME 934.


L'exemple de test a signalé que le fichier a été créé. Je n'arrive pas à le trouver.
 
Vinin:

L'exemple de test a signalé que le fichier a été créé. Je n'arrive pas à le trouver.

Je l'ai trouvé. Bien que je devrais l'avoir dans un répertoire complètement différent. Donc ça marche.
 
Vinin:

Je l'ai trouvé. Bien que je l'aie dans un répertoire complètement différent. Donc ça marche.

Je peux voir les corrections ? Si le fichier est le mien.

Si celui de l'aide, DEMO_FileWriteStruct, donc il compile, j'ai essayé de prendre la fonction d'écriture au fichier de celui-ci, mais je n'ai pas besoin de contrôler le nombre de lignes écrites. Ou ai-je bien compris que la structure est écrite octet par octet ?

J'ai alors une question : faut-il aussi le lire octet par octet ? Dans la structure, lorsqu'il est nécessaire de la recharger à partir du fichier ?



 
_SERG_:

Pouvons-nous jeter un coup d'œil aux corrections ?


J'ai utilisé l'exemple de l'aide

//+------------------------------------------------------------------+
//|                                          Demo_FileWiteStruct.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- параметры для получения данных из терминала
input string          InpSymbolName="EURUSD";           // валютная пара
input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1;        // таймфрейм
input datetime        InpDateStart=D'2013.01.01 00:00'; // дата начала копирования данных
//--- параметры для записи данных в файл
input string          InpFileName="EURUSD.txt";         // имя файла
input string          InpDirectoryName="Data";          // имя директории
//+------------------------------------------------------------------+
//| Структура для хранения данных свечи                              |
//+------------------------------------------------------------------+
struct candlesticks
  {
   double            open;  // цена открытия
   double            close; // цена закрытия
   double            high;  // максимальная цена
   double            low;   // минимальная цена
   datetime          date;  // дата
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime     date_finish=TimeCurrent();
   int          size;
   datetime     time_buff[];
   double       open_buff[];
   double       close_buff[];
   double       high_buff[];
   double       low_buff[];
   candlesticks cand_buff[];
//--- сбросим значение ошибки
   ResetLastError();
//--- получим время появления баров из диапазона
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения времени. Код ошибки = %d",GetLastError());
      return;
     }
//--- получим максимальные цены баров из диапазона
   if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения максимальных цен. Код ошибки = %d",GetLastError());
      return;
     }
//--- получим минимальные цены баров из диапазона
   if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения минимальных цен. Код ошибки = %d",GetLastError());
      return;
     }
//--- получим цены открытия баров из диапазона
   if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения цен открытия. Код ошибки = %d",GetLastError());
      return;
     }
//--- получим цены закрытия баров из диапазона
   if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1)
     {
      PrintFormat("Не удалось скопировать значения цен закрытия. Код ошибки = %d",GetLastError());
      return;
     }
//--- определим размерность массивов
   size=ArraySize(time_buff);
//--- сохраним все данные в массиве структуры
   ArrayResize(cand_buff,size);
   for(int i=0;i<size;i++)
     {
      cand_buff[i].open=open_buff[i];
      cand_buff[i].close=close_buff[i];
      cand_buff[i].high=high_buff[i];
      cand_buff[i].low=low_buff[i];
      cand_buff[i].date=time_buff[i];
     }
 
//--- откроем файл для записи массива структуры в файл (если его нет, то создастся автоматически)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Файл %s открыт для записи",InpFileName);
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH));
      //--- подготовим счетчик количества байт
      uint counter=0;
      //--- в цикле запишем значения массива
      for(i=0;i<size;i++)
         counter+=FileWriteStruct(file_handle,cand_buff[i]);
      PrintFormat("В файл %s записано %d байт информации",InpFileName,counter);
      PrintFormat("Всего байтов: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counter ? "Верно" : "Ошибка");
      //--- закрываем файл
      FileClose(file_handle);
      PrintFormat("Данные записаны, файл %s закрыт",InpFileName);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());
  }
 
Vinin:


J'ai utilisé l'exemple de l'aide

Le fichier généré se trouve dans \Data\EURUSD.
npDirectoryName="Data"  InpSymbolName="EURUSD"
Raison: