초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1289

 

MQL5 지표

균형 및 형평성의 값은 배열의 0 요소에만 기록됩니다.

그러나 표시기가 시작되면 이러한 첨탑은 다른 배열과 다른 위치에 나타납니다.

모든 배열에 대한 init의 코드는 다음과 같습니다.

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


그것을 제거하는 방법?

 
Sergey Likho :

MQL5 지표

균형 및 형평성의 값은 배열의 0 요소에만 기록됩니다.

그러나 표시기가 시작되면 이러한 첨탑은 다른 배열과 다른 위치에 나타납니다.

모든 배열에 대한 init의 코드는 다음과 같습니다.


그것을 제거하는 방법?

[0]에만 쓸 수 없으며 prev_calculated를 고려하고 이전 막대를 재설정해야 합니다.

일반적으로 LifeHack Balance EquityLifeHack Balance Equity 2 와 같은 코드가 이미 있습니다.
LifeHack Balance Equity
LifeHack Balance Equity
  • www.mql5.com
Индикатор отображает баланс и эквити торгового счёта.
 
Vladimir Karputov :

MQL5의 표시기 핸들은 한 번 생성되어야 합니다!!! 그리고 OnInit()에서 해야 합니다!!!

즉, 필요한 모든 시간 프레임에서 데이터를 가져오려면 OnInit에서 6개의 표시기 핸들을 만들어야 합니까?
 
Kira27 :
즉, 필요한 모든 시간 프레임에서 데이터를 가져오려면 OnInit에서 6개의 표시기 핸들을 만들어야 합니까?

아니요. 6개 중 하나만 필요한 경우는 아닙니다. 그리고 OnInit()에서 생성할 필요는 없습니다. 중요한 것은 모든 틱 에 핸들을 생성하지 않는 것입니다.

 
Kira27 :
즉, 필요한 모든 시간 프레임에서 데이터를 가져오려면 OnInit에서 6개의 표시기 핸들을 만들어야 합니까?

네. 6개의 핸들을 저장하기 위해 6개의 다른 변수를 생성하거나 배열을 생성하고 배열에 6개의 핸들을 저장할 수 있습니다(이것이 선호되는 옵션입니다).

 
나는 신호 제공자 의 신호를 구독하고 있으며 거래는 0.02랏이고 어떤 이유로 0.01을 실행하고 있습니다. 이유를 알려주세요.
 
FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2013.02.11
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
저는 이렇게 썼습니다. 다 괜찮지만 번거롭습니다))) 간결함을 원합니다))) 옵션이 있나요?
 //+------------------------------------------------------------------+
//|                                           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
   );  */

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

이 코드의 문제점을 알려주세요.

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

이 코드의 문제점을 알려주세요.

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

---

추신이지만 일반적으로 예를 들어 동일한 어레이에서 많은 것들이 잘못되었습니다.

사유: