Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

как мы можем всунуть shift в bool переменную????Я такого ни где не видел, и мы ее уже объявляли??

это-ж не переменная, а функция и в её параметры можете передавать что хотите, например:
bool если_больше ( int число1, int число2 ) { return ( число1 > число2 ); }

не знаю насчёт объявления shift... Но если смещение стабильно, то выведи его во внешние настройки:
extern int shift = 3;
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

ок про функции вообще огромный респект)
А вот про extern int shift = 3; я уже пробовал
//возвращает данные DN буфера
double Reds(shift) { return( iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, shift) ); }
//возвращает данные UP буфера
double Greens(shift) { return( iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, shift) ); }

bool SellSignal(shift)
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)
bool BuySignal(shift)
{return(Greens(shift)>0 && Greens(shift)0 && Reds(shift+1)
Выдает ошибки : 'shift' - declaration without type
'SellSignal' - wrong parameters count
Что то в гугле так и не нашел как их исправить?




Добавлено: 25-07-2017 08:23:37

Может shift надо привести в нормальный вид, но это просто сдвиг, что в нем не так то? Изменено пользователем d1w4m3
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Изучила весь курс программирования MQL4. Сделала почти все задания.
Уникальный материал, больше такого в сети не попадалось. Пишу простенькие совы.
Очень мало информации по индикаторам. Подскажите в общих чертах:

1. Как перекрашивать бары в другой цвет?
2. Как рисовать прямоугольники?
3. Как над баром вывести текстовую информацию, например цену открытия.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
d1w4m3 при объявлении функции надо писать тип параметра, а при вызове - просто переменную, например:
double Reds( int sh ) { ... }, при вызове можно Reds( shift ) или
потом:
bool SellSignal( sh )
{return(Reds( sh ) > ... }

Nicole White цвет в индикаторах МТ4 делается с помощью разных буферов. Один буфер красный, другой жёлтый, нужный момент красный обнуляется, а жёлтый продолжает линию и наоборот.
Так-же есть несколько типов графических объектов, в том числе прямоугольники и лейблы для отображения текста. Я не спец в графике - может кто-то развёрнуто подскажет. Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите, пожалуйста, как написать условие. Есть два стрелочных индикатора. Так вот, когда один подает сигнал, то по второму входить можно только в течение 10-ти баров.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Подскажите, пожалуйста, как написать условие. Есть два стрелочных индикатора. Так вот, когда один подает сигнал, то по второму входить можно только в течение 10-ти баров.

Логика такая: Появился сигнал инд.1 - присваиваем счётчику i=10, далее на каждом баре вычитаем i--. Далее если при i> 0 появляется сигнал инд.2 - вход, если снова инд.1 - обновляем счётчик.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Утро доброе)
Работает, но опять открывает и бай и селл)
double Reds(int sh)
{double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,shift); return(buf);}
double Greens(int sh)
{double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, shift); return(buf);}
bool SellSignal()
{return(Reds(shift) > 0 && Reds(shift)0 && Greens(shift+1)bool BuySignal()
{return(Greens(shift)>0 && Greens(shift)0 && Reds(shift+1)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
d1w4m3 так это-ж хорошо! :d
В Reds(int sh) вроде должен sh использовать, а пишешь shift
в сигнальных параметра нет, но shift используешь - он глобальный и не меняется?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

================Вопрос К Программистам==========

Скажите реально ли сделать такую примочку - собрать историю изменения спреда в течении суток в реальном времени за период, например 1 месяц, сохранить ее в файл, определить среднее значения по всем дням и часам, затем прикрутить ее к советнику, чтобы он брал эту историю спреда из файла и основывался на ней при оптимизиции, а в тестере MT4 выставить значение 0?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

))))как вы говорите, если сделать, то я логически просто не могу прочитать что мы тут делаем)
extern int shift = 3;
double Reds(int sh)
{double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,shift); return(buf);}
double Greens(int sh)
{double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, shift); return(buf);}
bool SellSignal(sh)
{return(Reds(sh) > 0 && Reds(sh)0 && Greens(sh+1)bool BuySignal(sh)
{return(Greens(sh)>0 && Greens(sh)0 && Reds(sh+1)Выдает 'sh' - declaration without type
'SellSignal' - wrong parameters count
'BuySignal' - wrong parameters count Честно вообще понятия не имею что это и с чем его есть))



Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

не напрягайся...
когда передаёшь параметр в функцию он должен иметь размер, чтоб система выделила под него память. Вызов SellSignal(sh) - параметр без размера, нужно добавить int.
Здесь правильный вызов Reds(int sh), но параметр не применяется внутри функции - там остался shift, это не критично. т.к. shift - глобальная переменная. но это может создать хаос в случае дальнейшей модификации программы.
ПС: это не избавит от открытия и бай и селл, нужно ставить принты и смотреть как отрабатывают условия, например:
double Reds(int sh)
{double buf = iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1,sh); Print("

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

имхо реально, но в советнике придётся увеличивать дистанции при открытии/закрытии ордеров на величину спреда.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


имхо реально, но в советнике придётся увеличивать дистанции при открытии/закрытии ордеров на величину спреда.



Насколько в таком случае будут объективны результаты оценки ТС? Насколько я знаю имитировать плавающий спред может программа TDS, но там не учитывается фактор времени, то есть TDS повышает и понижает спред с заданным шагом и делает это хоатично, при этом не учитываются торговые часы, время выхода новостей, торговые сессии, ролловер и т.д, что может исказить реальные результаты, а если собрать историю изменения спреда по дням недели и часам самому на длинном участке времени, скажем несколько месяцев и определить среднее значение, то результаты оценки ТС с учетом спреда были бы более объективны так как спред в большинстве случаев начинает скакать в одно и то же время, примерно в одинаковом диапазоне, и по одним и тем же причинам или я не прав?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
izeran6565, TDS2 сохраняет и использует реальные спрэды тех же дукасов, разные в разное время - никакого хаоса.
С реальными спрэдами, насколько слышал, и часть котировок Альпари.
Есть тьма статей на тему как тестировать с реальными спрэдами.
Имхо, вместо адекватных тестов вы выдумываете никому не нужные костыли.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


izeran6565, TDS2 сохраняет и использует реальные спрэды тех же дукасов, разные в разное время - никакого хаоса.
С реальными спрэдами, насколько слышал, и часть котировок Альпари.
Есть тьма статей на тему как тестировать с реальными спрэдами.
Имхо, вместо адекватных тестов вы выдумываете никому не нужные костыли.



Честно говоря не встречал не одной статьи, которая бы полностью раскрывала тему тестирования советников с реальным спредом, именно с реальным, чтобы он соответствовал времени и не был фиксированным как в MT4, когда один и тот же заданный спред используется повсеместно, советник строчит сделки даже в ролловер, когда не один нормальный советник не открылся бы, до этого использовал дневные советники, на спред особого внимания не обращал, сейчас начал интересоваться ночной торговлей, возникла проблема со спредом, нашел только одно решение, это TDS, но там лицензия дается только на один ПК, чтобы установить на другой, нужно приобретать еще одну, у меня например несколько старых ноутбуков, которые я использую как хранилище, а так же для оптимизации роботов, не хочется платить за одну и ту же прогу несколько раз, еще и за ежемесячную поддержку, поэтому начал искать альтернативу, функционал не важен, самое главное для меня это не фиксированный спред связанный со временем и приближенный к реальности, чтобы вы посоветовали?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


TDS стоит смешные деньги, покупаете на один ПК и пользуйтесь сколько пожелаете.



На один ПК это ладно, а если их несколько? На одном ПК у меня оптимизация некоторых роботов может длиться больше месяца, поэтому я использую старые ноутбуки, разбиваю параметры на группы и ставлю их оптить все одновременно, чтобы сократить время оптимизации, то есть для моих целей мне придется покупать несколько ключей к TDS? Мне было бы гораздо проще и дешевле заказать программисту ту примочку о которой я написал в шапке темы и которую назвали никому не нужным костылем, и гонять ее на импортированных котировках 99% в тестере MT4, отдав те же 100$ программисту за написание один раз, чем отдать за TDS 600$ + за ежемесячную поддержку раз месяц, результаты пусть будут не такие достоверные, но зато максимально приближенные к реальности или я не прав? Изменено пользователем izeran6565
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

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

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
izeran6565, а ничего, что оптить со спрэдами на шару вы сможете года через 3 - после того, как лично соберете реальные котиры всех нужных вам пар на всех нужных вам брокерах?!
А ближайшие пару лет опту/тестам ни-ни?!
При том, что за 3 года круглосуточной включенности для сбора котиров ваша коллекция старых ноутбуков как раз Богу душу и отдаст!
И даже после этого вы не сможете тестить всех ботов, в код которых нельзя будет воткнуть понимание этой приблуды.

я понимаю вашу попытку за сотку баксов решить проблему на пару штук.
но вам нужен нормальный сервер для опта, в котором вы сможете за часы вместо месяцев комплексно оптить все параметры ботов на правильных котирах единственной копии TDS2.

Вы ж должны знать сколько денег стоит время и что ваши развлечения с оптом на старых ноутах эквивалентны потерям прибыли от всего, как минимум, за столько же месяцев...
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


1. Как перекрашивать бары в другой цвет?
2. Как рисовать прямоугольники?
3. Как над баром вывести текстовую информацию, например цену открытия.


1) Функция ChartSetInteger, свойства CHART_COLOR_CHART_UP и CHART_COLOR_CHART_DOWN (меняются, естественно, цвета всех баров графика - назначить цвет отдельного бара можно только в MQL5)
2) ObjectCreate, тип объекта OBJ_RECTANGLE
3) ObjectCreate, тип объекта OBJ_TEXT, в качестве точки привязки к графику использовать время и цену соответствующего бара. В общем, подружитесь с документацией, и вам откроется тайна тайн.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


1) Функция ChartSetInteger, свойства CHART_COLOR_CHART_UP и CHART_COLOR_CHART_DOWN (меняются, естественно, цвета всех баров графика - назначить цвет отдельного бара можно только в MQL5)
2) ObjectCreate, тип объекта OBJ_RECTANGLE
3) ObjectCreate, тип объекта OBJ_TEXT, в качестве точки привязки к графику использовать время и цену соответствующего бара. В общем, подружитесь с документацией, и вам откроется тайна тайн.



Спасибо!
Бары перекрашиваю DRAW_HISTOGRAM, а вот с объектами предстоит разобраться.
Помогает смотреть коды встроенных в терминал индюков, но именно по моим вопросам примеров мало, поэтому ковыряю инфу по крупицам.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте коллеги! Помогите пожалуйста решить проблему с функцией "Безубытка". При тестировании, терминал выбивает ошибку OrderModify error 130. Буду признателен за любую помощь.


void BU()
{
for(int i=0; i {
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice() {
if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrGreen))
Print ("Проблема параметров БУ!");
}
}

if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel)*Point)
{
if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrGreen))
Print ("Проблема параметров БУ!");
}
}
}
}
}

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...