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

 

je viens d'expérimenter avec l'"archive des cotations" . en mettant à jour chaque graphique séparément, l'historique pour presque tous les graphiques a commencé à fonctionner correctement, sauf pour quelques paires exotiques, je les ai supprimées et mises à jour plusieurs fois - pas de nouvelles données pour le graphique. en général, on peut dire que le problème a été résolu


merci pour l'efficacité))))

 

Chers programmateurs....J'ai un problème... J'aicréé un EA.... il ouvre les trades normalement (dans le testeur) .... mais ne ferme que les trades d'achat.... il ne ferme que les trades de vente après avoir terminé le test.... voici un morceau de code.... pouvez-vous m'aider...

 

//---------------------------------------------------------------------------------------------------------

void CloseSell() 

{

   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 

   {

      if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true) 

      {   

      if (OrderSymbol() == Symbol()) 

         {

            if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) 

               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Green);

         }

      }

   }

}

//+------------------------------------------------------------------+

void CloseBuy() 

{

   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 

   {

      if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true)

      {

         if (OrderSymbol() == Symbol()) 

         {

            if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) 

               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Green);

         }

      }

   }

}

//+------------------------------------------------------------------+

void OpenSellOrder()

{

   mlots = GetLots();

   

   if (AutoSL) sl = CalcSL(OP_SELL);

   else sl = ND(Bid - StopLoss*Point);

   

   tp = ND(Bid - TakeProfit*Point);

   

   ticket = OrderSendReliable(Symbol(), OP_SELL,  mlots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);

   if(ticket > 0)

      OrderModifyReliable(OrderTicket(), OrderOpenPrice(), sl, tp, 0);


}

//+------------------------------------------------------------------+

int OpenBuyOrder()

{

   mlots = GetLots();

   

   if (AutoSL) sl = CalcSL(OP_BUY);

   else sl = ND(Bid - StopLoss*Point);


   tp = ND(Ask + TakeProfit*Point);


   ticket = OrderSendReliable(Symbol(), OP_BUY,  mlots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);

   if(ticket > 0)

      OrderModifyReliable(OrderTicket(), OrderOpenPrice(), sl, tp, 0);

}

//+------------------------------------------------------------------+

void ModifyLoss()

{

   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 

   {

      if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES) == true)

      {

         if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;

         if (OrderType() == OP_BUY)

         {

            sl = ND(OrderOpenPrice() + LossPoints*Point);

            if (OrderStopLoss() < sl && (Ask - OrderOpenPrice())/Point >= LossLimit)

            {

               if (sl != ND(OrderStopLoss()))

                  OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);

            }

         } 

         else

         if (OrderType() == OP_SELL)

         {

            sl = ND(OrderOpenPrice() - LossPoints*Point);

            if (OrderStopLoss() > sl && (OrderOpenPrice()-Bid)/Point >= LossLimit)

            {

               if (sl != ND(OrderStopLoss()))

                  OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);

            }

         }

      }

   }

}

//+------------------------------------------------------------------+

double CalcSL(int otype)

{

   double sloss = 10000000;

   

   if (otype == OP_BUY)

   {

      double min;

      for (int i=1; i<=SLBars; i++) 

      {

         min = iLow(NULL, 0, i);

         if (min < sloss)

            sloss = min;

      }

      

      sloss = ND(sloss - SLPips*Point);

      if ((Ask-sloss)/Point < MinSL)

         sloss = ND(Ask - MinSL*Point);

             

      if ((Ask - sloss)/Point > MaxSL)

         sloss = ND(Ask - MaxSL*Point);

      else 

         sloss = ND(sloss - SLPips*Point);


      return(sloss);

   }

   else

   if (otype == OP_SELL)

   {

      double max;

      sloss = 0;

      

      for (i=1; i<=SLBars; i++) 

      {

         max = iHigh(NULL, 0, i);

         if (max > sloss)

            sloss = max;

      }

      

      if ((sloss - Bid)/Point < MinSL)

         sloss = ND(Bid + MinSL*Point);

          

      if ((sloss - Bid)/Point > MaxSL)

         sloss = ND(Bid + MaxSL*Point);

      else

         sloss = ND(sloss + SLPips*Point); 


      return(sloss);

   }

   return(0);

}

//+------------------------------------------------------------------+

double GetLots()

{

   if (!UseMM) return(FixLot);


   double clots;

   clots = AccountBalance()    / 10000.0 * LotsFor10000;

   clots = MathMax(clots, MarketInfo(Symbol(), MODE_MINLOT));

   clots = MathMin(clots, MarketInfo(Symbol(), MODE_MAXLOT));

   clots = NormalizeDouble(clots, 2);

   return (clots);

}

//+------------------------------------------------------------------+

int CountBuy() 

{

   int count = 0;

   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 

   {

      if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

      {

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)

             count++;

      }

   }

   return (count);

}

//+------------------------------------------------------------------+

int CountSell() 

{

   int count = 0;

   for (int trade = OrdersTotal() - 1; trade >= 0; trade--) 

   {

      if (OrderSelect(trade, SELECT_BY_POS, MODE_TRADES))

      {

         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)

             count++;

      }

   }

   return (count);

}

//+------------------------------------------------------------------+

int CountTrades()

{

   return(CountBuy() + CountSell()); 

}

//+------------------------------------------------------------------+

double ND(double value)

{

   return (NormalizeDouble(value, Digits)); 

 
Pouvez-vous me dire comment déterminer le nombre d'éléments d'un enum ?
 
CJIeCaPb:

Ordre de présélection OrderSelect (Ticket_first_order, SELECT_BY_TICKET) ;

si(OrderOpenPrice()+10*Point==Ask)

OrderSend(Symbol(),OP_BUY,Lot,Ask,10,Ask-SL*Point,Ask+TP*Point,NULL,Magic,0,Green) ;

Et comment déterminer le Ticket_first_order ?
 

Je pense que c'est une branche de travail... oups, désolé.

Bonne nuit à tous ! !! Bonne année !

J'ai décidé de sauvegarder les données de la mémoire tampon dans un fichier. Il n'y a pas de problème pour créer un fichier et y écrire, mais il est difficile de le lire.

Voici un programme d'essai. Aidez-moi, s'il vous plaît. Le problème est que soit il y a une écriture supplémentaire dans le fichier, soit il ne peut pas être lu du fichier. Je veux juste lire une liste d'un fichier dans, par exemple, des tableaux... Si je suis trop paresseux pour écrire s'il vous plaît lien vers du matériel similaire, mais j'ai trouvé seulement tutoriel ... MAIS MIEUX VAUT UNE VARIANTE PRÊTE SUR LE SITE))) :

MERCI D'AVANCE EN TOUT CAS ! !!))

//+------------------------------------------------------------------+
//|                                                   Proba file.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql4.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property  indicator_color1 Blue
#property  indicator_color2 Lime
#property  indicator_color3 Red
extern int ind=0;   //--- выберем случайно номер строки
extern string СдвигДаты  = "30.12.2014  00:00";
extern bool   ВыключательСдвигаДаты = false; 
extern bool   ЗаписьФайла = true;
//--- глобальные переменные
int    Tm,hr,shift,shiftbar,size,InpFileName;
double H_buff[];
double L_buff[];
double C_buff[];
ulong  pos[];
double LastHigh,LastLow;
double OPEN,HIGH,LOW,CLOSE;
datetime pr,pr_1;
string  T1,T2,T3,T4,file_buffer;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {  
//--- привязка массива к индикаторному буферу с номером индекса
   SetIndexBuffer(0,H_buff);
   SetIndexBuffer(1,L_buff);
   SetIndexBuffer(2,C_buff);
//--- установка значений индикатора, которые не будут видимы на графике
   SetIndexEmptyValue(0,EMPTY);
   SetIndexEmptyValue(1,EMPTY);
   SetIndexEmptyValue(2,EMPTY);
//---- устанавить новый тип, стиль, ширину и цвет для указанной линии индикатора
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexStyle(1,DRAW_LINE,0,1);
   SetIndexStyle(2,DRAW_LINE,1,1);
//---- устанавить формат точности (количество знаков после десятичной точки
   IndicatorDigits(Digits);
//---- Устанавливает порядковый номер бара от начала данных, с которого должна начинаться отрисовка указанной линии 
   SetIndexDrawBegin(0,2);
//---
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//----  Функия расчета ключевых точек 
if (ВыключательСдвигаДаты==true) 
    shiftbar  = iBarShift(Symbol(),PERIOD_D1, StrToTime(СдвигДаты), false); 
      else 
    shiftbar = 1; 
     hr=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_D1,shiftbar));   // бервый бар дня для прорисовки уровней
     if(hr>=8)   shift= hr-4;
    HIGH= iHigh(Symbol(),PERIOD_H1,shift);
    LOW=  iLow(Symbol(),PERIOD_H1,shift);
    CLOSE= iClose(Symbol(),PERIOD_H1,shift);
//----  Функция проверки баров утренней сессии
    
   int limit=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar));   // бервый бар дня для прорисовки уровней
   int end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar-1));

     if(Period()==PERIOD_H1 && hr>=8 && (TimeDayOfWeek(Time[0])<6 && TimeDayOfWeek(Time[0])>0))
      {
   for(int i=limit; i>=end; i--)
     {
     if (High[i+1]>LastHigh) LastHigh=High[i+1];
        if (Low[i+1]<LastLow) LastLow=Low[i+1];
         pr = TimeDay(Time[i]); 
      pr_1 = TimeDay(Time[i+1]);
     if (pr!=pr_1)
        {
         H_buff[i+1] = EMPTY;
         L_buff[i+1] = EMPTY;
         C_buff[i+1] = EMPTY;
        }
//----  Функция прорисовки уровней ZigZag на графике
         H_buff[i]=HIGH;
         L_buff[i]=LOW;
         C_buff[i]=CLOSE;
        }
       }
////////////////////////////////////////////////      ЭТО  БЫЛО   ВСТУПЛЕНИЕ   ДЛЯ   РАБОЧЕГО   ПОНИМАНИЯ    \\\\\\\\\\\\\\\\\\ 
   
//-----  Функция открытия и чтения значений из файла  
      ResetLastError();
//--- откроем файл
      if(ЗаписьФайла==true)
      InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_TXT);
   if(InpFileName!=INVALID_HANDLE)
     {
      GetStringPositions(InpFileName,pos);                    //--- получим позицию начала для каждой строки в файле
      size=ArraySize(pos);                                    //--- определим сколько всего строк в файле   
      if(!size)                                               //--- если в файле нет строк, то завершаем работу
     FileClose(InpFileName);

      if(FileSeek(InpFileName,pos[ind],SEEK_SET)==true)       //--- сдвинем позицию на начало этой строки
        {
      Print("Текст строки с номером    ",ind,"   ",FileReadString(InpFileName),"  size  ",size);  //--- прочитаем и распечатаем строку с номером ind
      file_buffer=FileReadString(InpFileName);    // чтение строки из файла
      T1=StringSubstr(file_buffer,0,2+Digits);    // Извлекаем первые 7 символов
      T2=StringSubstr(file_buffer,7,2+Digits);    // Извлекаем вторые 7 символов
      T3=StringSubstr(file_buffer,14,2+Digits);   // Извлекаем третьи 7 символов
      T4=StringSubstr(file_buffer,21);            // Извлекаем остаток символов
        }
      FileClose(InpFileName);
     }
   
      if(ЗаписьФайла==true) {
       Comment("ЗАПИСЬ  В ФАЙЛ: IND ",ind,"  SIZE  ",size,"  T1:  ",StrToDouble(T1)," ||| T2:  ",StrToDouble(T2)," ||| T3:   ",StrToDouble(T3),"  |||  shift  ",StrToInteger(T4));   
        
        if(StrToDouble(T1)!=HIGH && StrToDouble(T2)!=LOW && StrToDouble(T3)!=CLOSE && StrToInteger(T4)!=shift)
        WRITEfile(); } else Comment("ЗАПИСЬ  ВЫКЛЮЧЕНА !");

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Функция определяет позиции начала для каждой из строк в файле и  |
//| помещает их в массив arr                                         |
//+------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {
  
   int i,def_size=127;           //--- размер массива по умолчанию
   ArrayResize(arr,def_size);    //--- выделим память для массива
   if(!FileIsEnding(handle))     //--- если не конец файла, то есть хотя бы одна строка
     {
      arr[i]=FileTell(handle);
      i++;                       //--- счетчик строк
     }
   else
      return;                       // файл пуст, выходим
//--- определим сдвиг в байтах в зависимости от кодировки
   
   if(FileGetInteger(handle,FILE_IS_TEXT))
   while(!FileIsEnding(handle))  //--- в цикле перебираем строки до конца файла
     {
      FileReadString(handle);    //--- читаем строку
      if(!FileIsEnding(handle))  //--- проверка на конец файла
        {
         arr[i]=FileTell(handle)+1;   //--- запомним позицию следующей строки
         i++;
         if(i==def_size)         //--- увеличим размер массива, если он переполнен
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break;               // конец файла, выходим
     }
   ArrayResize(arr,i);     //--- установим истинный размер массива
  } 
//+------------------------------------------------------------------+
void WRITEfile()   // запись в файл и его создание если его нет
  { 
//--- сбросим код ошибки
   ResetLastError();
//--- правильный способ работы в "файловой песочнице"
   InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_WRITE|FILE_TXT);   // Имя файла
   if(InpFileName!=INVALID_HANDLE)
     {
   FileSeek(InpFileName,0,SEEK_END);
   FileWrite(InpFileName,DoubleToStr(HIGH,Digits),DoubleToStr(LOW,Digits),DoubleToStr(CLOSE,Digits),IntegerToString(shift,0));
    FileFlush(InpFileName);  
     }
   FileClose(InpFileName);           
  return;
  }
//+------------------------------------------------------------------+
 

Hélas, ce n'est pas si facile avec l'ENREGISTREMENT dans le fichier!!!((((

Et il semblait... au contraire.

La lecture est réglée grâce aux exemples du tutoriel, mais l'ENREGISTREMENT dans un fichier nécessite un code plus complexe. En bref, je me suis déjà fait avoir... Je n'arrive pas à trouver comment déplacer l'enregistrement en synchronisation avec le fichier Read from.

J'ai corrigé le réglage des niveaux pour les barres de jour et pour l'historique (données initiales tamponnées).

LA QUESTION EST LA MÊME. S'IL VOUS PLAÎT, DONNEZ-MOI UN INDICE, SI C'EST TROP D'ÉCRITURE, SUR LA FAÇON D'ÉCRIRE LES DONNÉES DE LA MÉMOIRE TAMPON DANS UN FICHIER.

CODE MODIFIÉ DU PROGRAMME

//+------------------------------------------------------------------+
//|                                                   Proba file.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 3
#property  indicator_color1 Blue
#property  indicator_color2 Lime
#property  indicator_color3 Red
extern int ind=0;   //--- выберем случайно номер строки
extern string СдвигДаты  = "06.01.2015  00:00";
extern bool   ВыключательСдвигаДаты = false; 
extern bool   ЗаписьФайла = true;
//--- глобальные переменные
int    Tm,hr,shift,shiftbar,size,sizew,InpFileName,limit,end;
double H_buff[];
double L_buff[];
double C_buff[];
ulong  pos[],arrw[];
double LastHigh,LastLow;
double OPEN,HIGH,LOW,CLOSE;
datetime pr,pr_1;
string  T1,T2,T3,T4,file_buffer;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {  
//--- привязка массива к индикаторному буферу с номером индекса
   SetIndexBuffer(0,H_buff);
   SetIndexBuffer(1,L_buff);
   SetIndexBuffer(2,C_buff);
//--- установка значений индикатора, которые не будут видимы на графике
   SetIndexEmptyValue(0,EMPTY);
   SetIndexEmptyValue(1,EMPTY);
   SetIndexEmptyValue(2,EMPTY);
//---- устанавить новый тип, стиль, ширину и цвет для указанной линии индикатора
   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexStyle(1,DRAW_LINE,0,1);
   SetIndexStyle(2,DRAW_LINE,1,1);
//---- устанавить формат точности (количество знаков после десятичной точки
   IndicatorDigits(Digits);
//---- Устанавливает порядковый номер бара от начала данных, с которого должна начинаться отрисовка указанной линии 
   SetIndexDrawBegin(0,2);
//---
    return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//----  Функия расчета ключевых точек 
if (ВыключательСдвигаДаты==true) 
    shiftbar  = iBarShift(Symbol(),PERIOD_D1, StrToTime(СдвигДаты), false); 
      else 
    shiftbar = 0; 
     hr=iBarShift(Symbol(),PERIOD_H1,iTime(Symbol(),PERIOD_D1,shiftbar));   // бервый бар дня для прорисовки уровней
     if(hr>=9)   shift= hr-8;
    HIGH= iHigh(Symbol(),PERIOD_H1,shift);
    LOW=  iLow(Symbol(),PERIOD_H1,shift);
    CLOSE= iClose(Symbol(),PERIOD_H1,shift);
//----  Функция проверки баров утренней сессии
    
    if(ВыключательСдвигаДаты==true) 
     {
       limit=shift;
       end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar))-23;
       }
        else 
       {
       limit=shift;
       end=iBarShift(Symbol(),0,iTime(Symbol(),PERIOD_D1,shiftbar))-hr;
        }
     if(Period()==PERIOD_H1 && hr>=8 && (TimeDayOfWeek(Time[0])<6 && TimeDayOfWeek(Time[0])>0))
      {
   for(int u=limit; u>=end; u--)
     {
     if (High[u+1]>LastHigh) LastHigh=High[u+1];
        if (Low[u+1]<LastLow) LastLow=Low[u+1];
         pr = TimeDay(Time[u]); 
      pr_1 = TimeDay(Time[u+1]);
     if (pr!=pr_1)
        {
         H_buff[u+1] = EMPTY;
         L_buff[u+1] = EMPTY;
         C_buff[u+1] = EMPTY;
        }
//----  Функция прорисовки уровней  на графике
         H_buff[u]=HIGH;
         L_buff[u]=LOW;
         C_buff[u]=CLOSE;
        }
       }
/////////////////////////////////////////////////////////////////////////  
   
//-----  Функция открытия и чтения значений из файла  
      ResetLastError();
//--- откроем файл
      if(ЗаписьФайла==true)
      InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_READ|FILE_TXT);
   if(InpFileName!=INVALID_HANDLE)
     {
      GetStringPositions(InpFileName,pos);                    //--- получим позицию начала для каждой строки в файле
      size=ArraySize(pos);                                    //--- определим сколько всего строк в файле   
      if(!size)                                               //--- если в файле нет строк, то завершаем работу
     FileClose(InpFileName);

      if(FileSeek(InpFileName,pos[ind],SEEK_SET)==true)       //--- сдвинем позицию на начало этой строки
        {
      Print("Текст строки с номером ",ind,"  ",FileReadString(InpFileName)," size  ",size);  //--- прочитаем и распечатаем строку с номером ind
      file_buffer=FileReadString(InpFileName);    // чтение строки из файла
      T1=StringSubstr(file_buffer,0,2+Digits);    // Извлекаем первые 7 символов
      T2=StringSubstr(file_buffer,7,2+Digits);    // Извлекаем вторые 7 символов
      T3=StringSubstr(file_buffer,14,2+Digits);   // Извлекаем третьи 7 символов
      T4=StringSubstr(file_buffer,21);            // Извлекаем остаток символов
        }
      FileClose(InpFileName);
     }
         if(ЗаписьФайла==true) {
        Comment("ЗАПИСЬ  В ФАЙЛ: IND ",ind,"  SIZE  ",size,"  T1:  ",StrToDouble(T1)," ||| T2:  ",StrToDouble(T2)," ||| T3:   ",StrToDouble(T3),"  |||  shift  ",StrToInteger(T4));   
          
   if(StrToDouble(T1)!=HIGH && StrToDouble(T2)!=LOW && StrToDouble(T3)!=CLOSE && StrToInteger(T4)!=shift)  
      WRITEfile(); } else 
     Comment("ЗАПИСЬ  ВЫКЛЮЧЕНА !");

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Функция определяет позиции начала для каждой из строк в файле и  |
//| помещает их в массив arr                                         |
//+------------------------------------------------------------------+
void GetStringPositions(const int handle,ulong &arr[])
  {  
   int j,def_size=127;           //--- размер массива по умолчанию
   ArrayResize(arr,def_size);    //--- выделим память для массива
   if(!FileIsEnding(handle))     //--- если не конец файла, то есть хотя бы одна строка
     {
      arr[j]=FileTell(handle);
      j+=1;                       //--- счетчик строк
     }
   else
      return;                       // файл пуст, выходим
//--- определим сдвиг в байтах в зависимости от кодировки
   
   //if(FileGetInteger(handle,FILE_IS_TEXT))
   while(!FileIsEnding(handle))  //--- в цикле перебираем строки до конца файла
     {
      FileReadString(handle);    //--- читаем строку
      if(!FileIsEnding(handle))  //--- проверка на конец файла
        {
         arr[j]=FileTell(handle)+1;   //--- запомним позицию следующей строки
         j+=1;
         if(j==def_size)         //--- увеличим размер массива, если он переполнен
           {
            def_size+=def_size+1;
            ArrayResize(arr,def_size);
           }
        }
      else
         break;               // конец файла, выходим
     }
   ArrayResize(arr,j);     //--- установим истинный размер массива
  } 
//+------------------------------------------------------------------+
void WRITEfile()   // запись в файл и его создание если его нет
  { 
  InpFileName=FileOpen(Symbol()+" Z Point.txt",FILE_WRITE|FILE_TXT);
   if(InpFileName!=INVALID_HANDLE)
     {   
     FileWrite(InpFileName,"Начало файловой записи.Проба");
  while(!FileIsEnding(InpFileName))  //--- в цикле перебираем строки до конца файла
     FileReadString(InpFileName);    //--- читаем строку
     FileSeek(InpFileName,0,SEEK_END);   // конец файла, пишем
   FileWrite(InpFileName,DoubleToStr(HIGH,Digits),DoubleToStr(LOW,Digits),DoubleToStr(CLOSE,Digits),IntegerToString(shift,0));
    FileFlush(InpFileName);      
        } 
    FileClose(InpFileName); 
   }   
//+------------------------------------------------------------------+
 

TROUVÉ OÙ CHERCHER LES RÉPONSES À MES QUESTIONS... SUR LES OPÉRATIONS SUR LES FICHIERS))) :

DES SCRIPTS POUR LA SORTIE D'INFORMATIONS D'UN FICHIER VERS UN GRAPHIQUE.

HISTOIRE DES CODES MT4 GRATUITS IL EXISTE DES OPTIONS POUR TRANSFÉRER DES DONNÉES VERS UN FICHIER, AINSI QUE L'OPÉRATION INVERSE.

MERCI À TOUS, TOUT LE MONDE CIAO)))) :

 

Il y a un grand fichier avec des dates sous cette forme "20141231". Pour convertir la chaîne au formatdate, vous avez besoin des points"YYYY.MM.DD" entre l'année, le mois et le chiffre.

Comment cela peut-il être fait ?

 
Bonjour à tous, je veux que le conseiller expert trouve le plus haut ou le plus bas en 100 barres, comment faire ?
 
zhezheria:
Bonjour à tous, je veux que l'Expert Advisor trouve le plus haut ou le plus bas pour 100 barres, comment faire ?

Vous pouvez lire l'aide, tout y est, avec des exemples.

High[iHighest(NULL,0,MODE_HIGH,100,0]

Low[iLowest(NULL,0,MODE_LOW,100,0]