Самообучение языку MQL5 с полного нуля - страница 87

 
JRandomTrader #:

Основная идея - https://ru.wikipedia.org/wiki/Кольцевой_буфер , имеем массив и указатели (индексы) на голову и хвост (или только один - например, если используем для вычисления среднего, добавляя новый элемент на место самого старого, вот как в этом примере:)

спасибо)

 
MrBrooklin #:

В связи с тем, что данная тема предназначена в основном для начинающих программистов, то желательно коды сопровождать подробными комментариями, чтобы они понимали о чём идёт речь. Подчеркиваю, не ОБЯЗАТЕЛЬНО, а ЖЕЛАТЕЛЬНО. Всем за ранее спасибо!

С уважением, Владимир.

Вроде, всё достаточно прозрачно, но если что-то надо пояснить, готов.

 
JRandomTrader #:

Вроде, всё достаточно прозрачно, но если что-то надо пояснить, готов.

Это не для меня лично, а для тех новичков, которые иногда заходят или ещё будут заходить в данную тему. Если, конечно, это Вам не трудно будет сделать! ))

С уважением, Владимир.

 

Всем доброго дня и хорошего настроения!

Продолжаю самообучение. Решил написать скрипт, который определяет - есть ли в окне "Обзор рынка" те символы, которые были заданы мною во входных параметрах. Вот код:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
input string Symb_1="EURUSDrfd";        //Символ 1
input string Symb_2="GBPUSDrfd";        //Символ 2
input string Symb_3="AUDUSDrfd";        //Символ 3
input string Symb_4="NZDUSDrfd";        //Символ 4
input string Symb_5="AUDCHFrfd";        //Символ 5
input string Symb_6="USDCHFrfd";        //Символ 6
input string Symb_7="EURCHFrfd";        //Символ 7
input string Symb_8="GBPCHFrfd";        //Символ 8
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
// объявим переменную для хранения количества символов выбранных в MarketWatch
   int symb_total=SymbolsTotal(true);
   for(int i=0; i<symb_total; i++) // переберём символы выбранные в MarketWatch
     {
      // объявим переменную для хранения имён символов выбранных в MarketWatch
      string symb_name=SymbolName(i, true);
      // объявим и инициализируем массив для хранения имён символов выбранных в MarketWatch
      string arr_symb_name[]= {symb_name};
      // получим количество элементов массива arr_symb_name[]
      int arr_size=ArraySize(arr_symb_name);
      // объявим и инициализируем массив для хранения имён символов заданных во входных параметрах
      string arr_symb_name_input[]= {Symb_1,Symb_2,Symb_3,Symb_4,Symb_5,Symb_6,Symb_7,Symb_8};
      // получим количество элементов массива arr_symb_name_input[]
      int size_symb_input=ArraySize(arr_symb_name_input);
      if(arr_symb_name[arr_size-1]==arr_symb_name_input[size_symb_input-1])
         Print(arr_symb_name_input[size_symb_input-1]);
     }
  }
//+------------------------------------------------------------------+

По моей задумке должны быть выведены на печать все 8 символов, заданных во входных параметрах, из 41 символа, находящихся в окне "Обзор рынка" (они там есть), а выводится только один символ:

2023.12.08 14:41:24.660 10 (EURUSDrfd,M1)       GBPCHFrfd

Помогите понять, где ошибка!

С уважением, Владимир.

 
MrBrooklin #:

Всем доброго дня и хорошего настроения!

Продолжаю самообучение. Решил написать скрипт, который определяет - есть ли в окне "Обзор рынка" те символы, которые были заданы мною во входных параметрах. Вот код:

По моей задумке должны быть выведены на печать все 8 символов, заданных во входных параметрах, из 41 символа, находящихся в окне "Обзор рынка" (они там есть), а выводится только один символ:

Помогите понять, где ошибка!

С уважением, Владимир.

Для 41 итерации принтовал бы на каждой итерации и смотрел. Дешево и сердито.) 
 
Какой сложный код, можно голову сломать ))
Имхо, если по-простому, то нужно:
1) собрать в массив все инпуты;
2) создать 2 цикла for, где второй будет вложенным;
3) в первом for перебираем символы из Обзора, а во втором - из массива инпутов;
4) на итерациях сравниваем имена функцией ::StringCompare().

Из уважения к Владимиру специально не пишу код, чтобы автор вопроса подумал ))
 
Valeriy Yastremskiy #:
Для 41 итерации принтовал бы на каждой итерации и смотрел. Дешево и сердито.) 

Привет, Валерий! Спасибо, попробую. ))

С уважением, Владимир.

 
Denis Kirichenko #:
Какой сложный код, можно голову сломать ))
Имхо, если по-простому, то нужно:
1) собрать в массив все инпуты;
2) создать 2 цикла for, где второй будет вложенным;
3) в первом for перебираем символы из Обзора, а во втором - из массива инпутов;
4) на итерациях сравниваем имена функцией ::StringCompare().

Из уважения к Владимиру специально не пишу код, чтобы автор вопроса подумал ))

Спасибо за подсказку, Денис! Код мне и не нужен. Нужно направление, куда смотреть и над чем думать. А код такой сложный только потому, что бывшие электронщики не ищут легкий путей! Шутка! ))

Кстати, пытался написать решение через цикл в цикле, но что-то пошло не так. )

С уважением, Владимир.

 
MrBrooklin #:

Спасибо за подсказку, Денис! Код мне и не нужен. Нужно направление, куда смотреть и над чем думать. А код такой сложный только потому, что бывшие электронщики не ищут легкий путей! Шутка! ))

Кстати, пытался написать решение через цикл в цикле, но что-то пошло не так. )

С уважением, Владимир.

Если только для символов из "обзора рынка", то можно было в одном цикле запросить любое свойство символа (например имя).

string name;

if (SymbolInfoString(SymbolName,SYMBOL_NAME,name) && name!=NULL && name!="") {

PrintSymbol("Symbol %s was found",SymbolName);

}

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

Проход по базе нужен только если символ не выбран

 
Maxim Kuznetsov #:

Если только для символов из "обзора рынка", то можно было в одном цикле запросить любое свойство символа (например имя).

string name;

if (SymbolInfoString(SymbolName,SYMBOL_NAME,name) && name!=NULL && name!="") {

PrintSymbol("Symbol %s was found",SymbolName);

}

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

Проход по базе нужен только если символ не выбран

Добрый вечер, Максим! За подсказку спасибо. Попробую разобраться и реализовать скрипт, используя Ваш вариант.

С уважением. Владимир.

Причина обращения: