Посмотреть код можно в исходнике. Для поиска дивергенции используются два метода:
1. Метод bool CSignalMACD::ExtState(int ind) - подготавливает данные для поиска;
2. Метод bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - ищет рыночную модель с указанными параметрами.
Если поможет, вот комментарии к методам на русском языке:
Для метода bool CSignalMACD::ExtState(int ind)
Для метода bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)
У меня тоже вопрос - как при создании советника с использованием сигнала по MACD указать именно вариант с дивергенцией? В справочнике дается несколько вариантов сигналов.
strelec: У меня тоже вопрос - как при создании советника с использованием сигнала по MACD указать именно вариант с дивергенцией? В справочнике дается несколько вариантов сигналов.
Как все уже заметили, любой сигнал может обнаруживать несколько рыночных моделей. Для управления использованием моделей вызывайте метод PatternsUsage(int value), где value - битовая карта использования моделей (номер бита и номер модели совпадают). Бит равен 1 - модель используется, бит равен 0 - модель не используется (по-умолчанию все биты равны 1). Нумерация моделей как и битов начинается с 0.
Таким образом, если Вы хотите использовать только дивергенцию нужно использовать PatternsUsage(16);. Почему 16? 16 в двоичном виде 10000b (то есть бит 4 равен 1, остальные биты равны 0). А как раз model 4 "divergence of the oscillator and price".
Единственное "но", это придётся сделать "ручками".
После завершения работы Мастера, в редакторе откроется исходник. Найдите в нёт примерно такое место:
Как все уже заметили, любой сигнал может обнаруживать несколько рыночных моделей. Для управления использованием моделей вызывайте метод PatternsUsage(int value), где value - битовая карта использования моделей (номер бита и номер модели совпадают). Бит равен 1 - модель используется, бит равен 0 - модель не используется (по-умолчанию все биты равны 1). Нумерация моделей как и битов начинается с 0.
Таким образом, если Вы хотите использовать только дивергенцию нужно использовать PatternsUsage(16);. Почему 16? 16 в двоичном виде 10000b (то есть бит 4 равен 1, остальные биты равны 0). А как раз model 4 "divergence of the oscillator and price".
Единственное "но", это придётся сделать "ручками".
После завершения работы Мастера, в редакторе откроется исходник. Найдите в нёт примерно такое место:
и добавьте одну строчку
filter0.PatternsUsage(16);
получится:
Пока это всё. Если будут вопросы, обращайтесь.
Спасибо. Получилось. И сразу возникли еще вопросы. В этом варианте дивергенции какой интервал времени между соседними вершинами (впадинами) принимается в расчет?
strelec: Спасибо. Получилось. И сразу возникли еще вопросы. В этом варианте дивергенции какой интервал времени между соседними вершинами (впадинами) принимается в расчет?
Имеется эксперт с помощью которого пытаюсь разобраться с событиями.
stringevent[10]=
{
"CHARTEVENT_KEYDOWN - событие нажатия клавиатуры, когда окно графика находится в фокусе",
"CHARTEVENT_OBJECT_CREATE — событие создания графического объекта",
"CHARTEVENT_OBJECT_CHANGE — событие изменения свойств объекта через диалог свойств",
"CHARTEVENT_OBJECT_DELETE — событие удаления графического объекта",
"CHARTEVENT_CLICK — cобытие щелчка мыши графике",
"CHARTEVENT_OBJECT_CLICK — событие щелчка мыши на графическом объекте, принадлежащего графику",
"CHARTEVENT_OBJECT_DRAG — событие перемещения графического объекта при помощи мыши",
"CHARTEVENT_OBJECT_ENDEDIT — событие окончания редактирования текста в поле ввода графического объекта LabelEdit",
"CHARTEVENT_CHART_CHANGE — событие изменения графика",
"CHARTEVENT_CUSTOM+n — идентификатор пользовательского события, где n находится в диапазоне от 0 до 65535"
};
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+void OnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
Print("id=(",id,") -- ",event[id]," lparam=",lparam," dparam=",dparam," sparam=", sparam);
}
//+------------------------------------------------------------------+
Получаю не соответствующие действиям события.
Точно соответствует клик на графике и нажатие кнопки
Спорное событие id=9 (CHARTEVENT_CUSTOM) которое генерируется например при смещении графика причем потоком примерно 10 одинаковых событий.
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
В общем прошу помощи.
Вы изначально присваиваете уже назначенным числовым константам CHARTEVENT_XXXXXXXX свои числовые соответствия...
проблема вот в этом:
event[id]
нужно:
//--- нажатие мышкой на графическом объектеif(id==CHARTEVENT_OBJECT_CLICK)
{
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
//--- нажатие кнопки на клавиатуреif(id==CHARTEVENT_KEYDOWN)
{
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
К сожалению, Ваш вопрос непонятен. Что конкретно работает не так?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Некоторые ДЦ на реальных счетах именам символов присваивают всякие префиксы типа "." или "FXF".
Как мне подставлять эти префиксы?
я делал так:
#define DEF_SPEC "FXF"
string SymbolsTrade[] = {"AUDCAD"DEF_SPEC ... -так не выходит
string SymbolsTrade[] = {"AUDCAD"+DEF_SPEC ... -и так тоже не получается
в итоге вместо нужного AUDCADFXF получаю просто FXF.
Не подскажите как это реализовать?
Во первых заполнение массива перечислением возможно только в глобальной области, поэтому никакие + там не пройдут, только string константы.
Во вторых у вас не распределён статический массив, а динамический перечислением заполнять нельзя.
Проще всего написать функцию которая распределит и заполнит динамический массив, в ней можно всё, складывать дефиниции с константами итд.
Во первых заполнение массива перечислением возможно только в глобальной области, поэтому никакие + там не пройдут, только string константы.
Во вторых у вас не распределён статический массив, а динамический перечислением заполнять нельзя.
Проще всего написать функцию которая распределит и заполнит динамический массив, в ней можно всё, складывать дефиниции с константами итд.
Можно еще перебрать все валютные пары существующие в ДЦ/у БРОКЕРА и проанализировать в них составные валюты.
После чего можно составить динамический массив валютных пар с учетом добавления любых префиксов.
Насколько помню это один из универсальных вариантов для МТ5.
Во первых заполнение массива перечислением возможно только в глобальной области, поэтому никакие + там не пройдут, только string константы.
Во вторых у вас не распределён статический массив, а динамический перечислением заполнять нельзя.
Проще всего написать функцию которая распределит и заполнит динамический массив, в ней можно всё, складывать дефиниции с константами итд.
Короче, если я правильно Вас понял, то в глобальной области нельзя создать статический string массив из составных констант, да?
Посмотреть код можно в исходнике. Для поиска дивергенции используются два метода:
1. Метод bool CSignalMACD::ExtState(int ind) - подготавливает данные для поиска;
2. Метод bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start) - ищет рыночную модель с указанными параметрами.
Если поможет, вот комментарии к методам на русском языке:
Для метода bool CSignalMACD::ExtState(int ind)
Для метода bool CSignalMACD::CompareMaps(int map,int count,bool minimax,int start)
У меня тоже вопрос - как при создании советника с использованием сигнала по MACD указать именно вариант с дивергенцией? В справочнике дается несколько вариантов сигналов.
Как все уже заметили, любой сигнал может обнаруживать несколько рыночных моделей. Для управления использованием моделей вызывайте метод PatternsUsage(int value), где value - битовая карта использования моделей (номер бита и номер модели совпадают). Бит равен 1 - модель используется, бит равен 0 - модель не используется (по-умолчанию все биты равны 1). Нумерация моделей как и битов начинается с 0.
Таким образом, если Вы хотите использовать только дивергенцию нужно использовать PatternsUsage(16);. Почему 16? 16 в двоичном виде 10000b (то есть бит 4 равен 1, остальные биты равны 0). А как раз model 4 "divergence of the oscillator and price".
Единственное "но", это придётся сделать "ручками".
После завершения работы Мастера, в редакторе откроется исходник. Найдите в нёт примерно такое место:
и добавьте одну строчку
filter0.PatternsUsage(16);
получится:
Пока это всё. Если будут вопросы, обращайтесь.
Как все уже заметили, любой сигнал может обнаруживать несколько рыночных моделей. Для управления использованием моделей вызывайте метод PatternsUsage(int value), где value - битовая карта использования моделей (номер бита и номер модели совпадают). Бит равен 1 - модель используется, бит равен 0 - модель не используется (по-умолчанию все биты равны 1). Нумерация моделей как и битов начинается с 0.
Таким образом, если Вы хотите использовать только дивергенцию нужно использовать PatternsUsage(16);. Почему 16? 16 в двоичном виде 10000b (то есть бит 4 равен 1, остальные биты равны 0). А как раз model 4 "divergence of the oscillator and price".
Единственное "но", это придётся сделать "ручками".
После завершения работы Мастера, в редакторе откроется исходник. Найдите в нёт примерно такое место:
и добавьте одну строчку
filter0.PatternsUsage(16);
получится:
Пока это всё. Если будут вопросы, обращайтесь.
Спасибо. Получилось. И сразу возникли еще вопросы. В этом варианте дивергенции какой интервал времени между соседними вершинами (впадинами) принимается в расчет?
Имеется эксперт с помощью которого пытаюсь разобраться с событиями.
Получаю не соответствующие действиям события.
Точно соответствует клик на графике и нажатие кнопки
Спорное событие id=9 (CHARTEVENT_CUSTOM) которое генерируется например при смещении графика причем потоком примерно 10 одинаковых событий.
Не проверил событие CHARTEVENT_OBJECT_ENDEDIT.
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
В общем прошу помощи.
Имеется эксперт с помощью которого пытаюсь разобраться с событиями.
Получаю не соответствующие действиям события.
Точно соответствует клик на графике и нажатие кнопки
Спорное событие id=9 (CHARTEVENT_CUSTOM) которое генерируется например при смещении графика причем потоком примерно 10 одинаковых событий.
Не проверил событие CHARTEVENT_OBJECT_ENDEDIT.
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
В общем прошу помощи.
Вы изначально присваиваете уже назначенным числовым константам CHARTEVENT_XXXXXXXX свои числовые соответствия...
проблема вот в этом:
нужно:
С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.
К сожалению, Ваш вопрос непонятен. Что конкретно работает не так?