Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1289

 

Indicatore MQL5

I valori del saldo e del capitale vengono scritti solo nell'elemento zero della matrice.

Ma quando eseguo l'indicatore, tali picchi appaiono su diversi array e in luoghi diversi.

Il codice in init per tutti gli array è lo stesso:

  SetIndexBuffer(0,Balance1Buffer,INDICATOR_DATA);
  ArraySetAsSeries(Balance1Buffer,true);
  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);


Come rimuoverlo?

 
Sergey Likho:

Indicatore MQL5

I valori del saldo e del capitale sono scritti solo nell'elemento zero della matrice.

Ma quando eseguo l'indicatore, tali picchi appaiono su diversi array e in diversi luoghi.

Il codice in init per tutti gli array è lo stesso:


Come rimuoverlo?

Non dovete scrivere [0], dovete considerare prev_calculato e azzerare la barra precedente.

In effetti, esiste già un tale codice: LifeHack Balance Equ ity e LifeHack Balance Equity 2
LifeHack Balance Equity
LifeHack Balance Equity
  • www.mql5.com
Индикатор отображает баланс и эквити торгового счёта.
 
Vladimir Karputov:

La maniglia dell'indicatore in MQL5 DEVE ESSERE CREATA UNA SOLA VOLTA!!! E deve essere fatto in OnInit()!!!

Significa che è necessario creare 6 maniglie dell'indicatore in OnInit per ricevere i dati di tutti i timeframe necessari?
 
Kira27:
Quindi, volete creare 6 maniglie di indicatori in OnInit() per ricevere i dati di tutti i timeframe necessari?

No. Non è necessario se hai bisogno solo di uno dei sei. E non deve essere creato in OnInit(), l'importante è non creare un handle ad ogni tick.

 
Kira27:
Quindi, volete creare sei maniglie di indicatori in OnInit per ricevere i dati di tutti i timeframe necessari?

Sì. Puoi creare sei variabili diverse per memorizzare i sei handle, oppure puoi (questa è l'opzione preferita) creare un array e memorizzare sei handle nell'array.

 
Sono iscritto all 'accordo di segnale del fornitore di segnale 0,02 lotti, ma il mio accordo è in qualche modo 0,01. Si prega di consigliare perché?
 
FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2013.02.11
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
L'ho scritto così, va tutto bene, ma ingombrante))) Voglio concisione))) Qualche opzione?
 //+------------------------------------------------------------------+
//|                                           Fraktal_Time_Frame.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];     // одномерный динамический массив, так как в [] пусто
double FractalDown_D1[],FractalUp_D1[];   // одномерный динамический массив, так как в [] пусто
double FractalDown_H4[],FractalUp_H4[];   // одномерный динамический массив, так как в [] пусто
double FractalDown_1H[],FractalUp_1H[];   // одномерный динамический массив, так как в [] пусто
double FractalDown_30[],FractalUp_30[];   // одномерный динамический массив, так как в [] пусто
double FractalDown_15[],FractalUp_15[];   // одномерный динамический массив, так как в [] пусто
//____________________________________Переменные под хендлы____________________________________
int Fractal_W1;
int Fractal_D1;
int Fractal_H4;
int Fractal_1H;
int Fractal_30;
int Fractal_15;
//_____________________________________________________________________________________________
datetime Time_Mass_OLD[ 7 ];   //массивы для нранения времени открытия нулевого бара
datetime Time_Mass_NEW[ 7 ];   //ассивы для нранения времени открытия нулевого бара

//+------------------------------------------------------------------+
int OnInit ()
  {
   Fractal_W1= iFractals ( Symbol (), PERIOD_W1 );
   Fractal_D1= iFractals ( Symbol (), PERIOD_D1 );
   Fractal_H4= iFractals ( Symbol (), PERIOD_H4 );
   Fractal_1H= iFractals ( Symbol (), PERIOD_H1 );
   Fractal_30= iFractals ( Symbol (), PERIOD_M30 );
   Fractal_15= iFractals ( Symbol (), PERIOD_M15 );



   Time_Mass_OLD[ 1 ]= iTime ( NULL , PERIOD_W1 , 0 );
   CopyBuffer (Fractal_W1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_W1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

   Time_Mass_OLD[ 2 ]= iTime ( NULL , PERIOD_D1 , 0 );
   CopyBuffer (Fractal_D1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUp_D1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_D1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

   Time_Mass_OLD[ 3 ]= iTime ( NULL , PERIOD_H4 , 0 );
   CopyBuffer (Fractal_H4, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUp_H4);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_H4, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

   Time_Mass_OLD[ 4 ]= iTime ( NULL , PERIOD_H1 , 0 );
   CopyBuffer (Fractal_1H, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUp_1H);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_1H, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

   Time_Mass_OLD[ 5 ]= iTime ( NULL , PERIOD_M30 , 0 );
   CopyBuffer (Fractal_30, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUp_30);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_30, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.


   Time_Mass_OLD[ 6 ]= iTime ( NULL , PERIOD_M15 , 0 );
   CopyBuffer (Fractal_15, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUp_15);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer (Fractal_15, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.


   /* Alert("OnInit");
    ArrayRemove(FractalDown_W1,0,WHOLE_ARRAY);
    ArrayPrint(
       FractalUP_W1,             // выводимый массив
       0,      // количество десятичных знаков после запятой
       NULL,      // разделитель между значениями полей структуры
       0,             // индекс первого выводимого элемента
       WHOLE_ARRAY,   // количество выводимых элементов
       ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
    );

    ArrayRemove(FractalUp_1H,0,WHOLE_ARRAY);
    ArrayPrint(
       FractalDown_W1,             // выводимый массив
       0,      // количество десятичных знаков после запятой
       NULL,      // разделитель между значениями полей структуры
       0,             // индекс первого выводимого элемента
       WHOLE_ARRAY,   // количество выводимых элементов
       ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
    );  */
//------------------------------------------------------------------
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   Time_Mass_NEW[ 1 ]= iTime ( NULL , PERIOD_W1 , 0 );
   Time_Mass_NEW[ 2 ]= iTime ( NULL , PERIOD_D1 , 0 );
   Time_Mass_NEW[ 3 ]= iTime ( NULL , PERIOD_H4 , 0 );
   Time_Mass_NEW[ 4 ]= iTime ( NULL , PERIOD_H1 , 0 );
   Time_Mass_NEW[ 5 ]= iTime ( NULL , PERIOD_M30 , 0 );
   Time_Mass_NEW[ 6 ]= iTime ( NULL , PERIOD_M15 , 0 );


   for ( int tik = 1 ; tik <= 6 ; tik++)
     {
       if (Time_Mass_NEW[tik]!=Time_Mass_OLD[tik])
        {
         switch (tik)
           {
             case 1 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_W1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_W1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_W1 ),FractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
             case 2 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_D1, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalUp_D1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_D1, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_D1 ),FractalDown_D1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
             case 3 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_H4, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalUp_H4);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_H4, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H4 ),FractalDown_H4); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
             case 4 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_1H, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalUp_1H);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_1H, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_H1 ),FractalDown_1H); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
             case 5 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_30, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalUp_30);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_30, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M30 ),FractalDown_30); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
             case 6 :
               Time_Mass_OLD[tik]=Time_Mass_NEW[tik];
               CopyBuffer (Fractal_15, 0 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalUp_15);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
               CopyBuffer (Fractal_15, 1 , TimeCurrent (), Bars ( Symbol (), PERIOD_M15 ),FractalDown_15); // заполнение масива FractalUp[] нижними фракталами на дневном графике
               //--- индексация как в таймсериях
               ArraySetAsSeries (FractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
               ArraySetAsSeries (FractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.
               ;
               break ;
           }
        }
     }

/*   int n=0;
//----------------------------------------------------
//--- 1 далее используем оператор цикла for для поиска первого верхнего фрактала
   int i=Bars(Symbol(),PERIOD_W1); //Колличество баров на H1 графике

   for(n=0; n< i; n++)
     {
      //--- если непустое значение, прерываем цикл
      if(FractalUP_W1[n]!=EMPTY_VALUE)
         break;
     }
//--- запишем ценовое значение первого фрактала в переменную UpFractal_1 из массива с индексом где обнаружился верхний фрактал
   double UpFractal_1=FractalUP_W1[n];
   Alert("UpFractal_1= ",UpFractal_1);
//---
   ArrayPrint(
      FractalUP_W1,             // выводимый массив
      0,      // количество десятичных знаков после запятой
      NULL,      // разделитель между значениями полей структуры
      0,             // индекс первого выводимого элемента
      WHOLE_ARRAY,   // количество выводимых элементов
      ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
   );


   ArrayPrint(
      FractalDown_W1,             // выводимый массив
      0,      // количество десятичных знаков после запятой
      NULL,      // разделитель между значениями полей структуры
      0,             // индекс первого выводимого элемента
      WHOLE_ARRAY,   // количество выводимых элементов
      ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_ALIGN
   );  */

  }
//+------------------------------------------------------------------+
 

Dimmi cosa c'è di sbagliato in questo codice

//+------------------------------------------------------------------+
//|                                                        Funct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int UP; //Глобальная переменная

//_____________________________________Массивы для Handleлов____________________________________
double HandleFractalDown_W1[],HandleFractalUP_W1[];    // одномерный динамический массив

//_____________________________________Массивы для фракталов____________________________________
double FractalDown_W1[],FractalUP_W1[];    // одномерный динамический массив

//-----------------------------------------------------------------------------------------------
int  Fractal_W1=iFractals(Symbol(),PERIOD_W1); //Хендл индикатора

//----------------------------------------------------------------------
void OnStart()
  {
   CopyBuffer(Fractal_W1,0,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalUP_W1);   // заполнение масива FractalUp[] верхними фракталами на дневном графике
   CopyBuffer(Fractal_W1,1,TimeCurrent(),Bars(Symbol(),PERIOD_W1),HandleFractalDown_W1); // заполнение масива FractalUp[] нижними фракталами на дневном графике
//--- индексация как в таймсериях
   ArraySetAsSeries(FractalUP_W1,true);  //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries(FractalDown_W1,true);//Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

  Search_Fractal(PERIOD_W1, HandleFractalUP_W1, FractalUP_W1); //Пользовательская функция заполнения массива FractalUP_W1 значениями
                                                               //верхних фракталов  

  }
//+------------------------------------------------------------------+

//+-----------------------Функция заполнения массива-------------------------------------------+
double Search_Fractal(enum period, double handle, double fract_mass)
  {
   UP = 0;                      //Глобальная переменная
   int i=Bars(Symbol(),period); //Колличество баров на W1 графике
   
   for(int n=0; n< i; n++)
     {
      //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
      if(handle[n]!=EMPTY_VALUE)
        {
         UP++;
         fract_mass[UP] = handle[n];
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
 
Kira27:

Dimmi cosa c'è di sbagliato in questo codice.

//+-----------------------Функция заполнения массива-------------------------------------------+
double Search_Fractal(ENUM_TIMEFRAMES period, double handle, double fract_mass)
  {
   UP = 0;                      //Глобальная переменная

---

P.S. In generale, ci sono molte cose sbagliate, con lo stesso array per esempio.

Motivazione: