Array out of range in Нужна Помощь - страница 12

 
Алексей Тарабанов:

Четвёртые сутки... всё прогрессивное человечество... 

А он, зараза, out of range. 

  Ждём Вас !

 
Dark Kchlyzov:

Не совсем понял .

сперва запоминаем размер массива, потом предварительно делаем проверку индекса на не больше размера массива.

Когда ищу экстремумы, тоже не знаю сколько их будет. Запоминаю сколько нашел в переменную. После делаю проверку за не выход количества найденных экстремумов. Работаю со статическими массивами, и в этой ситуации выход за пределы чреват нулевыми или случайными значениями. 

Не люблю динамические массивы, но в ваше случае достаточно большие объемы. 

Вашу задачу понял так, ищем одинаковые дневные минимумы.

Решал бы так. Сперва в массив запомнил бы минимумы экстремумы (на рисунке у вас именно так, а в условии вы сравниваете все дневные цены Лоу). И потом искал бы одинаковые с некой точностью. 

 

Приглашаем наших специалистов :

1)  Vitaly Muzichenko самый главный специалист нашего поста ( Гуру) судя по написанной им продукции.

2)  Valeriy Yastremskiy

3)  Алексей Тарабанов

4)  Aleksei Stepanenko  человек который не просто болтал а написал с 0 код но проблема не ушла .

5)  Ну и все остальные .

   Поехали: начел тестить  код написанный  Aleksei Stepanenko    #property version   "2.00" 

Смотрим скрин 1 

  Что мы видим Day1 и DayMin находятся в одной параллели 0.67366 ,

 далее: если бы  истории не было по данному инструменту это было-бы  нормой .

открываем инструмент накидываем линии, так как  в тестере назад не мотается 

и пошли по истории вручную.


 В истории 2019.10.16 в 15.00 мы находим дневной минимум 

накидываем линию и гребем назад

И тут мы понимаем, что-то тут не так и уровень (значение)  DayMin на скрин 1 должно быть = 67233

Далее исходя из того что я только начинаю изучать MQL4 b мне сложно понять код  Aleksei Stepanenko ( там класс в классе, массивы чета там творят перезаписывают и тд.)

Вот собственно возникает вопрос к специалистам как у вас работают ваши индикаторы и вся ваша продукция (мне было-бы стыдно)

На 9 страницы поста  причина обращение в развернутом виде    https://www.mql5.com/ru/forum/357558/page9#comment_19689951 

 
Dark Kchlyzov:

Приглашаем наших специалистов :

1)  Vitaly Muzichenko самый главный специалист нашего поста ( Гуру) судя по написанной им продукции.

2)  Valeriy Yastremskiy

3)  Алексей Тарабанов

4)  Aleksei Stepanenko  человек который не просто болтал а написал с 0 код но проблема не ушла .

5)  Ну и все остальные .

   Поехали: начел тестить  код написанный  Aleksei Stepanenko    #property version   "2.00" 

Смотрим скрин 1 

  Что мы видим Day1 и DayMin находятся в одной параллели 0.67366 ,

 далее: если бы  истории небыли по данному инструменту это было-бы  нормой .

 Смотрим скрин 2

открываем инструмент накидываем линии, так в тестере назад не мотается 

и пошли по истории вручную.

Смотрим скрин 3 

 В истории 2019.10.16 в 15.00 мы находим дневной минимум 

накидываем линию и гребем назад

Смотрим скрин 4 

И тут мы понимаем, что-то тут не так и уровень (значение)  DayMin на скрин 1 должно быть = 67233

Далее исходя из того что я только начинаю изучать MQL4 b мне сложно понять код  Aleksei Stepanenko ( там класс в классе, массивы чета там творят перезаписывают и тд.)

Вот собственно возникает вопрос к специалистам как у вас работают ваши индикаторы и вся ваша продукция (мне было-бы стыдно)

На 9 страницы поста  причина обращение в развернутом виде    https://www.mql5.com/ru/forum/357558/page9#comment_19689951 

алгоритм делает то что написано, а не как думаешь. Тоже печатаю в файл и смотрю что там посчитано, и часто, совсем не то что замыслил, а то что написал.

 
Valeriy Yastremskiy:

алгоритм делает то что написано, а не как думаешь. Тоже печатаю в файл и смотрю что там посчитано, и часто, совсем не то что замыслил, а то что написал.

Не знаю как кто пишет код .

Но лично я все пиши просто и понятно для себя в током стили и случайных значений у меня не получается .

зато понятно от куда ноги растут. и если  out of range это так и есть , а не пролетели со свистом дальше.

(алгоритм делает то что написано, а не как думаешь ) алгоритм должен делать так как ты думаешь а не как захочет. иначе это слив депозита . И лично меня этот вариант не устраивает . 

пример глобальных переменных (хотя это для кого-то покажется допотопно)

//+------------------------------------------------------------------+
//|                                                     new_test.mq4 |
//|                        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.4" 
#property strict
//------------------------------------------------------------------+
int Order_MagicNumber; // для авто торговли 
int Magic = 0;         //для ручная торговля
//------------------------------------------------------------------+
extern color  Color               = Black;   // Color линия Bid
extern bool   Objects             = true;    // Удалять объекты созданные Cоветником
extern int    In_Time             = 3;       // Время входа эксперта на рынок  (время терминала)
extern int    Out_Time            = 23;      // Время выхода эксперта с рынка  (время терминала)
extern int    Time_End_Friday     = 18;      // Время после которого не торгуем в пятницу (время терминала)
extern string r_t                 = "";      // + 
extern int    Step                = 10;      // Step trailing stop            ( Шаг трал стопа ) 
//--------------------------------------------------------------------------------------------------------
extern string R_T   = "Параметры";           // ===================== Ручная Торговля ====================
extern int    Take_Profit         = 5000;    // Take Profit   
extern int    Stop_Loss           = 1200;    // Stop Loss           
extern int    Stop_Loss_Profit    = 15;      // Stop loss without loss   ( Стоп-лосс без убытка )
extern int    Start_Profit        = 50;      // Start Trailing Stop          ( Старт трейлинг стоп )
extern string a_t                 = "";      // + 
//--------------------------------------------------------------------------------------------------------
extern string A_T  = "Параметры";            // ================ Автоматическая торговля =================
extern int    Take_Profit_A       = 2500;    // Take Profit   
extern int    Stop_Loss_A         = 1200;    // Stop Loss    
extern int    Stop_Loss_Profit_A  = 15;      // Stop loss without loss   ( Стоп-лосс без убытка )
extern int    Start_Profit_A      = 50;      // Start Trailing Stop          ( Старт трейлинг стоп )  

//------------------------------------------------------------------+
//--------------------------------------------------------------------------------------------------------
extern string A_S  = "Параметры";            // ======================= Scalping =========================
extern int    Take_Profit_S       = 10000;     // Take Profit   
extern int    Stop_Loss_S         = 1500;     // Stop Loss    
extern int    Stop_Loss_Profit_S  = 15;      // Stop loss without loss   ( Стоп-лосс без убытка )
extern int    Start_Profit_S      = 30;     // Start Trailing Stop          ( Старт трейлинг стоп )  

//------------------------------------------------------------------+
string symbol_EURUSD = "EURUSD";
string symbol_GBPUSD = "GBPUSD";
string symbol_AUDUSD = "AUDUSD";
string symbol_NZDUSD = "NZDUSD";
string symbol_USDCHF = "USDCHF";
string symbol_USDJPY = "USDJPY";
string symbol_USDCAD = "USDCAD";
string symbol_USDCNH = "USDCNH";
string symbol_SPX500 = "SPX500";
//-------------------------------------------------------------------+
double Rvi_Blue_H1;
double Rvi_Red_H1;
double Rvi_Blue_H4;
double Rvi_Red_H4;
double Rvi_Blue_D1;
double Rvi_Red_D1;
double Rvi_Blue_W1;
double Rvi_Red_W1;
//-------------------------------------------------------------------+
double TakeProfit     = NormalizeDouble(Take_Profit*_Point ,_Digits);      // Тейк-профит         ручная торговля
double StopLoss       = NormalizeDouble(Stop_Loss*_Point ,_Digits);        // Стоп-лосс           ручная торговля
double StopLossProfit = NormalizeDouble(Stop_Loss_Profit*_Point ,_Digits); // Стоп-лосс безубытка ручная торговля
double StartProfit    = NormalizeDouble(Start_Profit*_Point ,_Digits);     // Стрт-профит         ручная торговля

//-------------------------------------------------------------------+

double TakeProfit_S     = NormalizeDouble(Take_Profit_S*_Point ,_Digits);      // Тейк-профит         Scalping 
double StopLoss_S       = NormalizeDouble(Stop_Loss_S*_Point ,_Digits);        // Стоп-лосс           Scalping  
double StopLossProfit_S = NormalizeDouble(Stop_Loss_Profit_S*_Point ,_Digits); // Стоп-лосс безубытка Scalping 
double StartProfit_S    = NormalizeDouble(Start_Profit_S*_Point ,_Digits);     // Стрт-профит         Scalping 

//-------------------------------------------------------------------+ 

double TakeProfit_B   = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит Breakdown автоматической торговли 
double TakeProfit_C   = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит Center    автоматической торговли 
double TakeProfit_ATR = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит ATR       автоматической торговли
double TakeProfit_H1  = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит H1        автоматической торговли
double TakeProfit_H4  = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит H4        автоматической торговли
double TakeProfit_D1  = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит D1        автоматической торговли
double TakeProfit_W1  = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит W1        автоматической торговли
double TakeProfit_TB  = NormalizeDouble(Take_Profit_A*_Point ,_Digits);    // Тейк-профит Trend_Bar автоматической торговли


double StopLoss_B   = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс Breakdown автоматической торговли
double StopLoss_C   = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс Cente     автоматической торговли
double StopLoss_ATR = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс ATR       автоматической торговли
double StopLoss_H1  = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс H1        автоматической торговли
double StopLoss_H4  = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс H4        автоматической торговли
double StopLoss_D1  = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс D1        автоматической торговли
double StopLoss_W1  = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс W1        автоматической торговли
double StopLoss_TB  = NormalizeDouble(Stop_Loss_A*_Point ,_Digits);  // Стоп-лосс Trend_Bar автоматической торговли


double StopLossProfit_B   = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка Breakdown автоматической торговли
double StopLossProfit_C   = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка Center    автоматической торговли
double StopLossProfit_ATR = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка ATR       автоматической торговли
double StopLossProfit_H1  = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка H1        автоматической торговли
double StopLossProfit_H4  = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка H4        автоматической торговли
double StopLossProfit_D1  = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка D1        автоматической торговли
double StopLossProfit_W1  = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка W1        автоматической торговли
double StopLossProfit_TB  = NormalizeDouble(Stop_Loss_Profit_A*_Point ,_Digits);  // Стоп-лосс безубытка Trend_Bar автоматической торговли


double StartProfit_B   = NormalizeDouble(Start_Profit_A*_Point ,_Digits);         // Стрт-профит Breakdown автоматической торговли
double StartProfit_C   = NormalizeDouble(Start_Profit_A*_Point ,_Digits);         // Стрт-профит Center    автоматической торговли
double StartProfit_ATR = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит ATR       автоматической торговли
double StartProfit_H1  = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит H1        автоматической торговли
double StartProfit_H4  = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит H4        автоматической торговли
double StartProfit_D1  = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит D1        автоматической торговли
double StartProfit_W1  = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит W1        автоматической торговли
double StartProfit_TB  = NormalizeDouble((Start_Profit_A*2)*_Point ,_Digits);     // Стрт-профит Trend_Bar автоматической торговли

double step           = NormalizeDouble(Step*_Point ,_Digits);             // Шаг трал стопа      ручная торговля
//-------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                        Функция Level 
//+------------------------------------------------------------------+
double   Bar_data_D1  [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров D1
int      ACR_D1;             // Возвращает количество скопированных баров D1
double   Bar_data_W1  [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров W1
int      ACR_W1;             // Возвращает количество скопированных баров W1
double   Bar_data_MN1 [][6]; // Копирует в массив данные баров указанного графика и возвращает количество скопированных баров MN1
int      ACR_MN1;            // Возвращает количество скопированных баров MN1
double   High_D1_Level;      // Возвращает значение максимальной цены бара D1
double   Low_D1_Level;       // Возвращает значение минимальной цены бара  D1
double   High_W1_Level;      // Возвращает значение максимальной цены бара W1
double   Low_W1_Level ;      // Возвращает значение минимальной цены бара  W1
double   High_MN1_Level;     // Возвращает значение максимальной цены бара MN1
double   Low_MN1_Level;      // Возвращает значение минимальной цены бара  MN1
double   Max_D_Level;        // ближайшей максимальный D уровень
double   Min_D_Level ;       // ближайшей минимальный  D уровень
double   Max_W_Level ;       // ближайшей максимальный W уровень
double   Min_W_Level ;       // ближайшей минимальный  W уровень
double   Max_MN_Level ;      // ближайшей максимальный MN уровень
double   Min_MN_Level ;      // ближайшей минимальный  MN уровень
//+------------------------------------------------------------------+
double Lots;            // переменная для расчёта лота и вывода в кнопке
string lots;            // переменная для отоброжения имя кнопки Lots
string sell;            // переменная для отоброжения имя кнопки Sell
string bay;             // переменная для отоброжения имя кнопки Bay
string balance;         // переменная для отоброжения имя кнопки balance
int    avto_torgovlya;  // объекта «Кнопка» Авто_торговля
int    avto_tral_stop;  // объекта «Кнопка» Авто_трал_стоп
int    break_even;      // объекта «Кнопка» Безубыток
int    scalper;         // объекта «Кнопка» scalper  
//-------------------------------------------------------------------+
int       Time_Seconds;        // сохроняем секунду 
int       Time_Minute;         // сохроняем минуту 
int       Time_Hour;           // сохроняем час
int       ticks_to_close = 10; // количество тиков до снятия эксперта с терменала
int       ExtRVIPeriod   = 10;
datetime  Order_datetime_S;
datetime  Time_Day;

//-------------------------------------------------------------------+

 
string String_Order;      // описание сигнала Bay или Sell
int Signal_Order_1;       // если 1 то Bay - если -1 то сел (обнуляем 1 раз в день) 
double BuyTralStop_S,    SellTralStop_S;
int N1_Order_Bay_Time;   // записываем время последней сделки (обнуляем 1 раз в день) 
int N1_Order_Sell_Time;  // записываем время последней сделки (обнуляем 1 раз в день) 

int tframe[] = {1,5,15,30,60,240,1440,10080,43200};              
string tf[]  = {"M1","M5","M15","M30"," H1"," H4","D1","W1","MN1"}; 
int tfnumber = 9;    

int    ADX_Period = 14;                                          
int    ADX_Price  = PRICE_CLOSE; 
double Step_Psar  = 0.02;
double Max_Psar   = 0.2;

color  UpColor   = clrBlue;                                       
color  DownColor = clrRed;                              // Trend_Bar
color  FlatColor = clrLime;
color  TextColor = clrGreen;
int    Corner    =0;

double Psar;                                                     
double PADX,NADX;                                             
string TimeFrameStr;                                     
double IndVal[9];                  
//-------------------------------------------------------------------+

string lots;            // переменная для отображения имя кнопки Lots
string sell;            // переменная для отображения имя кнопки Sell
string bay;             // переменная для отображения имя кнопки Bay
string balance;         // переменная для отображения имя кнопки balance
int    avto_torgovlya;  // объекта «Кнопка» Авто_торговля
int    avto_tral_stop;  // объекта «Кнопка» Авто_трал_стоп
int    break_even;      // объекта «Кнопка» Без убыток
int    scalper;         // объекта «Кнопка» scalper  
//-------------------------------------------------------------------+
double    Lots;                // переменная для расчёта лота
int       Time_Seconds;        // сохраняем секунду 
int       Time_Minute;         // сохраняем минуту 
int       Time_Hour;           // сохраняем час
int       Friday;              //переменная для торговли в пятницу если равно 0 торговля разрешена 1 торговля запрещена 
int       ticks_to_close = 10; // количество тиков до снятия эксперта с терминала
int       ExtRVIPeriod   = 10;
datetime  Order_datetime_S;

//-------------------------------------------------------------------+
string File_Name;
int file_handle;
int Signal[100];// Signal [0] текущий день   Signal [10]  Shaping_Signal Bay       
                // Signal [1] H1             Signal [11]  Shaping_Signal Sell
                // Signal [2] H4             Signal [12]        
                // Signal [3] D1             Signal [13]
                // Signal [4] W1             Signal [14]
                // Signal [5] Scalper        Signal [15]
                // Signal [6] Breakdown      Signal [16]
                // Signal [7] Center         Signal [17]
                // Signal [8] ATR            Signal [18]
                // Signal [9] Trend_Bar      Signal [19]
//-------------------------------------------------------------------+
int    ATR_Period = 5;
double beginner   = 0;
int    timeshift  = 0, timeshifts = 0;
double H4, L4, H4t, L4t;   
double fullatr;
double ATR_Level_5, ATR_Level_6;
double rates_d1 [][6];
double ATR_Level [10]; //Сохраняем  в массиве Signal[100] значение линий 
                       //ATR_Level[0] line BAY
                       //ATR_Level[1] line SELL  
                       //ATR_Level[2] line Center
                       //ATR_Level[3] line High_d1 Предыдущий день
                       //ATR_Level[4] line Low_d1  Предыдущий день 
                       //ATR_Level[5] line D_max от line SELL
                       //ATR_Level[6] line D_min от line BAY                
//-------------------------------------------------------------------+
double BuyTralStop,     SellTralStop;
double BuyTralStopS,    SellTralStopS;
double BuyTralStopH1,   SellTralStopH1;
double BuyTralStopH4,   SellTralStopH4;
double BuyTralStopD1,   SellTralStopD1;
double BuyTralStopW1,   SellTralStopW1;
double BuyTralStop_C,   SellTralStop_C;
double BuyTralStop_B,   SellTralStop_B;
double BuyTralStop_ATR, SellTralStop_ATR;
double BuyTralStop_TB, SellTralStop_TB;
//-------------------------------------------------------------------+
int S_Order_Time[2]; // [0] Bay
                     // [1] Sell
string S_Order; // описание сигнала                     
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Алексей Тарабанов:

Четвёртые сутки... всё прогрессивное человечество... 

А он, зараза, out of range. 

Ждём вас !

 
Vitaly Muzichenko:

Как вижу

Ждём Вас !

 
Dark Kchlyzov:

Посмотри, вроде так надо?

Файлы:
20201213.log  588 kb
 
Dark Kchlyzov:

Но лично я все пиши просто и понятно для себя в током стили и случайных значений у меня не получается .

зато понятно от куда ноги растут. и если  out of range это так и есть , а не пролетели со свистом дальше.

(алгоритм делает то что написано, а не как думаешь ) алгоритм должен делать так как ты думаешь а не как захочет. иначе это слив депозита . И лично меня этот вариант не устраивает . 


Нет логики. У Вас нет случайных значений,  но есть выход за пределы массива

И основное противоречие, алгоритм не делает как захочет, а как напишут. Без корреляции с желаниями.

 

А чего бы Вам у авторов спросить?

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
One Click Close The script allows users to easily close positions if their profit/loss reaches or exceeds a value specified in pips. Please set slippage value first. Sometimes some positions do not close due to high volatility of the market. Please set larger slippage or restart the script. The free demo version is: ...
Причина обращения: