Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 816

 

Ho appena sperimentato con "l'archivio delle quotazioni". aggiornando ogni grafico separatamente, la storia per quasi tutti i grafici ha iniziato a funzionare correttamente, tranne che per alcune coppie esotiche, le ho cancellate e aggiornate un paio di volte - nessun nuovo dato per il grafico. in generale, possiamo dire che il problema è stato risolto


grazie per l'efficienza))))

 

Cari programmatori....Ho un problema... Hocreato un EA.... che apre le operazioni normalmente (nel tester) .... ma chiude solo le operazioni di acquisto.... chiude solo le operazioni di vendita dopo aver completato il test... ecco un pezzo di codice.... potete aiutarmi...

 

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

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)); 

 
Puoi dirmi come determinare quanti elementi ci sono in un enum?
 
CJIeCaPb:

Ordine preselezionato OrderSelect (Ticket_first_order, SELECT_BY_TICKET);

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

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

E come determinare il Ticket_first_order?
 

Credo che sia un ramo funzionante... oops, scusate.

Buonanotte a tutti!!! Buon anno!

Ha deciso di salvare i dati del buffer attraverso un file. Nessun problema a creare un file e a scriverci, ma è difficile leggere da esso.

Ecco un programma di prova. Per favore, aiutatemi. Il problema è che o c'è una scrittura extra nel file, o non può essere letto dal file. Voglio solo leggere una lista da un file in, per esempio, array... Se sono troppo pigro per scrivere per favore linkate materiale simile, ma ho trovato solo tutorial... MA MEGLIO UNA VARIANTE PRONTA SUL SITO))):

GRAZIE IN ANTICIPO COMUNQUE!!!))

//+------------------------------------------------------------------+
//|                                                   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;
  }
//+------------------------------------------------------------------+
 

Ahimè, non è così facile con la REGISTRAZIONE nel file!!!(((

E sembrava ... al contrario.

La lettura è risolta grazie agli esempi del tutorial, ma la REGISTRAZIONE in un file richiede un codice più complesso. In breve, sono già fregato... Non riesco a capire come spostare il record in sincronia con il Read from file.

Ho corretto l'impostazione dei livelli per le barre giornaliere e per la storia (dati iniziali tamponati).

LA DOMANDA È LA STESSA. PER FAVORE DATEMI UN SUGGERIMENTO, SE È TROPPO SCRIVERE, SU COME SCRIVERE I DATI DEL BUFFER IN UN FILE.

CODICE MODIFICATO DEL PROGRAMMA

//+------------------------------------------------------------------+
//|                                                   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); 
   }   
//+------------------------------------------------------------------+
 

TROVATO DOVE CERCARE LE RISPOSTE ALLE MIE DOMANDE...SULLE OPERAZIONI SUI FILE)):

SCRIPT PER L'OUTPUT DI INFORMAZIONI DA UN FILE A UN GRAFICO.

STORIA DEI CODICI MT4 GRATUITI CI SONO OPZIONI PER IL TRASFERIMENTO DI DATI IN UN FILE, COSÌ COME L'OPERAZIONE INVERSA.

GRAZIE A TUTTI, CIAO)))):

 

C'è un grande file con date in questa forma "20141231". Per convertire la stringa in formatodatetime hai bisogno dei punti"YYYY.MM.DD" tra l'anno, il mese e il numero.

Come si può fare?

 
Ciao a tutti, voglio che l'Expert Advisor trovi il massimo più alto o il minimo più basso in 100 barre, consigliare dove leggere?
 
zhezheria:
Ciao a tutti, voglio che l'EA trovi il massimo più alto o il minimo più basso in 100 barre, consigliare dove leggere?

Potete leggere l'aiuto, è tutto lì, con esempi.

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

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