Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 816

 

kakraz "alıntıların arşivi" ile deneyler yaptı. her grafiğin geçmişini ayrı ayrı güncelleyerek, birkaç egzotik çift dışında hemen hemen tüm grafikler için her şeyin doğru çalışmaya başladığını, birkaç kez silip güncellediğimi başardım - grafik için yeni veri yok. genel olarak sorun çözüldü diyebiliriz


Verimlilik için teşekkürler))))

 

Sevgili programcılar...bir sorun vardı... bir EA oluşturdu ...işlemleri normal olarak açar (test cihazında)....ama yalnızca alım işlemlerini kapatır...yalnızca test onaylandıktan sonra satış işlemlerini kapatır. ..işte bir parça kodu... bana yardım edebilir misin...

 

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

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

 
Lütfen numaralandırmada (enum) kaç öğe olduğunu nasıl belirleyeceğimi söyle?
 
CJIeCaPb :

Önceden Order OrderSelect'i seçtikten sonra (birinci siparişin Bilet_si, SELECT_BY_TICKET);

if(OrderOpenPrice()+10*Puan==Sor)

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

Ve Ticket_of_the_first_order nasıl belirlenir?
 

İŞ ŞUBEMDE ... pardon

Herkese iyi geceler!!! Yeni Yılın Kutlu Olsun!

Tampon verilerini bir dosya aracılığıyla kaydetmeye karar verdim. Bir dosya oluşturmak ve ona yazmak için özel bir sorun yoktur, ancak ondan okumak zordur.

İşte bir test programı. Yardım lütfen. Sorun, dosyaya fazladan yazma işlemi olması veya dosyadan okunmamasıdır. Ben sadece listeyi bir dosyadan örneğin dizilere okumak istiyorum ... Yazmak için çok tembelsem, benzer materyallere bir bağlantı istiyorum, ancak sadece bir ders kitabı buldum ... AMA HAZIR SEÇENEK SİTEDE DAHA İYİ))):

HERHANGİ BİR DURUMDA ŞİMDİDEN TEŞEKKÜRLER!!!))):

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

Ne yazık ki, bir dosyada bir RECORD ile her şey o kadar basit değil !!! (((

Ama görünüşe göre ... tam tersi.

Eğitim örnekleri sayesinde okumayı anladım ama bir dosyaya YAZMAK daha karmaşık kodlar gerektiriyor. Daha kısaca zaten kandırıldım... Ve bir dosyadan Okuma ile koordineli olarak kaydı nasıl taşıyacağımı düşünmem.

Gün çubukları ve geçmiş için sabit ayar seviyeleri (ilk tampon verileri).

SORU AYNI. LÜTFEN ÇOK YAZILIYORSA, TAMPON VERİLERİNİN BİR DOSYAYA YAZILMASININ NASIL DAHA İYİ OLDUĞUNU ANLATIN.

DÜZELTİLMİŞ PROGRAM KODU

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

DOSYA İŞLEMLERİ HAKKINDA SORULARIMA CEVAPLAR İÇİN NEREDE Arayacağınızı Buldu...))):

DOSYADAN grafiğe BİLGİ GÖRÜNTÜLEMEK İÇİN Scriptler.

ÜCRETSİZ MT4 KODLARININ GEÇMİŞİ VERİLERİ BİR DOSYAYA AKTARMA SEÇENEKLERİ VE TERSİNE İŞLEM MEVCUTTUR.

HEPİNİZE TEŞEKKÜRLER, TÜM CHAO))):

 

Tarihlerin "20141231" biçiminde olduğu büyük bir dosya var. Bir dizeyi tarih saat biçimine dönüştürmek için yıl, ay ve tarih arasında "YYYY.AA.GG" noktalarına ihtiyacınız vardır.

Bu nasıl yapılabilir?

 
Herkese merhaba, danışmanın 100 bar için en yüksek veya en düşük en düşük değerini bulmasını istiyorum, bana nerede, ne okuyacağımı söyleyin?
 
zhezheria :
Herkese merhaba, danışmanın 100 bar için en yüksek veya en düşük en düşük değerini bulmasını istiyorum, bana nerede, ne okuyacağımı söyle?

Yardımı okuyabilirsiniz, her şey orada, örneklerle.

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

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