포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 591

 
artmedia70 :
그건... 난 항상 여자를 사랑 해요.

휴... (조용히 숨을 내쉬며) :)

이것은 훌륭합니다! :)

이 지식을 남용하지 않을 것을 약속합니다. :)

란. 잘 자! 자러 가십시오.

 
DiPach :

Artyom은 "... 조건이 작동함 - 레이블을 넣습니다."를 의미하며, 이는 조건이 트리거될 때 스크립트 코드에서 아이콘(레이블)을 설정하는 것을 의미합니다.

MQL4 언어 참조에는 아이콘 생성을 위한 스크립트의 아주 좋은 예가 있습니다. 예를 들어, 이 스크립트 는 차트에서 "구매" 아이콘을 만들고 이동합니다.

r772ra :

좋은 스크립트, 우리는 거기에서 필요한 기능을 가져옵니다.

여기 있습니다.

고맙습니다!
 

어떤 식으로든 구조를 작성하고 싶습니다! 도움말에 따르면 FileWriteStruct 는 크기가 지정되지 않은 경우 전체 구조를 이진 파일에 기록합니다.

누가 어떤 의견을 가지고 있습니까?

마찬가지로 바이너리에 기록됩니다.

또는 그들이 도움을 줄 지점으로 보내십시오.

파일:
 
_SERG_ :

어떤 식으로든 구조를 작성하고 싶습니다! 도움말에 따르면 FileWriteStruct는 크기가 지정되지 않은 경우 전체 구조를 이진 파일에 기록합니다.

누가 어떤 의견을 가지고 있습니까?

마찬가지로 바이너리에 기록됩니다.

또는 그들이 도움을 줄 지점으로 보내십시오.


배열의 크기는 어디에서 정의합니까?

 
Vinin :


배열의 크기는 어디에서 정의합니까?


"ORD Orders[10];" 선언에서 또는 " ArrayResize ( Orders, 10)"를 통해 수행되지만 오류에는 영향을 미치지 않습니다. 확인된 전류입니다. (나는 실제로 스크립트에서 크기를 지정하지 않았습니다.)

다른 유형의 데이터를 변환할 가능성이 없음을 이해합니다.

터미널 646, ME 934.

 
_SERG_ :

"ORD Orders[10];" 선언에서 또는 "ArrayResize( Orders, 10)"를 통해, 그러나 이것은 오류에 영향을 미치지 않습니다. 확인된 전류입니다. (나는 실제로 스크립트에서 크기를 지정하지 않았습니다.)

다른 유형의 데이터를 변환할 가능성이 없음을 이해합니다.

터미널 646, ME 934.


테스트 케이스에서 파일이 생성되었다고 보고했습니다. 나는 단지 찾을 수 없습니다
 
Vinin :

테스트 케이스에서 파일이 생성되었다고 보고했습니다. 나는 단지 찾을 수 없습니다

설립하다. 완전히 다른 디렉토리에 있었지만. 그래서 어떤 효과가
 
Vinin :

설립하다. 완전히 다른 디렉토리에 있었지만. 그래서 어떤 효과가

수정 사항이 보이나요? 파일이 내 것인 경우.

도움말에 있는 것이 DEMO_FileWriteStruct라면 그렇게 컴파일이 되어서 파일에 쓰는 기능을 가져오려고 했는데, 쓰는 줄 수를 조절할 필요가 없습니다. 아니면 구조가 바이트 단위로 쓰여진다는 것을 이해합니까?

그런 다음 질문이 발생하고 바이트 단위로 읽을 수도 있습니까? 구조에서 파일에서 다시 로드해야 하는 경우는 언제입니까?

 
_SERG_ :

수정 사항이 보이나요?


도움말의 예를 사용했습니다.

 //+------------------------------------------------------------------+
//|                                          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 :


도움말의 예를 사용했습니다.

생성된 파일은 \Data\EURUSD에서 찾을 수 있습니다.
npDirectoryName= "Data" InpSymbolName= "EURUSD"