ademen Опубликовано 19 ноября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 19 ноября, 2021 1 час назад, DUBROV сказал: PS: доступа к коду торгующего советника нет. С этого надо было и начинать, коллега, более ясно какая у вас проблема. 1 час назад, DUBROV сказал: А команды, чтобы из одного советника выгрузить параметры другого в *.set-файл и потом загрузить отредактированные обратно, есть? Можете пробовать сделать через DLL на 90% уверен что это можно сделать, например через WinApi открываете свойства нужного советника, и подсовываете ему нужный сет файл. Но скорее всего это будет ненадежно. Так же можете открывать новый шаблон/профиль с закрытием старого. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DUBROV Опубликовано 21 ноября, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 ноября, 2021 В 19.11.2021 в 22:13, ademen сказал: С этого надо было и начинать, коллега, более ясно какая у вас проблема. Можете пробовать сделать через DLL на 90% уверен что это можно сделать, например через WinApi открываете свойства нужного советника, и подсовываете ему нужный сет файл. Но скорее всего это будет ненадежно. Так же можете открывать новый шаблон/профиль с закрытием старого. Благодарю!!! Показали определённое направление выхода из тупика. Будем развиваться, осваивать новое, копать дальше. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
diodio Опубликовано 17 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 декабря, 2021 Доброго времени. Такой вопрос, советник работает по индикаторам, есть индикатор, при сигнале которого ордер должен закрыться на следующей свече, если прописываем сдвиг. Да, он закрывается если ордер в плюсе, но иногда бывают моменты когда ордер в минусе и индикатор сигнализирует закрытие, но ордер в этом случае не закрывается. Вопрос почему? Сигнал на закрытие есть, ну да, он в минусе, но минус то растет, и ему бы лучше закрыться при сигнале. Можно что-то добавить в код чтоб закрытие при минусе и по сигналу было принудительным? Может цикл спасет из нескольких проходов? А то цикл работает один раз и все, ордер то один выставляется. Ссылка на сообщение Поделиться на другие сайты More sharing options...
ademen Опубликовано 17 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 декабря, 2021 2 часа назад, diodio сказал: Да, он закрывается если ордер в плюсе, но иногда бывают моменты когда ордер в минусе и индикатор сигнализирует закрытие, но ордер в этом случае не закрывается. Вопрос почему? Без кода тяжело что то подсказать. Есть ошибки в журнале при попытке закрыть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 22 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 декабря, 2021 Помогите пожалуйста, пишу вот индикатор и не получается написать код. Мне нужно взять отрезок на графике что бы индикатор посчитал разность high и low каждой свечи на данном отрезке и затем дал среднее арифметическое. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 22 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 декабря, 2021 4 часа назад, Гладиoлус сказал: Помогите пожалуйста, пишу вот индикатор и не получается написать код. Мне нужно взять отрезок на графике что бы индикатор посчитал разность high и low каждой свечи на данном отрезке и затем дал среднее арифметическое. int RangePeriod = 100; //считаем по 100 последним барам double high = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, RangePeriod)); double low = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, RangePeriod)); double range = high - low; Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 4 часа назад, Rigal сказал: double range = high - low; @Rigal, не осилил цикл дописать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 8 часов назад, Rigal сказал: int RangePeriod = 100; //считаем по 100 последним барам double high = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, RangePeriod)); double low = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, RangePeriod)); double range = high - low; спасибо большое но все равно не получается( Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link #property version "1.00" #property strict extern int BarCountOpen = 10; //Меняем значение при добавлении extern int BarCountClose = 10; //Меняем значение при добавлении extern int КолвоСвечей = 1; //Меняем значение при добавлении double minprice = 999999, mp, maxprice = -999999, range, total; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { GetMaxPrice(); GetMinPrice(); GetMiddleCount(); Comment("MinPrice: " + DoubleToStr(minprice) + "\n" + "MaxPrice: " + DoubleToStr(maxprice) + "\n" + "MiddleCount: " + DoubleToStr(range) + "\n" + DoubleToStr(total)); } //+------------------------------------------------------------------+ void GetMinPrice() { for (int i = BarCountOpen; i < BarCountClose; i++) { mp = iLow(Symbol(), PERIOD_CURRENT, i); if (mp < minprice) minprice = mp; } return; } //+------------------------------------------------------------------+ void GetMaxPrice() { for (int i = BarCountOpen; i < BarCountClose; i++) { mp = iHigh(Symbol(), PERIOD_CURRENT, i); if (mp > maxprice) maxprice = mp; } return; } //+------------------------------------------------------------------+ void GetMiddleCount() { for (int i = BarCountOpen; i < BarCountClose; i++) { int RangePeriod = i; //считаем по 100 последним барам double high = iHigh(Symbol(), Period(), iHighest(Symbol(), Period(), MODE_HIGH, i)); double low = iLow(Symbol(), Period(), iLowest(Symbol(), Period(), MODE_LOW, i)); range = high - low; total = range/КолвоСвечей; } return; } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 Я хочу задать период например с 20 свечи по 45 и в этом периоде посчитать сумму всех high а затем сумму всех low затем суммаhigh - суммаlow = total, и в конечном итоге total поделить на количество свечей. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 17 минут назад, Гладиoлус сказал: спасибо большое но все равно не получается( extern int StartBar = 1; extern int CountBars = 100; double GetMiddleSize() { double total = 0.0; for (int i = StartBar; i < StartBar + CountBars; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar double high = iHigh(Symbol(), Period(), i); double low = iLow(Symbol(), Period(), i); double range = high - low; total += range; } return(total/CountBars); } По-моему все решали разные задачи Изменено 23 декабря, 2021 пользователем usver73 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 1 час назад, usver73 сказал: extern int StartBar = 1; extern int CountBars = 100; double GetMiddleSize() { double total = 0.0; for (int i = StartBar; i < StartBar + CountBars; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar double high = iHigh(Symbol(), Period(), i); double low = iLow(Symbol(), Period(), i); double range = high - low; total += range; } return(total/CountBars); } По-моему все решали разные задачи к сожаление работает не корректно, неправильно значение выдает Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 3 минуты назад, Гладиoлус сказал: к сожаление работает не корректно, неправильно значение выдает слишком мало информации.ю Вставьте Print, задайте стартовое значение-1, количество 2, посчитайте калькулятором, сравните с расчетным значением... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 31 минуту назад, usver73 сказал: слишком мало информации.ю Вставьте Print, задайте стартовое значение-1, количество 2, посчитайте калькулятором, сравните с расчетным значением... я вот тоже хотел сказать: "не работает", "работает неправильно" - это так себе формулировка проблемы. Но если следовать ТЗ вот тут 2 часа назад, Гладиoлус сказал: Я хочу задать период например с 20 свечи по 45 и в этом периоде посчитать сумму всех high а затем сумму всех low затем суммаhigh - суммаlow = total, и в конечном итоге total поделить на количество свечей. то, вот так: extern int StartBar = 1; extern int CountBars = 100; double GetMiddleSize() { double sumHigh = 0.0; double sumLow = 0.0; for (int i = StartBar; i < StartBar + CountBars; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar sumHigh += iHigh(Symbol(), Period(), i); sumLow += iLow(Symbol(), Period(), i); } return((sumHigh - sumLow)/CountBars); } Исторические значения могут быть недоступны, начиная с некоторого индекса (настройки терминала). В идеале нужно проверять каждый полученный iHigh и iLow на > DBL_EPSILON и != EMPTY_VALUE и если оно не проверилось - тут же возвращать, например, EMPTY_VALUE, или ноль. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 46 минут назад, usver73 сказал: слишком мало информации.ю Вставьте Print, задайте стартовое значение-1, количество 2, посчитайте калькулятором, сравните с расчетным значением... А, все, спасибо, получилось Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 23 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 декабря, 2021 6 минут назад, Rigal сказал: я вот тоже хотел сказать: "не работает", "работает неправильно" - это так себе формулировка проблемы. Но если следовать ТЗ вот тут то, вот так: extern int StartBar = 1; extern int CountBars = 100; double GetMiddleSize() { double sumHigh = 0.0; double sumLow = 0.0; for (int i = StartBar; i < StartBar + CountBars; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar sumHigh += iHigh(Symbol(), Period(), i); sumLow += iLow(Symbol(), Period(), i); } return((sumHigh - sumLow)/CountBars); } Исторические значения могут быть недоступны, начиная с некоторого индекса (настройки терминала). В идеале нужно проверять каждый полученный iHigh и iLow на > DBL_EPSILON и != EMPTY_VALUE и если оно не проверилось - тут же возвращать, например, EMPTY_VALUE, или ноль. Вот как, понял, спасибо большое. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 21 час назад, Rigal сказал: я вот тоже хотел сказать: "не работает", "работает неправильно" - это так себе формулировка проблемы. Но если следовать ТЗ вот тут то, вот так: extern int StartBar = 1; extern int CountBars = 100; double GetMiddleSize() { double sumHigh = 0.0; double sumLow = 0.0; for (int i = StartBar; i < StartBar + CountBars; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar sumHigh += iHigh(Symbol(), Period(), i); sumLow += iLow(Symbol(), Period(), i); } return((sumHigh - sumLow)/CountBars); } Исторические значения могут быть недоступны, начиная с некоторого индекса (настройки терминала). В идеале нужно проверять каждый полученный iHigh и iLow на > DBL_EPSILON и != EMPTY_VALUE и если оно не проверилось - тут же возвращать, например, EMPTY_VALUE, или ноль. А можно ли сделать так что бы ввел дату и время свечи начала отрезка и конца отрезка и из этого отрезка производился подсчет тот же что и выше? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 или же на графике провести трендовую линию от одной свечи к другой и за этот промежуток индикатор посчитал (ну это будет уже в идеале). Я кстати пытался сделать это с помощью OBJ_TREND но что то ничего не получилось Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern datetime OpenDate=D'2021.12.01 00:00'; extern datetime CloseDate=D'2021.12.31 00:00'; extern int Amount = 19; double sumHigh; double sumLow; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { int StartBar = 1; int CountBars = 100; GetMiddleSize(); Comment((sumHigh - sumLow)/Amount); } //+------------------------------------------------------------------+ double GetMiddleSize() { sumHigh = 0.0; sumLow = 0.0; for (int i = CloseDate; i < OpenDate; i++) { //int RangePeriod = i; //считаем по CountBars начиная с StartBar sumHigh += iHigh(Symbol(), Period(), i); sumLow += iLow(Symbol(), Period(), i); } return((sumHigh - sumLow)/Amount); } //+------------------------------------------------------------------+ Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 вот я вместо StartBar и CountBar вписал datetime но к сожалению выдает ошибку Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 10 минут назад, Гладиoлус сказал: вот я вместо StartBar и CountBar вписал datetime но к сожалению выдает ошибку даты, конечно, не заменяют простой счетчик. Функции iHigh и iLow принимают номер бара, не дату. Вам нужно превратить даты в номера баров. Для этого есть метод iBarShift Но вообще у меня складывается впечатление, что вам бы пригодился базовый курс по программированию. На любом языке. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 7 минут назад, Rigal сказал: даты, конечно, не заменяют простой счетчик. Функции iHigh и iLow принимают номер бара, не дату. Вам нужно превратить даты в номера баров. Для этого есть метод iBarShift Но вообще у меня складывается впечатление, что вам бы пригодился базовый курс по программированию. На любом языке. Безмерно благодарен, даа так и есть, знания по программированию у меня совсем скудные к сожалению. НО это пока что) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 5 минут назад, Гладиoлус сказал: Безмерно благодарен, даа так и есть, знания по программированию у меня совсем скудные к сожалению. НО это пока что) ну вот здесь в ветке есть видеоуроки, например Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 14 минут назад, Rigal сказал: ну вот здесь в ветке есть видеоуроки, например Да я вот смотрю 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гладиoлус Опубликовано 24 декабря, 2021 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 декабря, 2021 2 часа назад, Rigal сказал: ну вот здесь в ветке есть видеоуроки, например Извиняюсь что опять беспокою вас но вот не могу решить последнюю проблему, индикатор все четко отображает и вычисляет, все устраивает но вот на золоте и серебре он не работает, не могу понять причину. Даже на биткойне все отображает и вычисляет Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти