Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 386

 
Roman Shiredchenko :

Bir bak, plz, dört - içinden çıkamayacaksın gibi görünüyor ...

Dizilerle çalışıyorum - diziye bir kene geliş zamanını yazmam gerekiyor - örneğin - bir teklif yazıyorum. Her tikte. Her şeyi Artyom Trishkin'in minnettar olduğu biletlere göre yapıyorum. Her şey yolunda gitmiyor. Dövüştüğüm ikinci gün ... Baskılar

sıfırlar.

https://www.mql5.com/ru/forum/145455/page913#1017464

Sayesinde.

İnit'te SIZE değişkeninin 0 değerine sahip olduğunu görüyorum ve o zaman dizinin boyutu nedir? Ayrıca, yine, SIZE başlangıcı da 0 ... Günlükte neler var?
 
Artyom Trishkin :
İnit'te SIZE değişkeninin 0 değerine sahip olduğunu görüyorum ve o zaman dizinin boyutu nedir? Ayrıca, yine, SIZE başlangıcı da 0 ... Günlükte neler var?
sıfırlar... anladım...
 

Ve böylece, sıfırlar ... Hiçbir şey anlayamıyorum ...

 //---------------------
extern int MaxDrawTicks= 100 ;
extern int Num_Aver_of_Ticks= 5 ;  
double      xBuffer_Time [ 1000000 ]; // Массив значений  
                         // В котором индекс - номер тика, значение - это бид 
int SIZE= 0 ;               // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   // if(ArrayResize(xBuffer_Time,SIZE)<0) {Print(" Ошибка в изменении размера массива времени поступления тиков "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
   // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   // int S=ArraySize(xBuffer_Time);
   // if (S>=0) Print("Размер массива: ",S);
   // else Print("Ошибка. Массив не создан ",S);        
   // ArrayInitialize(xBuffer_Time, 0);
   return ( 0 );
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
  // ArrayResize (xBuffer_Time,SIZE);
   xBuffer_Time[SIZE] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
   SIZE ++;
   Print ( " Значение xBuffer_Time[SIZE] = " , DoubleToStr(xBuffer_Time[SIZE], Digits ) );
   Print ( " Значение SIZE = " , DoubleToStr(SIZE, 2 ) );  
 //---------------------------------------      
//------------
   return ( 0 );
  }
 
Roman Shiredchenko :

Ve böylece, sıfırlar ... Hiçbir şey anlayamıyorum ...

Bu yüzden, SIZE'ın sıfır olmaması için önce artırılması ve ancak o zaman dizinin boyutunu değiştirmesi gerektiğini ima ettim.
 
Artyom Trishkin :
Bu yüzden, SIZE'ın sıfır olmaması için önce arttırılması ve ancak o zaman dizinin boyutunu değiştirmesi gerektiğini ima ettim.

:-)

TEŞEKKÜR.

Çalışır - kimin ihtiyacı var - kullanın.

 //---------------------
extern int MaxDrawTicks= 100 ;
extern int Num_Aver_of_Ticks= 5 ;  
double      xBuffer_Time []; // Массив значений   динамический
                             // В котором индекс - номер тика, значение - это бид 
int SIZE= 0 ;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   if ( ArrayResize (xBuffer_Time, 2000000 )< 0 ) { Alert ( " Ошибка в изменении размера массива времени поступления тиков " ); return ( false );}
//--- установим индексацию для буфера как в таймсерии для динамического массива
   // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   int S= ArraySize (xBuffer_Time);
   if (S>= 0 ) Alert ( "Размер массива: " ,S);
   else Print ( "Ошибка. Массив не создан " ,S);        
   ArrayInitialize (xBuffer_Time, 0 );
   return ( 0 );
  }  
//+------------------------------------------------------------------+
int start()
  {  
   //ArrayResize(ValueArr,size);
   //ValueArr[size-1] = GetValue();
   //size++; 
 //----------------------------------------  
   ArrayResize (xBuffer_Time,SIZE);
   xBuffer_Time[SIZE- 1 ] = Bid; //NormalizeDouble((iTime (_Symbol,1,0)-_start), 2); 
  
   if ( SIZE >= 0 && ArraySize (xBuffer_Time) < 2147483647 )
      {
       Alert ( " Значение xBuffer_Time[SIZE-1] = " , DoubleToStr(xBuffer_Time[SIZE- 1 ], Digits ) );
       Alert ( " Значение SIZE = " , DoubleToStr(SIZE, 2 ) );  
      } 
    SIZE ++;   
 //---------------------------------------      
//------------
   return ( 0 );
  }
 
Roman Shiredchenko :

:-)

TEŞEKKÜR.

Çalışır - kimin ihtiyacı var - onu kullanın.

Bir şey anlamıyorum - SIZE sıfıra eşittir, ancak neden önce dizinin boyutunu değiştirip, ancak daha sonra SIZE'ı artıralım? Biraz karışıklık...

Bir şekilde, kenelerin yoğunluğunu ve aralığını belirleyen bir kene Uzman Danışmanı için dizileri kenelerle doldurdum. Örnekler için parçaları kesin:

 //+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   //--- Запись ID графика
   gv_chart_id_name=Prefix+ "_chart_id" ;                         // имя GV терминала
   long    chart_id=get.GetChartID(symbol);                     // id текущего графика
   double chart_id_double=ToDouble(chart_id);                   // id в представлении double
   if (chart_id>= 0 ) {                                           // chart_id==0 в тестере
       if (! GlobalVariableCheck (gv_chart_id_name))               // Если GV-переменная удалена
         GlobalVariableSet (gv_chart_id_name,chart_id_double);   // создадим опять
      }
   else graph.Message( "Чё-та нету chart_id : Symbol()=" +symbol+ ", chart_id=" + IntegerToString (chart_id));
   
   //--- работа с тиками текущего графика
   if ( SymbolInfoTick (symbol,struct_tick)) {
       double tick_bid=struct_tick.bid;
       datetime tick_time=struct_tick.time;
      WorkOnTick(symbol,tick_bid,tick_time,slowPeriod);
      }
//---
  }
//+------------------------------------------------------------------+

Aşağıdaki fonksiyon, sembol değişkeninde saklanan istenen sembolle çalışmayı organize eder, başka bir sembolle çalışmanız gerekiyorsa, oraya yazın. FillArrays() işlevi yalnızca dizileri doldurur.

 //+------------------------------------------------------------------+
void WorkOnTick( string sy, double symbol_bid, datetime symbol_time, int limit) {
   long chart_id=get.GetChartID(sy);                       
   int index_symbol=get.PositionsSymbolInList(sy);       // позиция символа в списке
   double pt= SymbolInfoDouble (sy, SYMBOL_POINT );
   double pa= SymbolInfoDouble (sy, SYMBOL_ASK );
   double pb= SymbolInfoDouble (sy, SYMBOL_BID );
   int stoplevel=( int )MarketInfo(sy,MODE_STOPLEVEL);
   int dg=( int ) SymbolInfoInteger (sy, SYMBOL_DIGITS );
   //--- заполним массивы
   FillArrays(sy,symbol_bid,symbol_time,table_price,table_time);
   //--- расчёт среднего изменения цен тиков
   double avg_change_price=AverageChangePrice(index_symbol,limit,slowPeriod,table_price);
   //--- вывод информации на график
   wtf(index_symbol,avg_change_price,slowPeriod,table_price,table_time);
   return ;   
   
   Trailing(sy, 50 , 3 , magic);
}
//+------------------------------------------------------------------+

Dizileri bunun gibi kenelerle doldurmam gerekiyordu:

 //+------------------------------------------------------------------+
void FillArrays( string sy, double price, datetime time, double &mass_price[][], datetime &mass_time[][]) {
   //--- сместим данные в массивах влево
   int index_symbol=get.PositionsSymbolInList(sy);       // позиция символа в списке
   for ( int i= 99 ; i> 0 ; i--) {                             // сместим данные в массивах влево
      mass_price[index_symbol][i]=mass_price[index_symbol][i- 1 ];
      mass_time[index_symbol][i]=mass_time[index_symbol][i- 1 ];
      }
   //--- запишем товый тик в массивы
   mass_price[index_symbol][ 0 ]=price;
   mass_time[index_symbol][ 0 ]=time;
}
//+------------------------------------------------------------------+
 
Artyom Trishkin :

Bir şey anlamıyorum - SIZE sıfıra eşittir, ancak neden önce dizinin boyutunu değiştirip, ancak daha sonra SIZE artıralım? Biraz karışıklık...

Bir şekilde, kenelerin yoğunluğunu ve aralığını belirleyen bir kene Uzman Danışmanı için dizileri kenelerle doldurdum. Örnekler için parçaları kesin:

Aşağıdaki fonksiyon, sembol değişkeninde saklanan istenen sembolle çalışmayı organize eder, başka bir sembolle çalışmanız gerekiyorsa, oraya yazın. FillArrays() işlevi yalnızca dizileri doldurur.

Dizileri bunun gibi kenelerle doldurmam gerekiyordu:

n - kene başına ortalama 1 tik/1 saniye hıza ihtiyacım var. Onlar. n-tikler k-saniye cinsinden gelir, k/n tikler saniyede gelir. Bu hız gelen her tikte ölçülmelidir. Sonraki her onay işaretiyle değişecektir.

 

Söyle bana, saati MT4'te bir yerde görebilir miyim? tercihen ikinci el ile.

Ya da belki böyle bir danışman var mı? saati terminalin alt satırına yazdır