Forex EA Generator. Давайте программировать вместе.

  • Автор темы Автор темы deniking_ya
  • Дата начала Дата начала

Greicel

Интересующийся
Ошибка в вычислении возникает на бычьей свече Так как всегда выполняется условие (Open[1]-Close[1])*2 < High[1]-Open[1]. (Open[1]-Close[1])*2 - всегда отрицательное значение поэтому для бычьей свечи умножаем не на 2, а на (-2). Вот как решается.
Спасибо за помощь. У меня похоже глючил терминал, потому, что после Вашего примера блок с формулами заработал. Но есть ещё пара вопросов: 1) как реализовать запрет на открытие ордера на той же свече, на которой он был закрыт по определёному критерию, если на этой же свече сохраняется критерий для входа? 2) Как запретить открывать ордер второй раз на определённом диапазоне, если в этом диапазоне один ордер уже был открыт и закрыт? Может кто-то с этим сталкивался.
 

Altiveus

Новичок форума
Спасибо за помощь. У меня похоже глючил терминал, потому, что после Вашего примера блок с формулами заработал. Но есть ещё пара вопросов: 1) как реализовать запрет на открытие ордера на той же свече, на которой он был закрыт по определёному критерию, если на этой же свече сохраняется критерий для входа? 2) Как запретить открывать ордер второй раз на определённом диапазоне, если в этом диапазоне один ордер уже был открыт и закрыт? Может кто-то с этим сталкивался.

В архиве пример как использовать переменные в качестве фильтра.
В блоке CUSTOM CODE переменные BUYTR и SELLTR получают свои начальные значения. В блоке CUSTOM IF проводим анализ для открытия ордера (если BUYTR=1 то разрешаем следующий блок для покупок, если SELLTR=1 разрешаем для продаж). Как только наступает условие при котором происходит закрытие сделки, в блоке CUSTOM CODE\SOURCE CODE переменным присваивается новое значение, то есть если отработало условие закрытия ордера на покупку , получаем BUYTR=0 SELLTR=1, а это значит что после закрытия ордера на покупку советник будет разрешать только продажу и так до следующего закрытия ордера.
При желании данный алгоритм естественно можно привязать к другим факторам. Но думаю смысл и так понятен. Что при возникновении повторного условия для входа, там где это уже не нужно, советник проигнорирует вход.
А на счет выполнения запрета на свече ставим фильтр - вкладка FILTER2 блок ONCE PER BAR (условие вставленное после этого блока выполнится единожды на текущей свече).
 

Вложения

Последнее редактирование:

Greicel

Интересующийся
В архиве пример как использовать переменные в качестве фильтра.
В блоке CUSTOM CODE переменные BUYTR и SELLTR получают свои начальные значения. В блоке CUSTOM IF проводим анализ для открытия ордера (если BUYTR=1 то разрешаем следующий блок для покупок, если SELLTR=1 разрешаем для продаж). Как только наступает условие при котором происходит закрытие сделки, в блоке CUSTOM CODE\SOURCE CODE переменным присваивается новое значение, то есть если отработало условие закрытия ордера на покупку , получаем BUYTR=0 SELLTR=1, а это значит что после закрытия ордера на покупку советник будет разрешать только продажу и так до следующего закрытия ордера.
При желании данный алгоритм естественно можно привязать к другим факторам. Но думаю смысл и так понятен. Что при возникновении повторного условия для входа, там где это уже не нужно, советник проигнорирует вход.
А на счет выполнения запрета на свече ставим фильтр - вкладка FILTER2 блок ONCE PER BAR (условие вставленное после этого блока выполнится единожды на текущей свече).
Спасибо за пример. С CUSTOM CODE я ещё не пробовал работать. Попробую разобраться. А вот со вторым вопросом не совсем так. Я пробовал использовать блок ONCE PER BAR, но дело в том, что если ордер открыт скажем на свече CUSTOM+10, а закрыт на CUSTOM+1 и при этом сохраняется условие на вход, то происходит повторное окрытие и привязать блок ONCE PER BAR к свече CUSTOM+1 по входу не получается. Он работает если вход и выход осуществлялся на одной свече.
 

Altiveus

Новичок форума
Именно так и есть :-) . Поэтому разберитесь с CUSTOM CODE и возможностей появится в разы больше. Пока, по представленной вами информации смог предложить только то, что прописал в примере.
Почитайте о типах переменных в MQL4, без них в FEAG довольно сложно правильно и быстро реализовать алгоритм. И при компиляции в код, поглядывайте в нижнее окно OUTPUT\Source. Тоже многое доходит именно сравнением блоков с листингом программы.
 
Последнее редактирование:

Greicel

Интересующийся
Именно так и есть :-) . Поэтому разберитесь с CUSTOM CODE и возможностей появится в разы больше. Пока, по представленной вами информации смог предложить только то, что прописал в примере.
Почитайте о типах переменных в MQL4, без них в FEAG довольно сложно правильно и быстро реализовать алгоритм. И при компиляции в код, поглядывайте в нижнее окно OUTPUT\Source. Тоже многое доходит именно сравнением блоков с листингом программы.
Спасибо за советы. Остаётся пока вопрос с блоками CUSTOM CODE и CUSTOM IF. В CUSTOM CODE в Вашем примере в одном случае заполнено поле Variables, в другом случае поле Source code. В CUSTOM IF заполнено поле Expression, но есть ещё поле Variables. Для каких случаев оно?
 

Altiveus

Новичок форума
В CUSTOM CODE в поле Variables объявляются переменные которые мы будем использовать:
extern double MA_PERIOD = 12; период индикатора (нас не интересует)
extern int SELLTR = 0; (здесь объявлена переменная 0-запрещает, 1-разрешает продажи)
extern int BUYTR = 1; (здесь объявлена переменная 0-запрещает, 1-разрешает покупки)
CUSTOM IF/Expression - BUYTR == 1 здесь сова проверяет что разрешено , что нет переменной BUYTR. Если BUYTR == 1 - идём на следующий блок (там у меня наклон машки вверх или вниз проверяется).
В цепи, которая отвечает за закрытие ордера, CUSTOM CODE\Source Code меняем значения переменных на противоположные и далее закрываем открытый ордер. А раз значения переменных перевернулись, значит сова не будет открывать ещё один ордер в этом направлении (по условию 0-запрещает торговлю). Теперь должно выполнится противоположное условие для открытия ордера (противоположного предыдущему). И так по кругу. Не откроются 2 подряд ордера на продажу или покупку. Только по очереди. Сорри если непонятно объясняю. Сам в код у других подглядываю, читаю, учусь). По использованию блоков FEAG поглядываю в инструкцию англоязычную в HELPе генератора.
 
Последнее редактирование:

Greicel

Интересующийся
В CUSTOM CODE в поле Variables объявляются переменные которые мы будем использовать:
extern double MA_PERIOD = 12; период индикатора (нас не интересует)
extern int SELLTR = 0; (здесь объявлена переменная 0-запрещает, 1-разрешает продажи)
extern int BUYTR = 1; (здесь объявлена переменная 0-запрещает, 1-разрешает покупки)
CUSTOM IF/Expression - BUYTR == 1 здесь сова проверяет что разрешено , что нет переменной BUYTR. Если BUYTR == 1 - идём на следующий блок (там у меня наклон машки вверх или вниз проверяется).
В цепи, которая отвечает за закрытие ордера, CUSTOM CODE\Source Code меняем значения переменных на противоположные и далее закрываем открытый ордер. А раз значения переменных перевернулись, значит сова не будет открывать ещё один ордер в этом направлении (по условию 0-запрещает торговлю). Теперь должно выполнится противоположное условие для открытия ордера (противоположного предыдущему). И так по кругу. Не откроются 2 подряд ордера на продажу или покупку. Только по очереди. Сорри если непонятно объясняю. Сам в код у других подглядываю, читаю, учусь). По использованию блоков FEAG поглядываю в инструкцию англоязычную в HELPе генератора.
Спасибо за разъяснения. Всё в принципе, логично,в вашем примере. К Help`у порой обращаюсь, но в некоторые тонкости всё равно не вникнуть, пока не доходит дело до практики.
 

ossipenko

Интересующийся
Целый день делал первую поделку и возникли два насущных вопроса.

1) Возможно ли на нём сделать советника, чтобы он мониторил все открытые инструменты (типа AllSymbols=True) игнорируя разные Мэджики (Типа Magic=-1). Пока, как я понял, он выбирает ордера только со своего инструмента по конкретным Мэджикам.

2) Как переименовать внешние переменные (кроме как в исходном коде нигде не нашёл) и можно ли объединить несколько одинаковых переменных в одну. Например lot=0.1 у меня 4 раза в разных типах сделок, нужно менять их все сразу.

Надеюсь, вопросы не слишком тупые. Никогда раньше программированием, даже на уровне блок-схем не занимался.
 

Altiveus

Новичок форума
ossipenko, вопросы совершенно разумные. На второй вопрос ответить могу. Вы правы - переменные, использующиеся в блоках FEAG, тем более те, что выводятся во вкладке exported, непосредственно в генераторе не переименовать. Но, как вы и заметили, можно заменить их имена в готовом коде. Пример я приводил на 4й странице для переменных отвечающих за тейк и стоп. Аналогично ищем имена переменных в которых прописывается лот и заменяем одной переменной.

// exported variables
extern double BuyLots30 = 0.1;
extern double SellLots31 = 0.1;
extern double SellLots38 = 0.1;

это нужно заменить например такой строкой

extern double StartLot = 0.1;

и найти далее код открытия ордеров

ticket = OrderSend(Symbol(), OP_BUY, BuyLots30, Ask, 0, 0, 0, "", 1, 0, Green);
else
ticket = OrderSend(Symbol(), OP_BUY, BuyLots30, Ask, 0, SL, TP, "", 1, 0, Green);

заменим необходимые переменные (BuyLots30, SellLots31, SellLots38) новой переменной StartLot

ticket = OrderSend(Symbol(), OP_BUY, StartLot, Ask, 0, 0, 0, "", 1, 0, Green);
else
ticket = OrderSend(Symbol(), OP_BUY, StartLot, Ask, 0, SL, TP, "", 1, 0, Green);

удалим уже ненужные строки

extern double BuyLots30 = 0.1;
extern double SellLots31 = 0.1;
extern double SellLots38 = 0.1;

В общем как то так.
С мэджиками у меня пока идей не возникает по реализации в FEAG. Знаю только если мэджик ордера указываем 0, то по идее он не присваивается вообще.
 
Последнее редактирование:

ossipenko

Интересующийся

Спасибо, все понятно. Только я думал я не слишком внимательный и это можно сделать без ручной доработки. Просто после ручного труда советник нельзя будет в программе доработать.

Еще было бы круто, если можно выбирать ордера по Комментариям, тогда фантазия с выбором разных типов ордеров внутри программы не была бы ограничена, а Мэджик при этом не менять. Как только это сделать не знаю даже вручную. Саму идею нашел в одном советнике и сильно не разобрался как она работает. Называется советник hedger_vX.mq4

Еще не могу сообразить, как легко и элегантно удалить один отложенный ордер SELLLIMIT, если сработал второй SELLSTOP. С элегантностью у меня пока проблемы.
 

sochinik

Местный житель
Продолжил своё изучение программирования с помощью Forex EA Generator 4. как я понял с ним легче составить код программы, наверное не все функции можно в нём вставить. но это уже потом можно и в ручном режиме доработать будет_ или я это плохо пока понимаю?
А вот как его завязать на терминал?
Я пока полученный код копирую и перекомпилирую в медаэдиторе в ручном режиме. но это можно кажется делать автоматически?
Подскажите как полученного советника вы запускаете в МТ4?
 

Altiveus

Новичок форума
А вот как его завязать на терминал?
Я пока полученный код копирую и перекомпилирую в медаэдиторе в ручном режиме. но это можно кажется делать автоматически?
Подскажите как полученного советника вы запускаете в МТ4?

Вкладка Project, пункт Options. Указать пункт к файлу metalang.exe. При компиляции в самом FEAG, файл советника будет автоматически перемещён в папку experts MT4. И при последующем запуске терминала MT4, появится во вкладке "советники", с тем же именем, что было использовано при сохранении проекта в FEAG.
 

Вложения

  • FEAG options.jpg
    FEAG options.jpg
    106,5 КБ · Просмотры: 108
Последнее редактирование:

Altiveus

Новичок форума
Еще не могу сообразить, как легко и элегантно удалить один отложенный ордер SELLLIMIT, если сработал второй SELLSTOP. С элегантностью у меня пока проблемы.

Для удаления отложек используется блок Delete Pending Order. Здесь указывается _Order ID закрываемой отложки и её тип. В вашем случае необходимо контролировать открытие ордера SELLSTOP блоком If Order Exists (если ордер открыт), в котором указываем _Order ID открытого SELLSTOP ордера и его тип (OP_SELL, а не OP_SELLSTOP! Так как это уже не отложенный ордер, а просто SELL). Ну а следующий блок - Delete Pending Order о котором писал выше. Получится как вы и хотели. Только надо учитывать, что у ордеров должен быть разный _Order ID. Иначе можно реализовать алгоритм закрытия отложки использованием счётчиков открытых стоповых, но это сложнее в реализации (это к тому если будут одинаковые _Order Id у всех ордеров) и пока не нужно я думаю.
 

Вложения

sochinik

Местный житель
Вкладка Project, пункт Options. Указать пункт к файлу metalang.exe. При компиляции в самом FEAG, файл советника будет автоматически перемещён в папку experts MT4. И при последующем запуске терминала MT4, появится во вкладке "советники", с тем же именем, что было использовано при сохранении проекта в FEAG.

Спасибо за подсказку, как бы с этим решился вопрос, но возник другой: А где в таком случае сохранится исходник? как я заметил в МТ4 появился файл только формата ех4 ,а MQL 4 исходник в какой папке сохраняется? или всё же его лучще сохранить методом переноса в метаэдитор ? как возобновить заново модернезацию советника после перезапуска компа? где находятся исходники ?
 

sochinik

Местный житель
Всё разобрался, его нужно сохранять в через файлы- генератора, вот теперь нужно разобраться на что опираться в составление советников? или писать в медаэдиторе и пользоваться подсказкой генератора, толи только в самом генераторе добавляя функции через айкастом...
Вызывает смущение, что советник создаёт много переменных,которые в обычном варианте можно обьеденять
 

Altiveus

Новичок форума
Всё разобрался, его нужно сохранять в через файлы- генератора, вот теперь нужно разобраться на что опираться в составление советников? или писать в медаэдиторе и пользоваться подсказкой генератора, толи только в самом генераторе добавляя функции через айкастом...
Вызывает смущение, что советник создаёт много переменных,которые в обычном варианте можно обьеденять

Мне кажется будет проще если основной алгоритм раскидать в FEAG, обкатать в тестере и при удовлетворительных результатах просто почистить код, заменить переменные на "человеческие" с помощью metaeditor. ИМХО самый быстрый и простой вариант.
А исходник в формате mq4 FEAG не сохраняет. Приходится копировать листинг из OUTPUT / Source Code. Как вы и делали.
 
Последнее редактирование:

ossipenko

Интересующийся
Можно ли совершить из FEAG советника закрытие противоположных ордеров методом "Закрыть перекрытые ордеры". Так возвращается один спред. Если просто провести одновременное закрытие противоположный ордеров, то это вроде совсем не то.
 

Altiveus

Новичок форума
Можно ли совершить из FEAG советника закрытие противоположных ордеров методом "Закрыть перекрытые ордеры". Так возвращается один спред. Если просто провести одновременное закрытие противоположный ордеров, то это вроде совсем не то.

Я ничего не нашёл по перекрытым ордерам в генераторе. Самому интересно, можно ли реализовать. А по одновременному закрытию комиссия спишется с обоих это точно. Может кто разберётся и выложит пример?
 

sochinik

Местный житель
Я ничего не нашёл по перекрытым ордерам в генераторе. Самому интересно, можно ли реализовать. А по одновременному закрытию комиссия спишется с обоих это точно. Может кто разберётся и выложит пример?

У меня тоже возникли проблеммы с подбором функций в генераторе, но то как он их создаёт и какие дополнения включает очень радует- думаю продолжить изучение MQL и уже генерирую функции в Forex EA Generator 4 пробовать их соеденять в MetaEditorе. Как я понимаю для составления по моей задумке совы моих знаний пока недостаточно- нужно искать варианты...
 

sochinik

Местный житель
сохранят свои блоки можно ! для этого в Forex ea generator ест функция Code Library .

встроенных арифметических операций в нём нету их можно создавать с Custom Code . в описанным вами случае я использую блок if Gap , если цена отошла на количество пунктов ( Gap ) от ордера с order_id 1 отрываем ордер с order_id 2 .... советники созданные на еа генераторе проверяют не только магики открытых ордеров но и пару на которой он стоит , так что если советник будит стоит на нескольких парах мешают друг другу они не будут .

используйте различные order_id для создания нужной вам логики работы советника

встроенными блоками можно реализовать любой алгоритм открытия ордеров кроме усреднения тейк профита как в ilane например , всё остальное ест уже в блоках

например пирамидинг это блок trade up , пирамидинг с тралом блок trade up trailing

Я тоже так с фунциией Gap пытался познакомится, но или неверно сцепил блоки или условия неправильные ввёл. но что то мой код не сработал как нужно мне или фунцию я неверно понял...

Да. хорошо бы найти разьяснения по блокам включённым в генераторе. так как я пытался понять с помощью трёх разных переводчиков (за что отвечает каждый код). а также инструкции на ломанном русском , но результат очень плачевный.так как и разьяснения очень условные и качество перевода технического текста с помошью переводчика ущемлены - вот пытаюсь понимать медотом визуального наблюдения за действием той или иной функции. но учитывая то что знания английского О и только основы MQL, то результаты плачевны. Пытаюсь понять сущность всех кодов генератора для составления задуманного советника. а не просто составления робота из его кодов..



.
 
Последнее редактирование:
Верх