Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 816

 

какраз эксперементировал с "архивом котировок"  . обновляя для каждого графика отдельно историю добился что почти для всех графиков все начало работать корректно, за исключением нескольких экзотических пар, на них по паре раз удалял обновлял - нет новых данных для графика. в общем можно сказать вопрос решен


спасибо за оперативность))))

 

Уважаемые программисты...возникла проблема...создал советник...он открывает сделки нормально(в тестере)....но вот закрывает только сделки на покупку...на продажу он закрывает только по заверении тестирования... вот кусок кода....может вы мне поможете... 

 

 

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

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

 
подскажите пожалуйста как определить сколько элементов находится в перечислении (enum)?
 
CJIeCaPb:

Предварительно выбрав ордер OrderSelect (Тикет_первого_ордера, SELECT_BY_TICKET);

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

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

А как определить Тикет_первого_ордера?
 

ПО-МОЕМУ РАБОЧАЯ ВЕТКА...упсс сори

 

 Доброй всем ночи!!! С новым годом! 

 

Решил сохранить данные буферов через файл. Создать файл и записать в него проблем особых нет, а вот прочитать из него сложности.

Вот пробная программка. Помогите пож. Проблема в том, что либо идет лишняя запись в файл, либо она не читается из файла. Хочу просто читать по списку из файла в , например, массивы... ЕСли лень писать прошу ссылку на похожий материал, а нашел только учебник... НО ЛУЧШЕ ГОТОВЫЙ ВАРИАНТ НА САЙТЕ))):

 ЗАРАНЕЕ СПАСИБО В ЛЮБОМ СЛУЧАЕ!!!))):

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

Увы, с ЗАПИСЬЮ в файле не все так просто!!!(((

А казалось ...наоборот.

С чтением благодаря учебным примерам разобрался,а вот ЗАПИСЬ в файл требует более сложного кода. Короче придурел уже... А как двигать запись согласуя с Чтением из файла не соображу.

Исправил установку уровней для баров дня и для истории (исходные буферные данные).

 

ВОПРОС ТОТ ЖЕ. ПРОШУ НАМЕКНУТЬ, ЕСЛИ МНОГО ПИСАНИНЫ, НА ТО КАК ЛУЧШЕ ЗАПИСЫВАТЬ ДАННЫЕ БУФЕРОВ В ФАЙЛ.

СИПРАВЛЕННЫЙ КОД ПРОГИ

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

САМ НАШЕЛ ГДЕ ИСКАТЬ ОТВЕТЫ НА МОИ ВОПРОСЫ...О ФАЙЛОВЫХ ОПЕРАЦИЯХ))): 

СКРИПТЫ ПО ВЫВОДУ ИНФОРМАЦИИ ИЗ ФАЙЛА НА ГРАФИК. 

ИСТОРИИ БЕСПЛАТНЫХ КОДОВ МТ4 ЕСТЬ ВАРИАНТЫ ПЕРЕНОСА ДАННЫХ В ФАЙЛ, ТАК И ОБРАТНАЯ ОПЕРАЦИЯ.

ВСЕМ СПАСИБО, ВСЕМ ЧАО)))): 

 

Есть большой файл в котором даты в таком виде "20141231". Чтобы преобразовать строку в формат datetime нужны точки "YYYY.MM.DD"  между годом, месяцем и числом.

Как можно это сделать? 

 
Всем привет, хочу что бы советник находил самый высокий хай или низкий лоу за 100 баров, подскажите где, что прочитать?
 
zhezheria:
Всем привет, хочу что бы советник находил самый высокий хай или низкий лоу за 100 баров, подскажите где, что прочитать?

Читать можно справку, там всё есть, с примерами.

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

Low[iLowest(NULL,0,MODE_LOW,100,0]
Причина обращения: