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

 
Vitaly Muzichenko :

---

PS ama genel olarak, örneğin aynı dizide birçok şey yanlış.

Yardım ve ipucu için teşekkürler!!! Bu şekilde derlenir

 //+------------------------------------------------------------------+
//|                                                        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 значениями
                                                               //верхних фракталов  

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

//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal( ENUM_TIMEFRAMES 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];
        }
     }
  }
//+------------------------------------------------------------------+
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • 2021.02.13
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
Biraz ince ayar yaptım, neredeyse olması gerektiği gibi çalışıyor, 51.20'ye kadar orada bir hatayla çöküyor

Dizi İşlevi(BRN, W1) aralık dışında

 //+------------------------------------------------------------------+
//|                                                        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 (HandleFractalUP_W1, true );   //Заполнение массива FractalUp[],FractalDown, нулевым баром в первом окне массива и далее по порядку убывания от нулевого в тайм-серии
   ArraySetAsSeries (HandleFractalDown_W1, true ); //Второй параметр -true- функции ArraySetAsSeries Устанавливает флаг индексации как в таймсериях.

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



//+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal( ENUM_TIMEFRAMES 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];
         Alert ( "Frakt= " ,fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+
Ne olabilir?
 
Kira27 :
Biraz ince ayar yaptım, neredeyse olması gerektiği gibi çalışıyor, 51.20'ye kadar orada bir hatayla çöküyor

Dizi İşlevi (BRN, W1) aralık dışında

Ne olabilir?

Bunu deneyin, dizi boyutu ayarınız yok

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

Genel olarak, bu en iyi çözüm değildir.

 
Kira27 :
Biraz ince ayar yaptım, neredeyse olması gerektiği gibi çalışıyor, 51.20'ye kadar orada bir hatayla çöküyor

Dizi İşlevi (BRN, W1) aralık dışında

Ne olabilir?

Çarpışma sorununu çözen hat

 ArrayResize (handle,i, 0 ); //*------Строчка решившая проблему
 //+-----------------------Функция заполнения массива-------------------------------------------+
void Search_Fractal( ENUM_TIMEFRAMES period, double &handle[], double &fract_mass[])
  {
   UP = 0 ;                       //Глобальная переменная
   int i= Bars ( Symbol (),period); //Колличество баров на W1 графике

//***************************
   ArrayResize (handle,i, 0 ); //*------Строчка решившая проблему
//***************************

   for ( int n= 0 ; n< i; n++)
     {
       //--- если непустое значение, пишем в массив fract_mass[UP] цену фрактала
       if (handle[n]!= EMPTY_VALUE )
        {
         UP++;
         fract_mass[UP] = handle[n];
         Alert ( "Frakt= " ,fract_mass[UP]);
        }
     }
  }
//+------------------------------------------------------------------+

Şu anda? Zor değilse düzeltin.

 
Kira27 :
Biraz ince ayar yaptım, neredeyse olması gerektiği gibi çalışıyor, 51.20'ye kadar orada bir hatayla çöküyor

Dizi İşlevi (BRN, W1) aralık dışında

Ne olabilir?

Aynı zamanda belirli sayıda öğeyi HandleFractalUP_W 1 dizisine kopyalarsınız, ancak tam olarak kaç tane öğeyi kontrol edemezsiniz.

Ardından, int i=Bars(Symbol(),period); //W1 grafiğindeki çubuk sayısı

Sonuç olarak, yine diziden çıkın, ancak zaten tanıtıcı[n] içinde

Doldurma mantığıyla biraz anlayın, acele etmeyin.

----

Kira27 :

Çarpışma sorununu çözen hat

Şu anda? Zor değilse düzeltin.

Yani her şey zor, ama başaracaksın

 
Kira27 :

Çarpışma sorununu çözen hat

Şu anda? Zor değilse düzeltin.

Haftalık grafik penceresinde yalnızca çubuklardan daha az fraktal vardır ve dizi fraktal fiyat değerleriyle dolduğunda yalnızca 90 hücre doldurulur ve bellek işaretlemesinin geri kalanı gereksizdir Önce fraktal sayısını hesaplamanız ve ardından bellek ayırmak için ArrayResize'ı uygulamanız mı gerekiyor?

 
Vitaly Muzichenko :

Aynı zamanda belirli sayıda öğeyi HandleFractalUP_W 1 dizisine kopyalarsınız, ancak tam olarak kaç tane öğeyi kontrol edemezsiniz.

Ardından, int i=Bars(Symbol(),period); //W1 grafiğindeki çubuk sayısı

Sonuç olarak, diziden tekrar çıkın, ancak zaten handle[n] içinde

Doldurma mantığıyla biraz anlayın, acele etmeyin.

----

Yani her şey zor, ama başaracaksın

Teşekkürler!!!

 

Herkese iyi günler. Lütfen ciltlerin geçmişini almanın neden mümkün olmadığını anlamama yardım edin. 2 şekilde yapmaya çalıştım.

İlk yol:

MqlRates mrate5[];

if(CopyRates(_Symbol,PERIOD_M5,1,bars_used,mrate5)<0)

{

Alert("M5 için geçmiş veriler kopyalanırken hata oluştu - hata:",GetLastError(),"!!");

dönüş;

}

for (int i=0;i<bars_used;i++) {

Yazdır(mrate5[i].real_volume)

}

İkinci yol:

uzun ciltler5[];

if(CopyRealVolume(_Symbol,PERIOD_M5,1,bars_used,volumes5)<0)

{

Alert("M5 için ciltler kopyalanırken hata oluştu - hata:",GetLastError(),"!!");

dönüş;

}

for (int i=0;i<bars_used;i++) {

Yazdır(cilt5[i])

}

Her iki durumda da, birim dizisi her zaman yalnızca sıfır içerir. Hiçbir anlamlı bilgi basitçe elde edilemez...


 
seleand :

Herkese iyi günler. Lütfen ciltlerin geçmişini almanın neden mümkün olmadığını anlamama yardım edin. 2 şekilde yapmaya çalıştım.

İlk yol:

 MqlRates mrate5[];
       if ( CopyRates ( _Symbol , PERIOD_M5 , 1 ,bars_used,mrate5)< 0 )
        {
             Alert ( "Ошибка копирования исторических данных для М5 - ошибка:" , GetLastError (), "!!" );
             return ;
        }
for ( int i= 0 ;i<bars_used;i++) {
Print (mrate5[i].real_volume)
}

İkinci yol:

 long volumes5[];
       if ( CopyRealVolume ( _Symbol , PERIOD_M5 , 1 ,bars_used,volumes5)< 0 )
        {
             Alert ( "Ошибка копирования объемов для М5 - ошибка:" , GetLastError (), "!!" );
             return ;
        }
for ( int i= 0 ;i<bars_used;i++) {
Print (volumes5[i])
}

Her iki durumda da, birim dizisi her zaman yalnızca sıfır içerir. Hiçbir anlamlı bilgi basitçe elde edilemez...


  1. Kodlamayı öğrenin.
  2. Forex'te kelimenin gerçek hacimleri yoktur.
 

Teşekkür ederim. Bir kene hacmi olduğunu doğru anlıyor muyum?

Sadece, örneğin, Finam sitesinden Forex için tekliflerin geçmişini indirdiğimde, orada, açık, yüksek, düşük, kapanışa ek olarak, ayrıca hacim de vardı. Bu hacmin tam olarak ne olduğunu belirtmeden. Bu bir kene hacmi mi?

Neden: