Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1289

 

Indicador MQL5

Los valores de balance y patrimonio se escriben sólo en el elemento cero de la matriz.

Pero cuando ejecuto el indicador, esos picos aparecen en diferentes matrices y en diferentes lugares.

El código en init para todos los arrays es el mismo:

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


¿Cómo eliminarlo?

 
Sergey Likho:

Indicador MQL5

Los valores de balance y patrimonio se escriben sólo en el elemento cero de la matriz.

Pero cuando ejecuto el indicador, esos picos aparecen en diferentes matrices y en diferentes lugares.

El código en init para todos los arrays es el mismo:


¿Cómo eliminarlo?

NO DEBE escribir [0], debe considerar prev_calculado y poner a cero la barra anterior.

De hecho, ya existe un código de este tipo: LifeHack Balance Equity y LifeHack Balance Equity 2
LifeHack Balance Equity
LifeHack Balance Equity
  • www.mql5.com
Индикатор отображает баланс и эквити торгового счёта.
 
Vladimir Karputov:

¡¡¡La manija del indicador en MQL5 DEBE CREARSE UNA VEZ!!! ¡¡Y debe hacerse en OnInit()!!

¿Significa que es necesario crear 6 asas del indicador en OnInit para obtener los datos de todos los plazos necesarios?
 
Kira27:
Entonces, ¿quieres crear 6 indicadores en OnInit() para recibir los datos de todos los plazos necesarios?

No. No es necesario si sólo necesitas uno de los seis. Y no tiene que ser creado en OnInit(), lo principal es no crear un handle en cada tick.

 
Kira27:
Entonces, ¿quieres crear seis indicadores en OnInit para recibir datos de todos los plazos necesarios?

Sí. Puedes crear seis variables diferentes para almacenar las seis asas, o puedes (esta es la opción preferida) crear un array y almacenar seis asas en el array.

 
Estoy suscrito a la señal del proveedor de señal de 0,02 lotes, pero mi acuerdo es de alguna manera 0,01. Por favor, aconsejar por qué?
 
FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2013.02.11
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
Lo escribí así, todo está bien, pero engorroso))) Quiero concisión))) ¿Alguna opción?
 //+------------------------------------------------------------------+
//|                                           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
   );  */

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

Dígame qué tiene de malo este código

//+------------------------------------------------------------------+
//|                                                        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:

Dígame qué tiene de malo este código.

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

---

P.D. En general, hay muchas cosas que están mal, con la misma matriz por ejemplo.