Как написать советника форекс

Как написать советника форекс

Хоть в интернете и огромное количество экспертов, все равно найдутся трейдеры, которые хотят найти ответ на то, как написать советник форекс собственными руками.

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

Но перед тем как узнать, как написать советник форекс, вам нужно определиться и с не менее важными вопросами.

Стратегия

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

Ведь именно ее вам придется заложить в алгоритм действий. А для этого нужно будет провести долгую и, конечно же, кропотливую работу.

Определите валютные пары, на которые будет распространяться ваша стратегия, после этого проанализируйте все котировки по валюте за несколько лет. После этого подберите и настройте индикаторы.

Продумайте ограничения советника и моменты входа – выхода с рынка. Ну и последнее продумайте оптимальные риски для своего эксперта.

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

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

Эффективнее всего использовать стратегию, которую вы уже успели проверить на протяжении нескольких лет. Если вы все еще хотите знать, как создать советник форекс, читайте далее.

Программирование и тестирование

Как написать советника форекс - Программирование и тестирование

Для того чтобы приступить к этапу программирования, все что вам будет нужно это владеть знанием языка MQL.

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

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

Вот вы и узнали, как создать советник форекс, но теперь наступает самый долгий процесс, а именно тестирование робота.

Именно на этом этапе работы вы сможете определить все преимущества и недостатки проделанной работы, выбрать оптимальные валютные пары и увидите конкретные результаты.

После тестирования составьте список багов и устраните их, отправив на доработку к программисту.

Процедуру нужно будет повторять до тех пор, пока все багги не будут исправлены и советник начнет приносить стабильный доход.

После этого можете переходить на реальный счет и торговать малыми депозитами.

Вам будет интересно  Финансовый советник на Форекс - как можно хорошо заработать

Писать советник самому или использовать готовые модели?

Для того чтобы написать советник у вас уйдет от 6 месяцев и до года. Поэтому если вы не хотите уделять этому процессу так много времени, то просто скачайте готовый вариант торгового эксперта.

А вот стоит ли вообще иметь советник или нет, никто вам ответить не сможет, все зависит только от вас и ваших умений управлять роботом.

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

Торговый советник на MQL4: учимся программировать с нуля

В этом руководстве по MQL4 вы научитесь программировать свой собственный торговый советник в MetaEditor.

Прежде чем мы начнем, убедитесь, что вы понимаете следующие типы данных. Каждая переменная, которую мы будем использовать, для начала должна быть определена одним из следующих типов данных:

  • int – это обычное число. Например: 1, 15, 521.
  • double – число с десятичным знаком. Например: 1,154, 0,0144, 255,145.
  • string – строка, слово, фраза. Например: «Ордер на покупку», «Ордер на продажу успешно размещен».
  • bool – принимает значения либо false, либо true.

Скоро вы увидите, как их можно использовать.

Торговый советник три белых солдата

Для того, чтобы создать свой собственный торговый советник, для начала вы должны переключиться на MetaEditor. Вы смоете сделать это, нажав на иконку MetaEditor. В MetaEditor нажмите «Создать» и выберите «Советник (шаблон)». В следующем окне напишем имя нашего эксперта, нажмем на кнопку «Далее» и добавим первые стандартные переменные, нажав на кнопку «Добавить».

Мы добавим TakeProfit, StopLoss, LotSize, Slippage и MagicNumber. Все они являются типом int, кроме LotSize. LotSize должен иметь тип double.

мой торговый советник

Затем нажимаем «Далее» и «Готово». Мы видим, что MetaEditor сгенерировал файл с вашими предопределенными переменными.

Вы можете увидеть 3 области. Области OnInit(), OnDeinit() и OnTick(). Весь код, который вы пишете, попадает в одну из этих областей.

Код, который мы хотим вызвать, если прикрепим советник к графику, выполняется в области OnInit(). Код в OnDeinit() выполняется, когда мы отсоединяем советник. И, наконец, область, в которой мы будем работать больше всего – область OnTick(). Функция OnTick() вызывается каждый раз, когда мы получаем от брокера новую цену (тик) торгового инструмента, к которому прикреплен советник.

Если вы скомпилируете советника с помощью F7 и вернетесь в Metatrader, вы сможете найти советника в «Навигаторе» MetaTrader (Crtl + N). Если вы попытаетесь присоединить его к графику и перейдете на вкладку «Входные параметры», вы сможете увидеть наши предопределенные переменные.

торговый советник: входные параметры

Мы научимся программировать советника, который торгует по паттерну 3 белых солдата. Это простая стратегия, когда советник открывает сделку на покупку, когда последние 3 свечи были бычьими. Давайте начнем!

Вам будет интересно  Торговля на основе корреляции валютных пар форекс

Добавим следующие строчки кода:

Для этой стратегии мы используем предопределенную переменную Close[], который является типом double. Close[] дает нам цену закрытия (например, 1.24577) для каждого свечи текущего графика. Close[0] означает текущую цену закрытия. Close[1] – предыдущую цену, и так далее. То же самое справедливо для предопределенных переменных Open[], Low[] и High[].

//Ордер на покупку – это подсказка для нас, что мы создали здесь функцию открытия ордера на покупку. Две обратных черты (//) означают, что эта строка закомментирована. Советник будет игнорировать ее при компиляции.

Если вы поместите курсор на предопределенную функцию или переменную и нажмете F1, откроется справка по MQL4, где вы сможете прочитать, что делает эта данная функция или переменная.

Далее мы используем функцию OrderSend, чтобы отправить ордер на покупку нашему брокеру. Добавим следующий код:

Что из себя представляет функция OrderSend?

  • _Symbol – возвращает текущий торговый инструмент, к которому прикреплен советник.
  • OP_BUY – мы хотим открыть ордер на покупку.
  • LotSize – размер лота, который мы определили в самом начале.
  • Ask – текущая цена Ask, по которой открываются ордера на покупку.
  • Slippage – размер проскальзывания.
  • StopLoss – это наш StopLoss. Или цена Ask за вычетом цены StopLoss. Запомните, что StopLoss – это целое число (500 пунктов), а Ask – это цена (например, 1.20521). Теперь, чтобы вычесть стоп-лосс из цены Ask, мы должны умножить его на 0,00001 или 0,001. Мы делаем это с помощью предопределенной переменной _Point, которая отражает текущие значением пунктов торгового инструмента.
  • TakeProfit – то же самое, как и StopLoss.
  • Комментарий – комментарий, который должен появиться в журнале, когда торговый советник разместит наш ордер.
  • MagicNumer – магическое число, которое было определено нами вначале.

Нажмите F7, чтобы скомпилировать советник и проверить результат его работы в тестере стратегий. Вы получите что-то вроде этого:

торговый советник открывает ордера на каждом тике

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

Мы должны запрограммировать новую функцию, которая позволит нашему советнику одновременно открывать только одну сделку. MQL4 уже имеет свои предопределенные функции, например, OrderSend(). Но мы также можем написать свою собственную функцию, в которой мы можем вызвать другие пользовательские или предопределенные функции.

Давайте перейдем к концу нашего файла и запрограммируем новую функцию под названием TotalOpenOrders. Эта функция будет иметь тип int. Она будет возвращать количество открытых ордеров.

Затем добавим данную функцию в область OnTick и добавим проверку на количество открытых ордеров. Если общее количество сделок равно 0, наш торговый советник продолжает свою работу с кодом внутри скобок.

Вам будет интересно  MetaTrader Market — самый большой в мире магазин торговых роботов и технических индикаторов для Форекса

торговый советник открывает только один ордер

Что из себя представляет функция TotalOpenOrders?

В этой функции у нас есть счетчик (total_orders), который в конце возвращает общее количество открытых ордеров. Также у нас есть цикл for, который перебирает все открытые ордера. Если советник найдет ордер, соответствующий вашему символу и MagicNumer, счетчик увеличится на 1 (это записывается с помощью ++).

Теперь у нас все еще есть проблема. Если свеча слишком длинная, советник открывает вторую сделку на покупку непосредственно после того, как первая сделка на покупку закрывается с помощью StopLoss или TakeProfit. Мы должны добавить вторую функцию «IsNewBar».

Эта функция будет представлять тип bool. Она вернет true, если в Metatrader сгенерирована новая свеча, иначе она вернет false.

Давайте поместим эту функцию прямо над функцией TotalOpenOrder и вызовем ее в области OnTick вместе с TotalOpenOrders().

4-5 или 2-3 значные котировки

Давайте разберемся с проблемой котировок, которые могут предоставлять нам разные брокеры.

Сейчас мы используем предопределенную переменную _Point для преобразования TakeProfit и StopLoss. Но мы хотим создать функцию, которая предоставит нам одинаковое значение для 4 и 5 и соответственно 2-х и 3-х торговых инструментов. Для начала мы создаем глобальные переменные MyPoint и MySlippage. Поместим их прямо под нашими входными параметрами:

Теперь мы создаем функцию, которая сохраняет правильное значение в этих 2 переменных (MyPoint и MySlippage) и помещаем их в наши пользовательские функции:

Мы должны рассчитать эти значения только один раз. Только когда мы прикрепляем наш торговый советник к графику. Поэтому мы вызываем эти функции в разделе OnInit():

Теперь мы можем возвратить наши TakeProfit, StopLoss и Slippage к номальным значениям:

Далее мы заменяем все Slippage и _Point в функциях OnTick нашими 2 новыми глобальными переменными MyPoint и MySlippage. Таким образом, функция OrderSend будут выглядеть следующим образом:

Торговый советник и ECN брокеры

На ECN брокерах мы не можем отправить ордер с TakeProfit или StopLoss. Сначала нам придется отправить наш ордер без них, а затем изменить его.

Сначала мы сохраняем номер тикета из только что открытого ордера в переменной int ticket. Затем мы проверяем, получен ли мы данный ticket от нашего брокера. Далее мы вызываем функцию OrderModify. Функция OrderModify возвращает true или false, которые мы сохраняем в переменной bool res. Мы проверяем результат с помощью if (! Res) (так же, как if (res == false)) и выводим соответствующее сообщение.

http://ownforex.ru/new/kak-napisat-sovetnika-foreks.htm
https://traderblog.net/torgovyj-sovetnik-na-mql4/

Яндекс.Метрика