продолжу...
задумал преобразовать строки этого примера:
if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)
if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)
в алгоритм:
1) два массива:
первый содержит m_method_fast и m_method_slow
второй значения перечисление ENUM_MA_METHOD.
2) В цикле взяв значение первого массива, проверить нахождение во втором.
Подскажите, как это реализовать?
Понял, что нужно подключать CArray . Только какого типа?
Кто может, напишите, пожалуйста, часть кода, т.к. элементарные базовые вещи, а с синтаксисом пока уловить не могу.
Спасибо!

- www.mql5.com
продолжу...
задумал преобразовать строки этого примера:
if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)
if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)
в алгоритм:
1) два массива:
первый содержит m_method_fast и m_method_slow
второй значения перечисление ENUM_MA_METHOD.
2) В цикле взяв значение первого массива, проверить нахождение во втором.
Подскажите, как это реализовать?
Понял, что нужно подключать CArray . Только какого типа?
Кто может, напишите, пожалуйста, часть кода, т.к. элементарные базовые вещи, а с синтаксисом пока уловить не могу.
Спасибо!
Как-то так:
func(int& array1[],int& array2[]) { int total1=ArraySize(array1); int total2=ArraySize(array2); //--- for(int i=0;i<total1;i++) { for(int j=0;j<total2;j++) { if(array1[i]==array2[j]) { // нашел } } } }
да, до этого уже дотопал в С++ для начинающих :-)
Вот только там нет такого типа данных ENUM_MA_METHOD
как узнать, из какого типа данных состоит это перечисление? Возможен ли циклический обход непосредственно самого перечисления ENUM_MA_METHOD?
сейчас вижу два пути:
//первый способ описать оба массива ENUM_MA_METHOD l_array_enum_ma_method[3]; l_array_enum_ma_method[0]=MODE_SMA; l_array_enum_ma_method[1]=MODE_EMA; l_array_enum_ma_method[2]=MODE_SMMA; l_array_enum_ma_method[3]=MODE_LWMA; print("array size %d", ArraySize(l_array_enum_ma_method)); print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD)); ENUM_MA_METHOD l_array_select_method[1]; l_array_select_method[0]=m_MethodFast; l_array_select_method[1]=m_MethodSlow; //далее по схеме //второй способ, подключить библиотеку //#include <Arrays\ArrayInt.mqh> CArrayInt *l_array_enum_ma_method=new CArrayInt; l_array_enum_ma_method[0]=MODE_SMA; l_array_enum_ma_method[1]=MODE_EMA; l_array_enum_ma_method[2]=MODE_SMMA; l_array_enum_ma_method[3]=MODE_LWMA; l_array_enum_ma_method.Sort(); //--- search element if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found"); else printf("Element not found"); //--- delete array delete l_array_enum_ma_method;
во втором способе нужно подключить библиотеку конкретного типа, а что это за тип такой ENUM_MA_METHOD?
хм.. странно, нажимал ответить, а получилось новым сообщением...
да, до этого уже дотопал в С++ для начинающих :-)
Вот только там нет такого типа данных ENUM_MA_METHOD
как узнать, из какого типа данных состоит это перечисление? Возможен ли циклический обход непосредственно самого перечисления ENUM_MA_METHOD?
сейчас вижу два пути:
во втором способе нужно подключить библиотеку конкретного типа, а что это за тип такой ENUM_MA_METHOD?
хм.. странно, нажимал ответить, а получилось новым сообщением...
Первый способ:
ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA}; //--- далее по тексту
Второй способ:
#include <Arrays\ArrayInt.mqh> CArrayInt l_array_enum_ma_method; //--- l_array_enum_ma_method.Add(MODE_SMA); l_array_enum_ma_method.Add(MODE_EMA); l_array_enum_ma_method.Add(MODE_SMMA); l_array_enum_ma_method.Add(MODE_LWMA); //--- далее по тексту
Никак сообразить не могу, для чего столько телодвижений?
ой.. приспасибо прибольшое, это как раз пытаюсь сделать.. офф.
В первом случае уже видел такой способ записи, но еще не осознал нужное,
по-второму - сбился на ArrayInt. Подумалось раз Int, значит хранится значение только число, но ,
видимо, MODE_SMA компилятор как раз и преобразует в число, а при обратном получении значения, нужно будет выполнить неявное преобразование (с помощью круглых скобок) к типу (ENUM_MA_METHOD), т.е. нечто, аналогичное
ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
P.S. В третьем разделе 3. Методы для установки параметров, дума
ется, надо стереть преждевременно объявленные строчки:
CiCustom m_fast_ma; // индикатор в виде объекта CiCustom m_slow_ma; // индикатор в виде объекта
P.S. В третьем разделе 3. Методы для установки параметров, думается, надо стереть преждевременно объявленные строчки:
вот уже совсем обрадовался, и вот такую штуку не могу обойти (комм - это вычитал о передаче адресов на память, но так тоже не сработало):
компилятор возвращает ошибку 'm_MethodFast' - constant expression required, ' m_MethodSlow' - constant expression required
конечно, вопросы чайника. может где в другой ветке такое надо спрашивать? чтобы по статье не засорять?
//первый способ описать оба массива //int *Finger_m_MethodFast; //int *Finger_m_MethodSlow; //Finger_m_MethodFast=&m_MethodFast; //Finger_m_MethodFast=&m_MethodSlow; // int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast}; ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow}; ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA}; int total_array1=ArraySize(l_array1_select_method); int total_array2=ArraySize(l_array2_enum_ma_method); bool NoErrorsFlag=false; for(int i_array1=0;i_array1<total_array1;i_array1++) { for(int i_array2=0;i_array2<total_array2;i_array2++) { if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2]) { NoErrorsFlag=true; } } if(!NoErrorsFlag) { PrintFormat("Недопустимый тип сглаживания %s скользящей средней!",EnumToString(l_array1_select_method[i_array1])); } } if(!NoErrorsFlag) { return(false); }

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Создай торговый робот за 6 шагов!:
Вы не знаете как устроены торговые классы и пугаетесь слов "Объектно-ориентированное программирование"? На самом деле вовсе не обязательно всё это знать, чтобы написать свой собственный модуль торговых сигналов - достаточно следовать простым правилам. Всё остальное сделает Мастер MQL5 и вы получите готовый торговый робот!
Автор: MetaQuotes