Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 395

 
Максим Вдовицкий:
Non vedo la finestra dello script sullo script AVERAGE RANGE sul grafico
Il registro di solito dice tutto in ordine, quando sono stato chiamato, cosa ho fatto, per cosa sono stato licenziato...
 
grazie tutto risolto!!!
 
Ho un nuovo prezzo, un nuovo prezzo, e così si può punzecchiare per 3min... e poi non è necessario.., e poi non è necessario!!!
 
Максим Вдовицкий:
Ho un nuovo prezzo, un nuovo prezzo, e così si può punzecchiare per 3min... e poi non è necessario.., e poi non è necessario!!!
E con uno script succederà la stessa cosa, se riquotano i trade manuali, riquoteranno ancora meglio quelli automatici.
 
Максим Вдовицкий:
Ho un nuovo prezzo, un nuovo prezzo, e così si può punzecchiare per 3min... e poi non è necessario.. e poi non è necessario!!!
Quale broker?
 
Evgeny Belyaev:
Quale broker?
Grande s...Non riesco a trovare un pannello per il binario, solo quelli a pagamento. Non riesco a trovare un pannello per il binario, solo quelli a pagamento, sarò grato a chi aiuterà un principiante.
 

Saluti a tutti, domanda sul calcolo del MA per array di offerte.

Puoi dirmi perché non calcola.

macurrent0 = 0 постоянно
macurrent1, macurrent2, macurrent3 имеют одинаковое не правильное не меняющееся значение

Cioè sono sempre zero nel commento.

La funzione

non restituisce il valore dell'indicatore tecnico Moving Average calcolato utilizzando i dati memorizzati nell'array.

doppioiMAOnArray(

...
extern int Ma_period=15;
double     xBuffer_Bid  []; // Массив значений   динамический, в котором индекс - номер тика, значение - это бид 
                            

int SIZE=0;                 // Вспомогательная переменная для массива                                  
int tickCounter, tickCounter_Current; 
double MaxSpeed;      // максимальная средняя скорость тиков с запуска системы

//+------------------------------------------------------------------+
int init()
  {   
//--- устанавливаем размер динамического массива
   
   if(ArrayResize(xBuffer_Bid, 2000000)<0) {Print(" Ошибка в изменении размера массива "); return(false);}
//--- установим индексацию для буфера как в таймсерии для динамического массива
  // ArraySetAsSeries(xBuffer_Time,true);    
//---   Возвращает количество элементов указанного массива. 
   
   int S_Bid=ArraySize(xBuffer_Bid);   
   if (S_Bid>=0) Print("Размер массива S_Бид: ",S_Bid);
   else Print("Ошибка. Массив S_Time не создан ",S_Bid);        
   ArrayInitialize(xBuffer_Bid, 0);
   
      
   return(0);
  }  
//+------------------------------------------------------------------+
int start()
  {  
  double avgBid = 0;    // средняя цена Бид
  int k=0;              // вспомогательная переменная для цикла
  double Summ_Time = 0; // время поступления крайней котировки для расчёта 
  double avgTime;       // среднее время поступление тиков 
  double avgSpeed;      // средняя скорость их поступления
  

  
  
  ArrayResize(xBuffer_Bid,SIZE);                                         // увеличение размера массивов на 1
   
   if (SIZE>0) 
      {
       xBuffer_Bid[SIZE-1] = NormalizeDouble(MarketInfo(_Symbol, MODE_BID ), Digits);                     // заполнение массива Bid  
       if (ArraySize(xBuffer_Bid) < 2147483647) //  
           Print (" Текущее значение xBuffer_Bid [SIZE-1] = ", DoubleToStr(xBuffer_Bid[SIZE-1],Digits) );            
      } 
   Print (" Текущее значение SIZE = ", DoubleToStr(SIZE,2) );   
   SIZE ++;                                                               // счётчик индекса массивов                                                                                                      
  
...
     
      // --------------   Расчёт МА по массиву бидов  --------------------------
       
        if ( SIZE >= Ma_period)
        if (ArraySize(xBuffer_Bid) < 2147483647) 
           { 
            double macurrent0=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-1);
            double macurrent1=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-2);
            double macurrent2=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-3);
            double macurrent3=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-4);
           //Print("
           }

  
    if (time_s!=0) 
       Comment(
              
              
              "macurrent0 = ",       NormalizeDouble(macurrent0,Digits), "\n",
              "macurrent1 = ",       NormalizeDouble(macurrent1,Digits), "\n",
              "macurrent2 = ",       NormalizeDouble(macurrent2,Digits), "\n",
              "macurrent3 = ",       NormalizeDouble(macurrent3,Digits), "\n",              
              
           "") ; 
          
     
   return(0);
  }
 

Il mio Expert Advisor dall'articolo "TRADING HISTORY-based FILTER"( www.mql5.com/ru/articles/1441 ) ha funzionato bene, ma ora compila e genera l'errore '[' - valore indice non valido quando i parametri di input: double virtClosedOrders[0][5]; Aiutami a capire.

Фильтр на основании истории торговли
Фильтр на основании истории торговли
  • 2006.11.29
  • Andrey Khatimlianskii
  • www.mql5.com
В статье рассматривается использование виртуальной торговли, как составной части фильтра открытия сделок.
 
Roman Shiredchenko:

Saluti a tutti, domanda sul calcolo del MA per array di offerte.

Puoi dirmi perché non calcola.

Cioè sono sempre zero nel commento.

La funzione

non restituisce il valore dell'indicatore tecnico Moving Average calcolato utilizzando i dati memorizzati nell'array.

doppioiMAOnArray(

...

Riempie correttamente l'array? Prova a riempirlo in questo modo:

//+------------------------------------------------------------------+
//|                                                   FillArrays.mq4 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|   Input variables                                                |
//+------------------------------------------------------------------+
input int NumberOfStorableTicks=20; // Количество сохраняемых тиков
int numberOfStorableTicks; // Количество сохраняемых тиков
input int PeriodOfMA=5;             // Период сглаживания
int periodOfMA; // Период сглаживания
//+------------------------------------------------------------------+
//|   Global variables                                               |
//+------------------------------------------------------------------+
string symbol;    // Symbol()
int digits;       // Digits
//+------------------------------------------------------------------+
//|   Arrays                                                         |
//+------------------------------------------------------------------+
double      Mass_ticks[];
double      Mass_smoothed_values[];
//+------------------------------------------------------------------+
//|   Structures                                                     |
//+------------------------------------------------------------------+
   MqlTick struct_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   symbol=Symbol();
   digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
   //---
   numberOfStorableTicks=(NumberOfStorableTicks<2)?2:NumberOfStorableTicks;
   periodOfMA=(PeriodOfMA<1)?1:PeriodOfMA;
   //---
   ArrayResize(Mass_ticks,numberOfStorableTicks);
   ArrayInitialize(Mass_ticks,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(SymbolInfoTick(symbol,struct_tick)) {
      double tick_bid=struct_tick.bid;
      FillArrays(numberOfStorableTicks,tick_bid,Mass_ticks);
      }
   string txt="";
   for(int i=numberOfStorableTicks-1; i>=0; i--) {
      txt+="\nmass["+IntegerToString(i)+"]: "+DoubleToString(Mass_ticks[i],digits);
      }
   Comment(txt);
  }
//+------------------------------------------------------------------+
void FillArrays(int array_size, double price, double &mass_price[]) {
   //--- сместим данные в массиве влево
   for(int i=array_size-1; i>0; i--) {
      mass_price[i]=mass_price[i-1];
      }
   //--- запишем новый тик в массив
   mass_price[0]=price;
}
//+------------------------------------------------------------------+

Per prima cosa, assicuratevi che l'array sia riempito correttamente di zecche, e poi cercate di smussarlo con la maschera.

 

Quindi questa è la situazione?

Come lavorare correttamente con iMAonArray?

Ecco una foto:


Ecco il codice:

Non riesco a capire perché gli stessi valori sono sbagliati qui:

Alert(" macurrent0 = ",      DoubleToStr(macurrent0,Digits));
            Alert(" macurrent1 = ",      DoubleToStr(macurrent1,Digits));
            Alert(" macurrent2 = ",      DoubleToStr(macurrent2,Digits));


Qui, conta ed emette correttamente - sto parlando del contenuto delle tre celle più esterne di un array unidimensionale.

 Alert (" Текущее значение xBuffer_Bid [SIZE-1] = ", DoubleToStr(xBuffer_Bid[SIZE-1],Digits) );        
           if (SIZE>1)  Alert (" Предыдущее значение xBuffer_Bid [SIZE-2] = ", DoubleToStr(xBuffer_Bid[SIZE-2],Digits) );    
           if (SIZE>2)  Alert (" Предпредыдущее значение xBuffer_Bid [SIZE-3] = ", DoubleToStr(xBuffer_Bid[SIZE-3],Digits) );                
          } 
ArrayResize(xBuffer_Time,SIZE); ArrayResize(xBuffer_Bid,SIZE);                                         // увеличение размера массивов на 1
   
   if (SIZE>0) 
      {
       xBuffer_Bid[SIZE-1] = NormalizeDouble(MarketInfo(_Symbol, MODE_BID ), Digits);                     // заполнение массива Bid  
       if (ArraySize(xBuffer_Bid) < 2147483647) 
          {  
           Alert (" Текущее значение xBuffer_Bid [SIZE-1] = ", DoubleToStr(xBuffer_Bid[SIZE-1],Digits) );        
           if (SIZE>1)  Alert (" Предыдущее значение xBuffer_Bid [SIZE-2] = ", DoubleToStr(xBuffer_Bid[SIZE-2],Digits) );    
           if (SIZE>2)  Alert (" Предпредыдущее значение xBuffer_Bid [SIZE-3] = ", DoubleToStr(xBuffer_Bid[SIZE-3],Digits) );                
          } 
     
      } 
   Alert (" Текущее значение SIZE = ", DoubleToStr(SIZE,2) );  
   if ( SIZE >= Ma_period)
      if (ArraySize(xBuffer_Bid) < 2147483647) 
           { 
            double macurrent0=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-1);
            double macurrent1=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-2);
            double macurrent2=iMAOnArray(xBuffer_Bid,0,Ma_period,0,MODE_EMA,SIZE-3);
          
                 
           
            Alert(" macurrent0 = ",      DoubleToStr(macurrent0,Digits));
            Alert(" macurrent1 = ",      DoubleToStr(macurrent1,Digits));
            Alert(" macurrent2 = ",      DoubleToStr(macurrent2,Digits));
            
           }           
  
  
    SIZE ++;                                                               // счётчик индекса массивов для их заполнения необходимо его увеличение