Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 381

 
Vitaly Muzichenko:

Que seja inicialmente assim.

Em seguida, precisamos fazer uma fixação adequada de que a barra é trabalhada, mas aqui precisamos calcular toda a abordagem do TOR.

Até agora, o que eu vejo de seu posto, precisamos fazer isso:

A essência é que se o spread é mais do que o normal, então saímos novamente noOnTick, e em um novo tick check spread, se for normal - enviamos um pedido e lembramos que havia uma troca neste bar.

Há também uma segunda maneira:

Em geral, é preciso definir a lógica, quando ela deve ser registrada, e não verificar novamente até que a "Nova barra" seja formada.


Entendo você, obrigado!

 

Cavalheiros, podem me dar uma dica? Tenho tentado escrever os dados indicadores em um arquivo pela segunda semana a fim de lê-los mais tarde e construir um indicador com base nos dados. O indicador é de treinamento, calculo o volume em cada tick de uma determinada barra. Se o sinal for positivo, seu volume é adicionado com "+", se for negativo - com "-". Acrescento os volumes acumulados obtidos e obtenho um delta e considero este delta cumulativo. Isto produz uma curva. Entretanto, esta curva é construída apenas em tempo real. Não pode ser traçado na história. Para este fim, decidi escrever os dados em um arquivo. Eu fiquei preso nesta fase. Consegui com amargura que o código não gerasse erros de compilação. No entanto, o produto resultante não funciona. O indicador funcionava antes disso. Depois de anexar o código para escrever o arquivo a ele, o indicador não funciona mais. O programa cria um arquivo com um registro incompreensível e morre neste ponto. Estive aqui sentado o dia todo e não consigo entender. Alguém pode me ajudar?

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

input string             InpFileName="111.csv";      // Имя файла 
input string             InpDirectoryName="Data";     // Имя каталога 

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
// double ExtBuffer;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
//SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5=0;

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
     {
      Время=Вр;           // Запомнить
                          //      Buf_1[0]=0;         // и обнулить последний элемент буфера
     }

   datetime date_Buf_1[]; // массив дат индикатора 
   datetime time_Buf_1[]; // массив времени 
                          // --- считаю объем для положительных и отрицательных тиков      
   if(Bid>=Bid1)
     {
      if(Bid>Bid1) // если тик положительный..
        {
         V1=iVolume(NULL,0,0); // если повышающий цену тик, то находим его объем
         V2= V1 + V2;
        }
      else
        {
         V1=0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
         V2= V1 + V2;
        }
     }
   else
     {
      V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
      V4 = V3 + V4;             // то находим его объем  
     }

   V5=V2-V4;               // определяем разницу (дельту) между объемами положительных и отрицательных тиков
   Bid1=Bid;
   Buf_1[0]=V5; // в буфер сгружаем  дельту

                //   ExtBuffer = Buf_1 [0];
//   double macurrent=iMAOnArray(ExtBuffer,0,5,0,MODE_LWMA,0); 

// запись в файл данных буфера

//--- установим для массивов признак таймсерии 
   ArraySetAsSeries(Buf_1,true);
   ArraySetAsSeries(date_Buf_1,true);

//--- скопируем таймсерию 
   int copied=CopyTime(NULL,0,0,0,date_Buf_1);

//--- подготовим массив Buf_1 
   ArrayResize(Buf_1,copied);
//--- скопируем значения линии индикатора  
   for(int i=0;i<copied;i++)
     {
      Buf_1[i]=V5;
     }
//--- откроем файл для записи значений индикатора 
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Файл %s открыт для записи",InpFileName);
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- сначала запишем значения индикатора 
      FileWrite(file_handle,Buf_1[0]);
      //--- запишем время и значения в файл 
      for(int i=0;i<Buf_1[0];i++)
         FileWrite(file_handle,time_Buf_1[i],Buf_1[i]);
      //--- закрываем файл 
      FileClose(file_handle);
      PrintFormat("Данные записаны, файл %s закрыт",InpFileName);
     }
   else
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError());

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade:

Cavalheiros, podem me dar uma dica? Tenho tentado escrever os dados indicadores em um arquivo pela segunda semana a fim de lê-los mais tarde e construir um indicador com base nos dados. O indicador é de treinamento, calculo o volume em cada tick de uma determinada barra. Se o tique for positivo seu volume é adicionado com "+", se for negativo - com "-". Acrescento os volumes acumulados obtidos e obtenho um delta e considero este delta cumulativo. Isto produz uma curva. Entretanto, esta curva é construída apenas em tempo real. Não pode ser traçado na história. Para este fim, decidi escrever os dados em um arquivo. Eu fiquei preso nesta fase. Consegui com pesar fazer com que o código não gerasse erros de compilação. No entanto, o produto resultante não funciona. O indicador funcionava antes. Depois de anexar o código para escrever o arquivo a ele, o indicador não funciona mais. O programa cria um arquivo com um registro incompreensível e morre neste ponto. Estive aqui sentado o dia todo e não consigo entender. Alguém pode me ajudar?


Seria uma boa idéia mover o ponteiro para o final do arquivo antes da gravação.

FileSeek - Файловые операции - Справочник MQL4
FileSeek - Файловые операции - Справочник MQL4
  • docs.mql4.com
Если выставить позицию за "правую границу" файла (больше, чем размер файла), то последующая запись в файл будет будет произведена не с конца файла, а с выставленной позиции. При этом между предыдущим концом файла и выставленной позицией будут записаны неопределенные значения...
 
Alexey Viktorov:

Seria bom mover o ponteiro para o final do arquivo antes de escrever.


Para que serve isto? Eu li o link, mas não o entendo.

 
YarTrade:

Para que serve isto? Eu li o link, mas não o entendo.

Para quê? Quando você abre um arquivo, o ponteiro é posicionado no início do arquivo e a informação é escrita no início do arquivo. Para escrever no lugar certo, você tem que mover o ponteiro para o lugar certo.

 
YarTrade:

Cavalheiros, podem me dar uma dica? Durante a segunda semana, tenho tentado escrever dados indicadores em um arquivo...

Você já leu?
 
Alexey Kozitsyn:
Você já leu?

Eu ainda estou aprendendo MQL4. Eu não li.

Existe um serviço de treinamento on-line onde você pode aprender MQL4 gratuitamente/pago através de exemplos com um instrutor? Eu quase li o tutorial MQL4, mas não consigo programar nada. Eu não estou familiarizado com programação antes. Estou tentando aprender algo nesta linha, mas não fiz nenhum progresso. Você pode me dar alguns conselhos?

 
YarTrade:

Eu ainda estou aprendendo MQL4. Eu não li.

Existe um serviço de treinamento on-line onde você pode aprender MQL4 gratuitamente/pago através de exemplos com um tutor? Eu quase li um tutorial MQL4, mas não consigo programar nada. Eu não estou familiarizado com programação antes. Estou tentando aprender algo nesta linha, mas não fiz nenhum progresso. Você pode me dar algumas sugestões?

1. Trabalhar com arquivos em mql4 é o mesmo que em mql5.

2. Com todo respeito a Sergei Kovalev, ele também respondeu minhas perguntas em seu tempo, mas na minha opinião, as lições de Kirill são mais fáceis de entender. Em Yandex você digita e imediatamente 2 links para sua lição


 

Olá! O tutorial do site foi suficiente para mim, depois de alguns anos batendo nos deflectores aprendi a escrever meus próprios indicadores. Mas as perguntas permanecem. Agora eu não entendo porque os indicadores ficam confusos. Na M1, após cerca de 12 horas, alguns deles começam a desenhar incorretamente, mas sinalizam corretamente. Alguns deles estão desenhando e sinalizando de forma incorreta. Na M5, eles continuam desenhando cinco vezes mais. Pode me dar uma dica, por favor?

 
Alexey Viktorov:

1. A manipulação de arquivos em mql4 é a mesma que em mql5.

2. Com todo respeito a Sergey Kovalev, ele também respondeu às minhas perguntas em seu tempo, mas na minha opinião, a lição de Kirill é mais fácil de entender. Em Yandex, digite em e imediatamente 2 links para sua lição



É possível aprender com a ajuda das lições "Kirill's" se você não se envolveu em programação antes? Quanto tempo leva, do seu ponto de vista?

Razão: