Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 381

 
Vitaly Muzichenko:

Che all'inizio sia così.

Successivamente, dobbiamo fare una corretta fissazione che la barra è elaborata, ma qui dobbiamo calcolare l'intero approccio alla TOR.

Finora, da quello che vedo dal tuo post, abbiamo bisogno di fare questo:

L'essenza è che se lo spread è più del normale, allora usciamo di nuovo inOnTick, e su un nuovo tick controlliamo lo spread, se è normale - inviamo un ordine e ricordiamo che c'è stato un trade su questa barra.

C'è anche un secondo modo:

In generale, è necessario definire la logica, quando deve registrare, e non controllare di nuovo fino a quando la "Nuova barra" è formata.


Ti capisco, grazie!

 

Signori, potete darmi un suggerimento? Ho cercato di scrivere i dati dell'indicatore in un file per la seconda settimana per poterli leggere in seguito e costruire un indicatore basato sui dati. L'indicatore è di formazione, calcolo il volume su ogni tick di una certa barra. Se il tick è positivo il suo volume viene aggiunto con "+", se è negativo - con "-". Aggiungo i volumi accumulati ottenuti e ottengo un delta e considero questo delta cumulativo. Questo produce una curva. Tuttavia, questa curva è costruita solo in tempo reale. Non può essere tracciato nella storia. A questo scopo, ho deciso di scrivere i dati in un file. Mi sono bloccato in questa fase. Sono riuscito con dolore a far sì che il codice non generi errori di compilazione. Tuttavia, il prodotto risultante non funziona. L'indicatore funzionava prima. Dopo aver allegato il codice per scrivere il file, l'indicatore non funziona più. Il programma crea un file con un record incomprensibile e muore a questo punto. Sono stato seduto qui tutto il giorno e non riesco a capirlo. Qualcuno può aiutarmi?

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

Signori, potete darmi un suggerimento? Ho cercato di scrivere i dati dell'indicatore in un file per la seconda settimana per poterli leggere in seguito e costruire un indicatore basato sui dati. L'indicatore è di formazione, calcolo il volume su ogni tick di una certa barra. Se il tick è positivo il suo volume viene aggiunto con "+", se è negativo - con "-". Aggiungo i volumi accumulati ottenuti e ottengo un delta e considero questo delta cumulativo. Questo produce una curva. Tuttavia, questa curva è costruita solo in tempo reale. Non può essere tracciato nella storia. A questo scopo, ho deciso di scrivere i dati in un file. Mi sono bloccato in questa fase. Ho gestito con amarezza il fatto che il codice non genera errori del compilatore. Tuttavia, il prodotto risultante non funziona. L'indicatore ha funzionato prima. Dopo aver allegato il codice per scrivere il file, l'indicatore non funziona più. Il programma crea un file con un record incomprensibile e muore a questo punto. Sono stato seduto qui tutto il giorno e non riesco a capirlo. Qualcuno può aiutarmi?


Sarebbe una buona idea spostare il puntatore alla fine del file prima di registrare.

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

Sarebbe bene spostare il puntatore alla fine del file prima di scrivere.


A cosa serve questo? Ho letto il link, ma non lo capisco.

 
YarTrade:

A cosa serve questo? Ho letto il link, ma non lo capisco.

Per quale motivo? Quando si apre un file, il puntatore viene posizionato all'inizio del file e le informazioni vengono scritte all'inizio del file. Per scrivere nel posto giusto, devi spostare il puntatore nel posto giusto.

 
YarTrade:

Signori, potete darmi un suggerimento? Per la seconda settimana ho cercato di scrivere i dati dell'indicatore in un file...

L'hai letto?
 
Alexey Kozitsyn:
L'hai letto?

Sto ancora imparando MQL4. Non ho letto.

C'è un servizio di formazione online dove si può imparare MQL4 gratuitamente/pagato tramite esempi con un tutor? Ho quasi letto il tutorial MQL4, ma non so programmare affatto. Non ho familiarità con la programmazione prima. Sto cercando di imparare qualcosa in questo thread, ma non ho fatto alcun progresso. Potete darmi qualche consiglio?

 
YarTrade:

Sto ancora imparando MQL4. Non ho letto.

C'è un servizio di formazione online dove si può imparare MQL4 gratuitamente/pagato tramite esempi con un tutor? Ho quasi letto un tutorial di MQL4, ma non so proprio programmare. Non ho familiarità con la programmazione prima. Sto cercando di imparare qualcosa in questo thread, ma non ho fatto alcun progresso. Puoi darmi qualche suggerimento?

1. Lavorare con i file in mql4 è lo stesso che in mql5.

2. Con tutto il rispetto per Sergei Kovalev, anche lui ha risposto alle mie domande a suo tempo, ma secondo me, le lezioni di Kirill sono più facili da capire. In Yandex si digita e subito 2 link alla sua lezione


 

Ciao, il tutorial del sito mi è bastato, dopo qualche anno di botte sui deflettori ho imparato a scrivere i miei indicatori. Ma le domande rimangono. Ora non capisco perché gli indicatori si confondono. Su M1 dopo 12 ore alcuni di loro iniziano a disegnare in modo errato ma segnalano correttamente. Alcuni di loro disegnano e segnalano in modo scorretto. Sulla M5 continuano a disegnare cinque volte di più. Puoi darmi un suggerimento?

 
Alexey Viktorov:

1. La gestione dei file in mql4 è la stessa di mql5.

2. Con tutto il rispetto per Sergei Kovalev, anche lui ha risposto alle mie domande a suo tempo, ma secondo me, la lezione di Kirill è più facile da capire. In Yandex, digita su e subito 2 link alla sua lezione



È possibile imparare con l'aiuto delle lezioni di "Kirill" se non avete mai programmato prima? Quanto tempo ci vuole, dal suo punto di vista?

Motivazione: