Quantcast
Channel: Блог компании MetaQuotes Software
Viewing all 80 articles
Browse latest View live

Американский брокер AMP Futures запустил MetaTrader 5

$
0
0

http://www.ampfutures.com

Американский брокер AMP Futures запустил MetaTrader 5

Чтобы открыть демку и посмотреть, достаточно указать сервер AMPGlobalClearing-Live-CQG при открытии счета и выбрать «Новый реальный счет». Будет автоматически открыт предварительный счет, на котором будут доступны фьючерсы.

Американский брокер AMP Futures запустил MetaTrader 5



Новый MetaTrader 5 build 1485: доп режимы тестирования и графическая библиотека

$
0
0
Вчера мы выпустили очередной релиз десктопного MetaTrader 5.

Что нового:
  1. Terminal: Изменен порядок отображения записей в журналах терминала и MetaEditor. Ранее в начале журнала показывались самые свежие записи, теперь — самые старые. Обратный порядок сортировки сделает чтение журнала более удобным и привычным.

  2. Terminal: В торговой истории у ордеров и сделок закрытия позиций в режиме хеджинга теперь показывается тикет закрытой позиции. Это облегчит поиск парных операций открытия и закрытия.

    Новый MetaTrader 5 build 1485: доп режимы тестирования и графическая библиотека

  3. Terminal: Исправлена ошибка, приводившая к копированию уровней SL/TP из имеющейся позиции в новую позицию по тому же инструменту. Ошибка проявлялась при использовании функций торговли одним кликом (например, на графике, в окне «Обзор рынка») в режиме хеджинга.

  4. Terminal: Исправлено отображение объектов-стрелок на экранах сверхвысокого разрешения (4К).

  5. MQL5: Добавлена функция ArrayPrintдля вывода в журнал массивов простых типов и структур.
    ArrayPrint выводит в журнал не все поля массива структур – поля-массивы и поля-указатели объектов пропускаются. Для вывода всех полей такой структуры понадобится собственная функция массового вывода с желаемым форматированием.

  6. MQL5: Исправлена ошибка сложения строк вида S1=S2+S1

  7. MQL5: Изменено поведение функции ArrayResize. При передаче в качестве параметра reserve_size значения -1 функция освобождает неиспользованную (зарезервированную) память, если при этом не происходит увеличение размера массива. Изменение размера массива на 0 со значением reserve_size=-1 эквивалентно вызову ArrayFree. Новое поведение позволяет оптимизировать использование памяти в MQL5-программах.

  8. MQL5: В стандартную библиотеку добавлены функции для построения графиков. Для использования включите файл MQL5\Include\Graphics\Graphic.mqh в свой проект.

    Построение графика из 3 серий данных при помощи GraphPlot:
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    Результат:

    Новый MetaTrader 5 build 1485: доп режимы тестирования и графическая библиотека

    Построение графика на основе массива данных при помощи GraphPlot:
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    
    Результат:

    Новый MetaTrader 5 build 1485: доп режимы тестирования и графическая библиотека

  9. MQL5: Обновлены функции работы с математической статистикой в стандартной библиотеке. Проведена большая проверка качества и точности всех функций как в MQL5-версии, так и в исходном языке R. Для контроля точности и скорости работы вместе со статистической библиотекой распространяются юнит-тесты. Они находятся в каталоге \MQL5\Scripts\UnitTests\Stat.

    • TestStat.mq5 — основной тестовый скрипт для проверки результатов вычислений
    • TestPrecision.mq5 — тест точности вычислений
    • TestBenchmark.mq5 — тест с замером производительности вычислений
  10. Tester: Расширены настройки задержки исполнения торговых запросов при тестировании. Теперь проверить торгового робота можно в еще большем количестве разнообразных торговых условий: от идеального случая без задержек до любой задержки, заданной пользователем.

    Новый MetaTrader 5 build 1485: доп режимы тестирования и графическая библиотека

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

  11. Tester: Исправлена ошибка формирования тикового объема баров при тестировании в режиме OHLC на М1.

  12. Tester: Исправлено проставление времени открытия у ордеров и позиций с точностью до миллисекунд при торговле в режиме хеджинга.

  13. Tester: Исправлена ошибка «old tick» (тик устарел), появлявшаяся при мультивалютном либо мультитаймфреймовом тестировании в режиме реальных тиков.

  14. Tester: Ускорена работа функции CopyTicks в случае, когда запрошенные тики читались из базы на диске.

  15. MetaEditor: Команды работы с версионным хранилищем исходных кодов MQL5 Storage добавлены в контекстное меню файла в Навигаторе и на панель инструментов.

  16. MetaEditor: Исправлена ошибка, приводившая к нарушению целостности локальной базы MQL5 Storage при работе более чем с 1024 файлами в хранилище.

  17. MetaEditor: Исправлены ошибки отображения дерева файлов MQL5 Storage.

  18. MetaEditor: Исправлено отображение файла после массовой замены текста.

  19. Обновлена документация.

Обновление будет доступно через систему LiveUpdate.

Разработка спредовой стратегии на фьючерсах Московской биржи

$
0
0

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

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

Это позволяет легко и максимально достоверно воспроизводить все условия торгового окружения — вплоть до миллисекундных интервалов между поступлениями тиков на разных символах.

Сейчас мы покажем, как провести разработку и тестирование спредовой стратегии на двух фьючерсах Московской биржи.

 

Обратная корреляция символов Si и RTS

На Московской бирже торгуются фьючерсы вида Si-M.Y и RTS-M.Y, которые достаточно тесно между собой связаны. Здесь M.Y обозначают дату истечения контракта:

  • M — номер месяца
  • Y — две последние цифры годв

Si  —  это фьючерсный контракт на курс доллар США/российский рубль, RTS  —  фьючерсный контракт на Индекс РТС, выраженный в долларах США.  Так как в Индекс РТС входят акции российских компаний, цены на которые выражены в рублях, то колебания курса USD/RUR отражаются также и на колебаниях индекса, выраженного в долларах США.

На графиках этих инструментов видно, что при росте одного актива второй, как правило, падает.

Разработка спредовой стратегии на фьючерсах Московской биржи

Для лучшего представления мы наложили на оба графика канал стандартного отклонения.

 

Вычисляем линейную регрессию между Si и RTS

Мы можем выразить связь между двумя инструментами с помощью уравнения линейной регрессии вида Y(X)=A(X)+B. Для проверки напишем скрипт CalcShowRegression_script.mq5, который берет два массива цен закрытия, вычисляет коэффициенты и выводит диаграмму распределения с линией регрессии прямо на график.

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

Разработка спредовой стратегии на фьючерсах Московской биржи


Строим индикатор спреда между Si и синтетикой

Мы получили коэффициенты линейной регрессии, и теперь можем строить синтетический график вида Y(RTS) = A*RTS+B. Разницу между оригинальным активом и синтетическим рядом назовем спредом. Эта разница будет меняться на каждом баре, от  положительных до отрицательных значений.

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

Положительные значения спреда рисуются голубым цветом, отрицательные  —  желтым:

Разработка спредовой стратегии на фьючерсах Московской биржи

Индикатор обновляет и пишет в журнал Экспертыкоэффициенты линейной регрессии при открытии каждого нового бара. При этом он дожидается того момента, когда новая свеча откроется на обоих инструментах — Si и RTS.

Таким образом индикатор позволяет контролировать правильность и точность расчетов.

 

Строим график линейной регрессии на графике спредов за последние 100 баров

Индикатор спреда показывает, что разница между фьючерсом Si и синтетическим инструментом периодически меняется. Чтобы оценить текущую тенденцию, напишем индикаторSpreadRegression_Ind.mq5 (спред и линейная регрессия на нём), который строит трендовую линию на графике спреда. Параметры линии вычисляем опять же методом линейной регрессии.

Наложим оба индикатора на график для отладки:

Разработка спредовой стратегии на фьючерсах Московской биржи

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


Стратегия №1 — изменение наклона линейной регрессии на графике спреда

Значения спреда в индикаторе TwoSymbolsSpread_Ind.mql5считаются как разность между Si и Y(RTS)=A*RTS + B.

Вы можете легко проверить это, запустив индикатор под отладкой (кнопкой F5):

Разработка спредовой стратегии на фьючерсах Московской биржи

Сделаем простого советника, который отслеживает изменение угла наклона линейной регрессии, наложенной на график спреда. Угол наклона линии — это не что иное, как коэффициент A в уравнении Y=A*X+B.

При положительном тренде на графике спреда A>0, при отрицательном A<0. Линейную регрессию мы считаем на последних 100 значениях графика спреда.

Вот часть кода из советника Strategy1_AngleChange_EA.mq5.

#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| тип стратегии спреда                                             |
//+------------------------------------------------------------------+
enum SPREAD_STRATEGY
  {
   BUY_AND_SELL_ON_UP,  // Buy 1-st, Sell 2-nd
   SELL_AND_BUY_ON_UP,  // Sell 1-st, Buy 2-nd
  };
//---
input int       LR_length=100;                     // кол-во баров для регрессии на спреде
input int       Spread_length=500;                 // кол-во баров для расчета спреда
input ENUM_TIMEFRAMES  period=PERIOD_M5;           // таймфрейм
input string    symbol1="Si-12.16";                // первый символ пары
input string    symbol2="RTS-12.16";               // второй символ пары
input double    profit_percent=10;                 // сколько процентов прибыли фиксируем
input SPREAD_STRATEGY strategy=SELL_AND_BUY_ON_UP; // тип спредовой стратегии
//--- хендлы индикаторов
int ind_spreadLR,ind,ind_2_symbols;
//--- класс для торговых операций
CTrade trade;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- коэффициент A наклона линейной регрессии на графике спреда Y(X)=A*X+B
   static double Spread_A_prev=0;
   if(isNewBar())
      PrintFormat("Новый бар %s открылся в %s",_Symbol,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- дождемся, когда данные индикатора обновятся, так как он работает на двух символах
   if(BarsCalculated(ind_spreadLR)==Bars(_Symbol,_Period))
     {
      //--- получим значения линейной регрессии на графике спреда для баров с индексами 1 и 2 ("вчера" и "позавчера")
      double LRvalues[];
      double Spread_A_curr;
      int copied=CopyBuffer(ind_spreadLR,1,1,2,LRvalues);
      if(copied!=-1)
        {
         //--- коэффициент линейной регрессии на последнем завершенном ("вчерашнем") баре
         Spread_A_curr=LRvalues[1]-LRvalues[0];
         //--- если наклон регрессии сменился, то произведение текущего и предыдущего меньше нуля
         if(Spread_A_curr*Spread_A_prev<0)
           {
            PrintFormat("Линия LR сменила наклон, Spread_A_curr=%.2f, Spread_A_prev=%.2f: %s",
                        Spread_A_curr,Spread_A_prev,TimeToString(TimeCurrent(),TIME_SECONDS));
            //--- если открытых позиций нет, то войдем в рынок по двум символам
            if(PositionsTotal()==0)
               DoTrades(Spread_A_curr-Spread_A_prev>0,strategy,symbol1,1,symbol2,1);
            //--- есть открытые позиции, делаем переворот
            else
               ReverseTrades(symbol1,symbol2);
           }
         //--- наклон регрессии не изменился, проверим плавающую прибыль - может пора закрывать?
         else
           {
            double profit=AccountInfoDouble(ACCOUNT_PROFIT);
            double balance=AccountInfoDouble(ACCOUNT_BALANCE);
            if(profit/balance*100>=profit_percent)
              {
               //--- достигнут нужный уровень плавающей прибыли - фиксируем
               trade.PositionClose(symbol1);
               trade.PositionClose(symbol2);
              }
           }
         //--- запомним направление тренда для сравнения на открытии нового бара
         Spread_A_prev=Spread_A_curr;
        }
     }
  }

Чтобы не делать предположений, что нужно покупать, а что продавать при смене тренда, мы просто добавили в советника внешний параметр, который позволяет переворачивать торговые правила:
input SPREAD_STRATEGY strategy=SELL_AND_BUY_ON_UP; // тип спредовой стратегии
Теперь мы можем запустить тестирование и отладку советника.

 

Тестирование торговой Стратегии №1

Для отладки новой стратегии лучше всего использовать режим визуального тестирования. Через меню Сервис-Настройки-Отладка задайте все необходимые данные:

  1. Символ
  2. Таймфрейм
  3. Интервал тестирования
  4. Режим торговли
  5. Размер депозита
  6. Режим генерации тиков

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

Торговый сервер MetaTrader 5 автоматически накапливает все пришедшие с биржи тики у себя и выдает в терминал всю тиковую историю по первому запросу:

Разработка спредовой стратегии на фьючерсах Московской биржи

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

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

Разработка спредовой стратегии на фьючерсах Московской биржи

После того, как код советника отлажен, можем провести оптимизацию параметров.

 

Оптимизация торговой Стратегии №1

В советнике Strategy1_AngleChange_EA.mq5есть несколько внешних параметров, которые можно подбирать путем оптимизации (выделено желтым):

input int          LR_length=100;                      // кол-во баров для регрессии на спреде
input int          Spread_length=500;               // кол-во баров для расчета спреда
input double    profit_percent=10;                 // сколько процентов прибыли фиксируем
input SPREAD_STRATEGY strategy=SELL_AND_BUY_ON_UP; // тип спредовой стратегии

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

Иными словами, мы фиксируем значение параметра strategyи делаем оптимизацию по параметру profit_percentот 0.2 до 3.0%, чтобы увидеть общую картину для двух способов торговать на изменении наклона линии.

Для правила BUY_AND_SELL_ON_UP (покупаем первый актив, продаем второй), когда наклон линии меняется с отрицательного на положительный, оптимизация дает не очень хорошие результаты.

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

Разработка спредовой стратегии на фьючерсах Московской биржи

При использовании правила SELL_AND_BUY_ON_UP (продаем первый актив, покупаем второй) результаты оптимизации лучше — 5 из 15 проходов оптимизации показывают какую-то прибыль.

Разработка спредовой стратегии на фьючерсах Московской биржи

Оптимизация проводилась на истории с 1 августа по 30 сентября 2016 (интервал в два месяца). В целом, оба варианта торговли не выглядят многообещающими.

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

 

Стратегия №2 — смена знака спреда на завершенном баре

Во второй стратегии мы будем следить за изменениями знака спреда. Смотреть мы будем значения только на сформировавшихся барах, то есть на открытии нового «сегодняшнего» бара. Если спред на «позавчерашнем» баре был отрицательный, а на «вчерашнем» стал положительным, то мы считаем, что спред развернулся вверх (UP).

Опять-таки в коде оставлена возможность торговать смену спреда в любую сторону  —  мы можем разворачивать направления входа с помощью параметра strategy.

Вот блок кода советника Strategy2_SpreadSignChange_EA.mq5:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- предыдущее значение спреда как разности Symbol1 и Y(Symbol2)=A*Symbol2+B
   static double Spread_prev=0;
   if(isNewBar())
      PrintFormat("Новый бар %s открылся в %s",_Symbol,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- дождемся, когда данные индикатора обновятся, так как он работает на двух символах
   if(BarsCalculated(ind_spreadLR)==Bars(_Symbol,_Period))
     {
      //--- получим значения спреда для баров с индексами 1 и 2 ("вчера" и "позавчера")
      double SpreadValues[];
      int copied=CopyBuffer(ind_spreadLR,0,1,2,SpreadValues);
      double Spread_curr=SpreadValues[1];
      if(copied!=-1)
        {
         //--- если знак спреда изменился, то произведение текущего и предыдущего меньше нуля
         if(Spread_curr*Spread_prev<0)
           {
            PrintFormat("Спред изменил знак, Spread_curr=%.2f, Spread_prev=%.2f: %s",
                        Spread_curr,Spread_prev,TimeToString(TimeCurrent(),TIME_SECONDS));
            //--- если открытых позиций нет, то войдем в рынок по двум символам
            if(PositionsTotal()==0)
               DoTrades(Spread_curr>0,strategy,symbol1,1,symbol2,1);
            //--- есть открытые позиции, делаем переворот
            else
               ReverseTrades(symbol1,symbol2);
           }
         //--- знак спреда не изменился, проверим плавающую прибыль - может, пора закрывать?
         else
           {
            double profit=AccountInfoDouble(ACCOUNT_PROFIT);
            double balance=AccountInfoDouble(ACCOUNT_BALANCE);
            if(profit/balance*100>=profit_percent)
              {
               //--- достигнут нужный уровень плавающей прибыли - фиксируем
               trade.PositionClose(symbol1);
               trade.PositionClose(symbol2);
              }
           }
         //--- запомним значение спрреда для сравнения на открытии нового бара
         Spread_prev=Spread_curr;
        }
     }
  }


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

Результаты:

Разработка спредовой стратегии на фьючерсах Московской биржи

Разработка спредовой стратегии на фьючерсах Московской биржи

Как видим, для второй стратегии правило «Продаем первый актив и покупаем второй» даёт такие же неутешительные результаты тестирования, как и для первой.

При этом правило «Покупаем первый  актив и продаем второй» на всех проходах даёт больше убытков.

Попробуем сделать третий вариант стратегии.

 

Стратегия №3 — смена знака спреда на текущем баре с подтверждением на N тиках

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

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

Потребуем также, чтобы изменение знака спреда было устойчивым на последних N тиках — таким образом мы пытаемся избавиться от ложных сигналов. Для этого добавим в советника внешний параметр ticks_for_trade=10.

Если на последних 10 тиках знак спреда отрицательный, а на предыдущем баре положительный, то мы входим в рынок.

Вот так выглядит функция OnTick() советника Strategy3_SpreadSignOnTick_EA.mq5:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(isNewBar())
      PrintFormat("Новый бар %s открылся в %s",_Symbol,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- дождемся, когда данные индикатора обновятся, так как он работает на двух символах
   if(BarsCalculated(ind_spreadLR)==Bars(_Symbol,_Period))
     {
      //--- получим значения спреда на текущем ("сегодня") и предыдущем ("вчера") барах
      double SpreadValues[];
      int copied=CopyBuffer(ind_spreadLR,0,0,2,SpreadValues);
      double Spread_curr=SpreadValues[1]; // спред на текущем баре развивающемся который
      double Spread_prev=SpreadValues[0]; // спред на преыдущем завершенном баре
      if(copied!=-1)
        {
         //--- если изменение знака спреда сохраняется на последних ticks_for_trade тиках
         if(SpreadSignChanged(Spread_curr,Spread_prev,ticks_for_trade))
           {
            PrintFormat("Спред изменил знак, Spread_curr=%.2f, Spread_prev=%.2f: %s",
                        Spread_curr,Spread_prev,TimeToString(TimeCurrent(),TIME_SECONDS));
            //--- покажем на графике значения последних ticks_for_trade тиков по обоим символам
            ShowLastTicksComment(ticks_for_trade);
            //--- если открытых позиций нет, то войдем в рынок по двум символам
            if(PositionsTotal()==0)
               DoTrades(Spread_curr>0,strategy,symbol1,1,symbol2,1);
            //--- есть открытые позиции, делаем переворот
            else
               ReverseTrades(Spread_curr>0,positionstype,symbol1,symbol2);
           }
         //--- знак спреда не изменился, проверим плавающую прибыль - может, пора закрывать?
         else
           {
            double profit=AccountInfoDouble(ACCOUNT_PROFIT);
            double balance=AccountInfoDouble(ACCOUNT_BALANCE);
            if(profit/balance*100>=profit_percent)
              {
               //--- достигнут нужный уровень плавающей прибыли - фиксируем
               trade.PositionClose(symbol1);
               trade.PositionClose(symbol2);
               positionstype=0;
              }
           }
        }
     }
   }


В этом советнике мы добавили функцию ShowLastTicksComment(), которая выводит на график в момент появления сигнала значения последних N тиков по обоим символам.

Так мы сможем визуально тестировать стратегию и видеть изменения тиков с точностью до миллисекунд:

Разработка спредовой стратегии на фьючерсах Московской биржи

Запускаем такие же варианты оптимизаций, как и в предыдущих  стратегиях, и получаем следующие результаты:

«Покупаем 1-ый актив и продаем 2-ой»

Разработка спредовой стратегии на фьючерсах Московской биржи

«Продаем 1-ый актив и покупаем 2-ой»

Разработка спредовой стратегии на фьючерсах Московской биржи

Результаты при такой простой оптимизации не сильно улучшились.

 

Стратегия №4 — достижение спредом заданного значения в процентах

Создадим четвертую, последнюю, стратегию для торговли спредом. Она будет такой же простой как три предыдущие, а именно — торговый сигнал возникает в тот момент, когда спред составляет от цены первого актива заданное значение в процентах — spread_delta.

Обработчик поступающих тиков OnInit() изменился незначительно, вот его код из советника Strategy4_SpreadDeltaPercent_EA.mq5:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(isNewBar())
      PrintFormat("Новый бар %s открылся в %s",_Symbol,TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS));
//--- дождемся, когда данные индикатора обновятся, так как он работает на двух символах
   if(BarsCalculated(ind_spreadLR)==Bars(_Symbol,_Period))
     {
      //--- получим значение спреда на текущем ("сегодня")баре
      double SpreadValues[];
      int copied=CopyBuffer(ind_spreadLR,0,0,1,SpreadValues);
      double Spread_curr=SpreadValues[0]; // спред на текущем развивающемся баре
      if(copied!=-1)
        {
         MqlTick tick;
         SymbolInfoTick(symbol1,tick);
         double last=tick.last;
         double spread_percent=Spread_curr/last*100;
         //--- если спред в % достиг заданной величины spread_delta
         if(MathAbs(spread_percent)>=spread_delta)
           {
            PrintFormat("Спред достиг %.1f%% (%G) %s",
                        spread_percent,TimeToString(TimeCurrent(),TIME_SECONDS),
                        Spread_curr);
            //--- если открытых позиций нет, то войдем в рынок по двум символам
            if(PositionsTotal()==0)
               DoTrades(Spread_curr,strategy,symbol1,1,symbol2,1);
            //--- есть открытые позиции, делаем переворот
            else
               ReverseTrades(Spread_curr,positionstype,symbol1,symbol2);
           }
         //--- спред в пределах допустимого, проверим плавающую прибыль - может, пора закрывать?
         else
           {
            double profit=AccountInfoDouble(ACCOUNT_PROFIT);
            double balance=AccountInfoDouble(ACCOUNT_BALANCE);
            if(profit/balance*100>=profit_percent)
              {
               //--- достигнут нужный уровень плавающей прибыли - фиксируем
               trade.PositionClose(symbol1);
               trade.PositionClose(symbol2);
               positionstype=0;
              }
           }
        }
     }
  }


Закрывать позиции мы будем также по достижению заданного процента прибыли profit_percent=2, на этот раз сделаем его фиксированным. Запускаем оптимизацию по параметру spread_deltaв диапазоне от 0.1 до 1%.

«Покупаем 1-ый актив и продаем 2-ой»

Разработка спредовой стратегии на фьючерсах Московской биржи

«Продаем 1-ый актив и покупаем 2-ой»

Разработка спредовой стратегии на фьючерсах Московской биржи

На этот раз первое правило «Покупаем 1-ый актив и продаем 2-ой» выглядит значительно лучше, чем второе.  Оптимизацию по остальным параметрам вы можете сделать сами.

 

MetaTrader 5 —  среда разработки торговых стратегий

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

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

Для разработчиков автоматических торговых систем тестер в MetaTrader 5 предлагает следующие удобные возможности:

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

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

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

Для ускорения массовых тяжелых вычислений используйте глобальную вычислительную сеть MQL5 Cloud Network, которая создана специально для платформы MetaTrader 5

 

Необходимые замечания по стратегиям

Обычно при поиске символов для составления спреда используют не абсолютные значения цены, а приращения. То есть вместо ряда Close[i]  вычисляют Delta[i]=Close[i]-Close[i-1].

Для сбалансированной торговли необходимо подбирать объем для каждого символа спреда. В статье же при тестировании использовались только объемы в 1 лот на каждом символе.

При тестировании используются текущие настройки в спецификации контрактов Si и RTS. Необходимо отметить, что:

  • в основе фьючерса RTS-12.16 лежит доллар США,
  • цена тика фьючерса RTS-12.16 каждый день задается Московской биржей
  • и это значение равно 0.2 от индикативного курса доллара.

Разработка спредовой стратегии на фьючерсах Московской биржи

Методику расчета вы можете найти на сайте MOEX — http://fs.moex.com/files/3244. Поэтому нужно иметь в виду, что результаты оптимизации в тестере стратегий будут зависеть от курса доллара на момент проведения тестирования.

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

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

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

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

Не затронут вопрос анализа статистики отклонений спреда от средних значений для создания более надежных торговых правил.

Не используется анализ стакана заявок, так как поток заявок в тестере MetaTrader 5 не эмулируется.

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

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


Статьи по теме:

 

Программы, используемые в статье:

Веб версия MetaTrader 5 с двухфакторной авторизацией

$
0
0

По многочисленным запросам клиентов в веб-версии MetaTrader 5усилена защита торговых счетов от несанкционированного доступа.

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

Чтобы включить двухфакторную авторизацию, воспользуйтесь мобильным приложением MetaTrader 5. Авторизуйтесь и в окне «Настройки» откройте генератор One-time password (OTP).

Привяжите к нему все свои торговые счета — и для каждого будет автоматически создаваться уникальный одноразовый пароль из шести цифр. Введите его при авторизации в веб-платформу — поздравляем, теперь ваш торговый счет под надежной защитой!

Веб версия MetaTrader 5 с двухфакторной авторизацией

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

И последнее важное новшество — автоматическая генерация демо-счетов. Теперь вы можете зайти в MetaTrader 5 Web из любого браузера и немедленно начать торговать на Форексе, фондовой бирже, фьючерсами или CFD.

Сделайте это прямо сейчас: https://www.mql5.com/ru/trading

MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

$
0
0

Мы выпустили очередное обновление MetaTrader 5:

  1. Добавлено представление торговой истории в виде позиций. Терминал собирает данные по сделкам, относящимся к позиции и группирует эти данные в единую запись, где можно сразу посмотреть:

    MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

  2. Добавлена команда для визуализации истории сделок на графике по конкретному символу

    MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

  3. Добавлен показ международного имени торгового инструмента в спецификации контракта, а также возможность поиска по нему в диалоге управления инструментами.

  4. Добавлена возможность быстро установить разрешение для окна терминала. Функция будет удобна для тех, кто снимает видеоролики.

    MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

  5. Шаблоны и профили графиков перенесены из [каталога данных терминала\Profiles] в [каталог данных терминала\MQL5\Profiles]. Теперь можно легко добавлять шаблоны в хранилище MQL5 Storageи использовать их с любого вашего компьютера.

  6. Добавлена поддержка ресурсных переменных.

    Использование таких переменных может существенно облегчить написание некоторых программ. Например, вы можете написать OpenCL код в отдельном CL-файле, а затем включить этот файл в виде строки в ресурсы вашей MQL5-программы.

    Примеры использования:
    #resource "data.bin" as int ExtData[]             // объявление массива числового типа, содержащего данные из файла data.bin
    #resource "data.bin" as MqlRates ExtData[]        // объявление массива простых структур, содержащего данные из файла data.bin
    
    #resource "data.txt" as string ExtCode            // объявление строки, содержащей данные файла data.txt
    #resource "data.txt" as string ExtCode[]          // объявление строкового массива, содержащего строки файла data.txt
    
    #resource "image.bmp" as bitmap ExtBitmap[]       // объявление одномерного массива, содержащего в себе растр из файла BMP, размер массива = height * width
    #resource "image.bmp" as bitmap ExtBitmap2[][]    // объявление двумерного массива, содержащего в себе растр из файла BMP, размер массива [height][width]
    
  7. Добавлено свойство CHART_SHOW для отключения отображения графика. Для получения и установки свойства используются функции ChartGetIntegerи ChartSetInteger.

  8. Добавлено свойство CHART_KEYBOARD_CONTROL для включения/отключения управления графиком при помощи клавиатуры.

    Установка CHART_KEYBOARD_CONTROL=false позволяет отключить скроллинг и масштабирование графика, но при этом сохраняется возможность получать события нажатия данных клавиш в OnChartEvent.

  9. Добавлены новые функции и свойства для работы с OpenCL.

  10. Добавлена функция TranslateKey, которая возвращает Unicode-символ по виртуальному коду клавиши, учитывая текущий язык ввода и состояние управляющих клавиш.

  11. Добавлен код ответа TRADE_RETCODE_LIMIT_POSITIONS.

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

  12. Исправлена ошибка, в некоторых случаях приводившая к пропуску тиков в тиковой истории.

  13. Исправлены ошибки косвенной типизации шаблонов.

  14. Обновлена библиотека работы с математической статистикой.

  15. Исправлено открытие страницы продукта при скачивании демо-версии.

  16. После завершения оптимизации результаты теперь автоматически сортируются по колонке «Результат».

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

  18. Тестер стратегий теперь остается в режиме оптимизации после запуска одиночного тестирования.

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

  19. Теперь наборы входных параметров можно сохранять не только в виде set-файлов, но и в виде настроек локального тестера стратегий с удобным доступом к ним через контекстное меню.

    MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

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

  21. Добавлена возможность менять порядок наблюдаемых выражений в окне отладки. Просто перетащите выражение в нужную позицию мышью.

    MetaTrader 5 build 1525: Представление истории в виде позиций и улучшение тестера

  22. Исправлена ошибка определения кодировки исходных файлов.

  23. Исправлен поиск по файлам в кодировке UTF-8.

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

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

  26. Обновлена документация.

Обновление уже доступно через систему LiveUpdate.

БКС Форекс, ИнстаФорекс, LiteForex и другие брокеры запустили MetaTrader 5

$
0
0
Продолжается миграция брокеров на MetaTrader 5 — недавно о запуске мультирыночной платформы с хеджированием объявили такие заметные участника рынка как БКС Форекс, ИнстаФорекс и LiteForex.

Кроме того, в 2017 году Binary.com, Benchmark Finance, MIB700 и другие брокеры также предложили это ПО своим трейдерам.

«Мы рады присоединиться к глобальному тренду и оказаться в числе первых российских брокеров, запустивших MetaTrader 5 с опцией хеджинга!» — говорит управляющий директор «БКС Форекс» Кирилл Агеев:
Наша компания предлагает более 420 торговых инструментов и выступает исключительно за высокотехнологичные решения, которые позволяют оптимизировать трейдинг по максимуму.

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

Совсем недавно мы выпустили новый релиз Личного кабинета, в который была добавлена опция хеджа (локирования) на счетах DIRECT.MT5 и NDD.MT5.

Это позволило трейдерам открывать разнонаправленные позиции по одному и тому же инструменту. При этом переключаться между разными режимами можно прямо в Личном кабинете в один клик. Неудивительно, что наши клиенты массово переходят на MetaTrader 5.

Запуск хеджинга по сути стер последние препятствия для перехода на платформу пятого поколения.

MetaTrader 5 iOS build 1509 и десктопный MetaTrader 5 build 1530

$
0
0
В новом MetaTrader 5 для iPhone/iPad появилась возможность авторизации и регистрации MQL5.community аккаунта через Facebook.

MetaTrader 5 iOS build 1509 и десктопный MetaTrader 5 build 1530

Теперь любой пользователь этой социальной сети в несколько кликов может получить доступ к чатам и всему набору сервисов для MetaTrader 5. Среди огромной аудитории Facebook найдется немало мобильных трейдеров, которые оценят новый способ авторизации.

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

Очень просим обновиться до последний мобильных версий или просто попробовать наши решения. Например, на сервере MetaQuotes-Demo доступны инструменты MOEX с 15 минутной задержкой. Достаточно потратить минуту, чтобы все получить:

Еще одно хорошее обновление — это бета-версия дестопного MetaTrader 5 build 1530. В нем тоже очень много внутренних улучшений, но из видимых преимуществ — это кратное снижение нагрузки на процессор при наличии множества окон и массе графических объектов.

Обновиться до последней версии можно подключившись к серверу MetaQuotes-Demo.

Ликвидность для MetaTrader 5 от Just2Trade: 9 000+ инструментов на NYSE, NASDAQ, LSE и других биржах

$
0
0

Продолжает расширяться пул поставщиков ликвидности для MetaTrader 5.

На волне интереса брокеров к этой платформе группа компаний Just2Trade (генеральный партнер инвестиционного холдинга «ФИНАМ») предложила интеграционное решениена базе шлюза MetaTrader 5 Gateway to MetaTrader 5.

Ликвидность для MetaTrader 5 от Just2Trade: 9 000+ инструментов на NYSE, NASDAQ, LSE и других биржах

По словам операционного директора Just2Trade Евгения Жилина это простой и удобный способ обеспечить трейдерам прямой выход на ведущие мировые биржи, включая фондовый и срочный рынки США.

Всего компания предоставляет доступ к 9 000 финансовых инструментов: 6 000+ акций и ETF на фондовом рынке США, 700+ акций российских компаний, фьючерсы на индекс РТС, ММВБ, акции и валюту, а также прямой доступ к биржам GLOBEX, EUREX, SGX и другим.

Кроме того, по запросу доступны акции и срочные контракты на всех основных биржах Европы и Азии.

Ликвидность для MetaTrader 5 от Just2Trade: 9 000+ инструментов на NYSE, NASDAQ, LSE и других биржах

«Ликвидность от Just2Trade расширяет возможности компаний, которые предоставляют своим клиентам услуги через MetaTrader 5» — говорит Евгений Жилин:

Пожалуй, это наиболее эффективный способ решить задачу подключения интересующих рынков.
Учитывая непрерывную миграцию мировых брокеров на MetaTrader 5, мы рассчитываем на активный спрос со стороны институциональных клиентов. Открывая счет в нашей компании, брокер получает возможность торговать всеми доступными инструментами — при этом брокерская комиссия списывается только при совершении торговых операций.
Отмечу, что подключиться к нашему шлюзу штатными средствами MetaTrader 5 можно за 10 минут».

Релиз MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

$
0
0

Сегодня выходит новая версия MetaTrader 5 билд 1545:

  1. Terminal: Добавлено быстрое переключение между окнами «Инструменты» и «Тестер стратегий».

    Релиз MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

  2. Terminal: Добавлена возможность изменения цен и объемов ордеров при помощи колеса мыши:

    Релиз MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

  3. Terminal: Теперь при переходе к скачиванию мобильных терминалов запоминается список ваших торговых серверов. При последующей установке MetaTrader 5 для iPhone или Android на мобильном устройстве вам сразу будет показан готовый список серверов. Вы сможете быстро подключить существующие торговые счета. Сервер текущего подключенного счета будет показан в мобильном терминале первым.

    Релиз MetaTrader 5 build 1545: быстрое переключение между окнами и изменение цен мышью

  4. Terminal: Значительно снижена нагрузка на терминал, создаваемая невидимыми (свернутыми) графиками и объектами.
  5. Terminal: Исправлена ошибка, в некоторых случаях приводившая к некорректному срабатыванию трейлинг-стопов.
  6. Terminal: Исправлена ошибка фильтрации сделок по символу в торговой истории счета.
  7. Terminal: Исправлена ошибка отображения поля «Тип» в истории позиций.
  8. Terminal: Исправлена ошибка в формировании и представлении торговой истории в виде позиций.
  9. MQL5: Исправлено отображение пользовательских индикаторов с типом построения DRAW_COLOR_LINE, DRAW_COLOR_ZIGZAG и DRAW_COLOR_SECTION при использовании цвета CLR_NONE.
  10. MQL5: Исправлена ошибка в шаблонах при типизации константным указателем.
  11. MQL5: Исправлен контроль доступа к private и protected членам класса.
  12. Tester: Исправлено срабатывание лимитных ордеров на биржевых инструментах при выставлении ордеров хуже текущего рынка (цена покупки выше рыночной, или цена продажи ниже рыночной).
  13. Tester: Снято ограничение на тестирование пользовательских индикаторов с более чем 64 входными параметрами.
  14. Tester: Добавлен перевод пользовательского интерфейса на хинди.
  15. Обновлена документация.

Обновление начнет распространяться через торговые серверы брокеров в воскресенья или с нашего MetaQuotes-Demo сегодня ночью.

Инсталлировать и открыть за 10 секунд бесплатно демо-счета можно, скачав дистрибутив по ссылке https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mt5setup.exe

Вышли десктопный MetaTrader 5 build 1571 и MetaTrader 5 iOS build 1547

$
0
0
Что нового в десктопном Метатрейдер 5:
  1. Terminal: Обновлена витрина магазина приложений MetaTrader Market. Выбирать торговых роботов и технические индикаторы стало удобнее. Мы обновили дизайн, а также добавили подборки продуктов:

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

    Вышли десктопный MetaTrader 5 build 1571 и MetaTrader 5 iOS build 1547

  2. Terminal: Исправлено обновление клиентского терминала и работа встроенных покупок в Маркете, Сигналах и Виртуальном хостинге при использовании учетной записи Windows с ограниченными правами.
  3. Terminal: Исправлена ошибка, в некоторых случаях приводившая к нарушению сортировки истории позиций.
  4. Terminal: Оптимизировано и исправлено отображение вкладки «Активы».
  5. MQL5: Добавлена поддержка перегрузки шаблонных функцийпо параметрам.
  6. MQL5: Добавлена возможность явной специализации шаблонных функций.
  7. MQL5: Оптимизировано отображение пользовательских индикаторов с типом рисования DRAW_ZIGZAG.
  8. MQL5: В перечисление типов сделок ENUM_DEAL_TYPEдобавлены новые значения:
    • DEAL_DIVIDEND — сделка начисления дивиденда.
    • DEAL_DIVIDEND_FRANKED — сделка начисления франкированного дивиденда (не облагается налогом, налог за клиента оплачивает компания).
    • DEAL_TAX — сделка удержания налога.
  9. MQL5: Исправлено отображение пользовательских индикаторов с типом рисования DRAW_FILLING. При совпадении координат верхней и нижней линии теперь рисуется тонкая линия.
  10. MQL5: Исправлено вычисление координат объекта «Графическая метка» (Bitmap Label) при выставлении параметра CHART_SHOW в состояние false. Этот параметр устанавливается функцией ChartSetIntegerи позволяет скрыть все элементы ценового графика для создания собственного интерфейса программы.
  11. MQL5: Исправлена ошибка перекодировки 24-битных изображений при помещении их в ресурсы MQL5-приложения.
  12. MQL5: Исправлена ошибка вывода на печать структур функцией ArrayPrint.
  13. MQL5: Обновлены стандартные библиотеки MQL5.
  14. MetaEditor: Добавлен перевод пользовательского интерфейса на малайский язык.
  15. Signals: Исправлено открытие страницы сигнала в терминале при переходе с сайта MQL5.community в случае отсутствия подключения торговым счетом.
  16. Tester: Исправлены ошибки при работе функции CopyTicksв тестере стратегий.
  17. Tester: Исправлена сортировка сделок типа «Снятие» (Withdrawal) при формировании отчета тестирования.
  18. Tester: Исправлена модификация отложенных ордеров.
  19. Hosting: Исправлено отображение мастера виртуального хостинга на экранах сверхвысокого разрешения (4К).
  20. Обновлена документация.


Главное новшество мобильной версии для iPhone и iPad — представление торговой истории в виде позиций.

Ранее во вкладке «История» отражались только сделки и ордера из истории, теперь в ней представлены и позиции. Торговая платформа собирает данные по сделкам, относящимся к позиции, и группирует эти данные в единую запись.

В ней можно увидеть:

  • Время открытия и закрытия позиции, определяемое по первой и последней сделке
  • Объем позиции; если позиция закрыта частично, показывается закрытый объем и исходный объем
  • Средневзвешенную цену открытия и цену закрытия позиции
  • Суммарный финансовый результат по сделкам, относящимся к позиции

Apple Multi-Asset DMCC запускает торговлю DGCX Shanghai Gold Futures через MetaTrader 5

$
0
0

Дубайская биржа золота и сырьевых товаров DGCX запустила новый финансовый продукт — шанхайские фьючерсные контракты на золото (Shanghai Gold Futures, DSGC).

Китайский фьючерс стал впервые доступен за пределами Китая, торговля и расчеты по контрактам производятся в юанях. Первой компанией, запустившей торговлю новым финансовым инструментом в платформе MetaTrader 5, стала Apple Multi-Asset DMCC (AMA).

Apple Multi-Asset DMCC запускает торговлю DGCX Shanghai Gold Futures через MetaTrader 5

Дубай исторически является центром торговли золотом для стран Ближнего Востока и Северной Африки. Большая часть мирового торгового сообщества заинтересована в участии в китайских рынках реальных товаров и производных инструментов.

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

Запуск на бирже DGCX шанхайских фьючерсных контрактов на золото предоставляет всем сторонам, включая правительство Китая, ОАЭ и Дубая, участников рынка, Шанхайскую биржу золота SGE и Дубайскую биржу DGCX, возможность вместе развиваться, участвуя в инициативе «Один пояс и один путь».

Вот тут https://www.metaquotes.net/ru/company/newsеще больше новостей про MetaTrader 5.

Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

$
0
0
Мы выпустили очень большое обновление платформы MetaTrader 5 и приглашаем всех попробовать ее.

Скачать бесплатный терминал можно по с https://www.metatrader5.com, обновиться с сервера брокера или MetaQuotes-Demo.

Что нового:
  1. Terminal: Добавлена возможность создавать собственные финансовые инструменты. Теперь вы можете создать любой инструмент, задать для него всевозможные настройки, импортировать в него свои ценовые данные и просматривать по нему графики.

    Создание пользовательского символа
    Откройте окно управления символами через контекстное меню «Обзора рынка» и нажмите «Создать символ»:


    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640


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

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

    Здесь же присутствуют команды импорта и экспорта настроек. Вы можете легко обмениваться пользовательскими символами друг с другом или переносить символы между своими терминалами. Настройки экспортируются в текстовые файлы формата JSON.

    Управление пользовательскими символами
    Все символы отображаются в отдельной группе Custom. Чтобы изменить или удалить символ, воспользуйтесь контекстным меню в списке:

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640


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

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

    В диалоге импорта укажите путь к файлу с данными и задайте настройки:

    • Разделитель — разделитель элементов в текстовом файле.
    • Пропуск столбцов и строк — количество колонок (слева направо) и строк (сверху вниз), которое необходимо пропустить при импорте.
    • Сдвиг — сдвиг времени по часам. Эта опция используется при импортировании данных, сохраненных в другом часовом поясе.
    • Только выделенные — эта опция позволяет импортировать только выделенные в окне просмотра строки. Строки можно выделить с помощью мыши, удерживая клавиши «Ctrl» или «Shift».

    Файл с минутными барами должен иметь формат: Дата Время Open High Low Close ТиковыйОбъем Объем Спред. Например:
    2016.06.27    00:01:00    1.10024    1.10136    1.10024    1.10070    18    54000000    44
    2016.06.27    00:02:00    1.10070    1.10165    1.10070    1.10165    32    55575000    46
    2016.06.27    00:03:00    1.10166    1.10166    1.10136    1.10163    13    13000000    46
    2016.06.27    00:04:00    1.10163    1.10204    1.10155    1.10160    23    51000000    41Для собственного символа вы можете использовать данные любого существующего инструмента. Экспортируйте их (эта возможность была добавлена в предыдущей версии платформы), при необходимости модифицируйте, а затем импортируйте обратно.

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

    Ценовые данные пользовательских символов сохраняются в отдельном каталоге Custom (вне каталогов данных конкретных торговых серверов): C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

    Использование собственных символов
    Использование собственных символов практически не отличается от тех, что предоставляет брокер. Они также показываются в окне «Обзор рынка», по ним можно открывать графики, на которые можно накладывать индикаторы и аналитические объекты. При этом по пользовательским символам нельзя торговать.

    Тестирование стратегий на собственных символах
    Созданные собственные символы можно использовать для проверки торговых роботов и индикаторов в тестере стратегий.

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

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

    При расчете маржи и прибыли тестер стратегий автоматически использует доступные кросс-курсы. Например, мы создали собственный символ AUDCAD.custom с типом расчета маржиForex, и валюта нашего счета — USD.

    Тогда на основе имени форексногоинструмента тестер ищет необходимые символы в следующем порядке:
    1. сначала ищутся символы вида AUDUSD.custom (для расчёта маржи) и USDCAD.custom (для расчёта прибыли по сделкам)
    2. затем, если какого-то из этих инструментов нет, ищется первый символ, который соответствует по имени необходимым валютным парам  — AUDUSD и USDCAD соответственно. Например, найдены AUDUSD.b и NZDUSD.b — значит, именно курсы этих инструментов будут использоваться при расчетах маржи и прибыли.
    Для инструментов с остальными типами расчета маржи (CFD, Futures, Stock Exchange) необходимо наличие валютной пары для пересчета валюты инструмента в валюту депозита. Например, мы создали собственный символ с валютой прибыли и валютой маржи, выраженными в британских функтах (GBP), а валютой депозита является швейцарский франк (CHF).

    Тогда поиск инструментов для тестирования ведется в следующем порядке:
    1. Проверяется наличие торгового инструмента, соответствующего валютной паре GBPCHF (GBP vs CHF).
    2. Если он отсутствует, то ищется первый торговый инструмент, который соответствует по имени валютной паре GBPCHF, например GBPCHF.b или GBPCHF.def.
    При тестировании на собственных инструментах убедитесь, что на торговом счете доступны все необходимые валютные пары для расчетов. В противном случае расчет финансовых результатов и залоговых требований при тестировании будет невозможен.

    Больше возможностей в следующих версиях платформы
    Работа над собственными инструментами еще не завершена, и в следующих версиях платформы появятся новые функции. Вы сможете импортировать историю в пользовательские символы прямо из экспертов, а также транслировать по ним данные (вбрасывать котировки) в режиме реального времени.

  2. Terminal: Добавлена фильтрация ленты сделок по объему.

    Из ленты можно скрыть сделки с объемом меньше указанного. Таким образом, в ленте останутся только крупные сделки, оказывающие наибольшее влияние рынок.

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

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

    Задать минимальный объем можно также через контекстное меню ленты сделок.

  3. Terminal: Добавлена возможность привязки стакана цен к активному графику. Каждый раз, когда вы будете переключаться к просмотру графика какого-либо финансового инструмента, в стакане цен будет автоматически включаться точно такой же инструмент.

    Вам не придется отдельно открывать стакан цен для каждого нового символа.

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

  4. Terminal: Исправлено обновление панелей инструментов после сворачивания и разворачивания окна терминала.

  5. Terminal: Исправлено формирование торговой истории позиций при пересечении тикетов сделок и позиций.

  6. MQL5: Добавлена возможность профилирования MQL5-программ на ценовой истории. Это позволит быстро проверять производительность программ без ожидания новых тиков.

    При профилировании на реальных данных программа запускается на обычном графике в терминале. Многие программы, в особенности индикаторы, осуществляют какие-либо расчеты только при приходе нового тика (OnTick, OnCalculate).

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

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

  7. MQL5: Добавлена поддержка Объединения (union). Это особый тип данных, который состоит из нескольких переменных, разделяющих одну и ту же область памяти. Следовательно, объединение обеспечивает возможность интерпретации одной и той же последовательности битов двумя (или более) различными способами.

    Объявление объединения начинается с ключевого слова union.
    union LongDouble
    {
      long   long_value;
      double double_value;
    };
    В отличие от структуры, разные члены объединения относятся к одному и тому же участку памяти. В данном примере объявлено объединение LongDouble, в котором значение типа long и значение типа double разделяют одну и ту же область памяти.

    Важно понимать — невозможно сделать так, чтобы это объединение хранило одновременно целочисленное значение long и вещественное double (как это было бы в структуре), поскольку переменные long_value и double_value накладываются (в памяти) друг на друга.

    Но зато MQL5-программа в любой момент может обрабатывать информацию, содержащуюся в этом объединении, как целочисленное значение (long) или как вещественное (double). Следовательно, объединение позволяет получить два (или больше) варианта представления одной и той же последовательности данных.

    При объявлении объединения компилятор автоматически выделяет область памяти, достаточную для хранения в объединении переменных самого большого по объему типа. Для доступа к элементу объединения используется тот же синтаксис, как и для структур – оператор «точка».

  8. MQL5: Добавлена автоматическая генерация неявного оператора копирования для объектов структур и классов. Теперь компилятор автоматически создает операторы копирования, что позволяет писать для объектов простые записи вида b=a.

    В неявном операторе осуществляется почленное копирование объектов.

    • Если член является объектом, вызывается соответствующий для этого объекта оператор копирования.
    • Если член является массивом объектов, то перед вызовом соответствующего оператора копирования для каждого элемента принимающий массив увеличивается или уменьшается до нужного размера через ArrayResize.
    • Если член является массивом простых типов, для копирования используется функция ArrayCopy.
    • Если член является указателем на объект, копируется сам указатель, а не объект, на который он указывает.

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

  9. MQL5: Оптимизировано использование памяти при обращении к ценовой истории из экспертов при помощи Copy* функций. При работе с большими объемами данных потребление памяти будет снижено многократно.

  10. MQL5: Теперь функция TimeToStructвозвращает булево значение, позволяя проверять успешность конвертации datetime в
    MqlDateTime.

  11. MQL5: Добавлен запрет на использование функций FileWriteStructи FileReadStructдля структур, содержащих строки, динамические массивы, объекты и указатели.

  12. MQL5: Добавлены коды ответа:

    • TRADE_RETCODE_REJECT_CANCEL — запрос на активацию отложенного ордера отклонен, а сам ордер отменен
    • TRADE_RETCODE_LONG_ONLY — запрос отклонен, так как на символе установлено правило «Разрешены только длинные позиции»
    • TRADE_RETCODE_SHORT_ONLY — запрос отклонен, так как на символе установлено правило «Разрешены только короткие позиции»
    • TRADE_RETCODE_CLOSE_ONLY — запрос отклонен, так как на символе установлено правило «Разрешено только закрывать существующие позиции»
  13. MQL5: Добавлено новое значение, возвращаемое функцией SymbolInfoInteger c параметром SYMBOL_ORDER_MODE. SYMBOL_ORDER_CLOSEBY — флаг возможности выставления ордеров на закрытие позиции встречной (Close By).

  14. MQL5: В перечисление ENUM_SYMBOL_INFO_INTEGER добавлено булево свойство SYMBOL_CUSTOM. Оно позволяет узнать, является ли символ пользовательским. Для получения свойства используйте функцию SymbolInfoInteger.

  15. MQL5: Добавлена возможность получения причины создания ордера, сделки и позиции.

    Новые свойства

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

  16. MQL5: Оптимизирована синхронизация и доступ к тиковой истории.

  17. MQL5: Исправлена ошибка отдачи тиков в статический массив в функции CopyTicksRange. Ранее в этом случае всегда возвращалось 0 тиков.

  18. MQL5: Внесены различные исправления в библиотеку нечеткой логики Fuzzy.

  19. Signals: Исправлено открытие сигнала с сайта при отсутствии подключения торговым счетом.

  20. Tester: Оптимизирована и значительно ускорена работа с историей ордеров и сделок. При работе с большим объемом данных (десятки тысяч записей в истории и более) скорость работы увеличится многократно.

  21. Tester: Исправлено вычисление времени удержания позиции в отчёте тестирования.

  22. MetaEditor: В отладчике исправлено отображение содержимого статических массивов-членов класса.

  23. MetaEditor: Добавлен список точек останова в отлаживаемой программе. Для перехода к нему используйте контекстное меню вкладки «Отладка»:

    Создание и тестирование кастомных инструментов в MetaTrader 5 build 1640

    Для перехода к любой из точек дважды нажмите на ней.

  24. Обновлена документация.

Создание и тестирование пользовательских символов в MetaTrader 5

$
0
0

У нас хорошая новость — пользовательские/кастомные символы в MetaTrader 5 дали новые возможности для разработки торговых систем и анализа любых финансовых рынков.

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

По сути, целый класс чистых аналитических систем типа AmiBroker, Wealthlab, Multicharts и тд теряют свою привлекательность. Любой анализ теперь можно делать бесплатно. Причем с каждой версией мы расширяем объем функционала и удобства.

Создание пользовательского символа

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

Создание и тестирование пользовательских символов в MetaTrader 5

После нажатии кнопки «Создать символ» вам останется только задать имя пользовательского символа и, при необходимости, изменить нужные свойства в Спецификации контракта.

Создание и тестирование пользовательских символов в MetaTrader 5

Все пользовательские символы помещаются в дереве Символов в отдельную директорию <Custom> и всегда находятся в своем разделе, независимо от брокера, к которому вы в данный момент подключены.

Сами ценовые данные пользовательских символов сохраняются в отдельном каталоге Custom, вне каталогов конкретных торговых серверов:

C:\Users\[windows account]\AppData\Roaming\MetaQuotes\Terminal\[instance id]\bases\Custom

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

 

Настройка собственного символа

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

Создание и тестирование пользовательских символов в MetaTrader 5

Импорт истории

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

В окне Символы выбираем вкладку Бары или Тики, в зависимости от того, в каком виде мы хотим подготовить историю. Делаем запрос за нужный период и производим Экспорт.

Для получения баров необходимо выбрать таймфрейм M1, так как вся история в MetaTrader 5 строится на минутных данных.

Создание и тестирование пользовательских символов в MetaTrader 5

Экспорт производится в виде текстового CSV-файла с именем вида EURUSD_M1_201701020000_201707251825.csv, которое содержит имя символа, название таймфрейма и границы экспортированной истории с точностью до минуты.

Вот как выглядит формат при экспорте баров:

<DATE>	        <TIME>	        <OPEN>	<HIGH>	<LOW>	<CLOSE>	<TICKVOL><VOL>	     <SPREAD>
2017.01.02	00:03:00	1.05141	1.05141	1.05141	1.05141	6	15000000	118
2017.01.02	00:04:00	1.05141	1.05141	1.05141	1.05141	2	5000000	        112
2017.01.02	00:05:00	1.05158	1.05158	1.05148	1.05158	10	17000000	101
2017.01.02	00:06:00	1.05148	1.05158	1.05148	1.05158	7	13000000	101

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

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

<DATE>          <TIME>          <BID>   <ASK>   <LAST>  <VOLUME>
2017.07.03      00:03:47.212    1.14175 1.14210 0.00000 0       
2017.07.03      00:03:47.212    1.14168 1.14206 0.00000 0       
2017.07.03      00:03:47.717    1.14175 1.14206 0.00000 0       
2017.07.03      00:03:54.241    1.14175 1.14205 0.00000 0       
2017.07.03      00:03:57.982    1.14165 1.14201 0.00000 0       
2017.07.03      00:04:07.795    1.14175 1.14201 0.00000 0       
2017.07.03      00:04:55.432    1.14164 1.14200 0.00000 0       
2017.07.03      00:14:33.743    1.14173 1.14203 0.00000 0       
2017.07.03      00:14:33.743    1.14173 1.14201 0.00000 0       
2017.07.03      00:16:44.901    1.14174 1.14195 0.00000 0       

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

Для импорта историиделаем аналогичные шаги — в папке Custom\<Пользовательская_группа> находим наш пользовательский символ EURUSD_my, переходим на вкладку Тики, выбираем нужный CSV-файл и жмем кнопку «Импортировать тики» (для импорта баров всё аналогично).

Создание и тестирование пользовательских символов в MetaTrader 5

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

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

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

Тестирование стратегий на пользовательском символе

Многопоточный тестер стратегий MetaTrader 5 позволяет тестировать на реальных тикахстратегии, торгующие на многих финансовых инструментах. Воспользуйтесь всеми его преимуществами для тестирования стратегий на собственных символах.

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

Всё делается так же, как и с обычными торговыми символами, которые предоставляет ваш брокер.

Создание и тестирование пользовательских символов в MetaTrader 5

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

При расчете маржи и прибыли тестер стратегий автоматически использует доступные кросс-курсы. Например, мы создали собственный символ AUDCAD.custom с типом расчета маржи Forex, и валюта нашего счета — USD.

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

  1. сначала ищутся символы вида AUDUSD.custom (для расчёта маржи) и USDCAD.custom (для расчёта прибыли по сделкам)
  2. затем, если какого-то из этих инструментов нет, ищется первый символ, который соответствует по имени необходимым валютным парам  — AUDUSD и USDCAD соответственно. Например, найдены AUDUSD.b и USDCAD.b — значит, именно курсы этих инструментов будут использоваться при расчетах маржи и прибыли.
Для инструментов с остальными типами расчета маржи (CFD, Futures, Stock Exchange) необходимо наличие валютной пары для пересчета валюты инструмента в валюту депозита.

Например, мы создали собственный символ с валютой прибыли и валютой маржи, выраженными в британских функтах (GBP), а валютой депозита является швейцарский франк (CHF).

Тогда поиск инструментов для тестирования ведется в следующем порядке:
  1. Проверяется наличие торгового инструмента, соответствующего валютной паре GBPCHF (GBP vs CHF).
  2. Если он отсутствует, то ищется первый торговый инструмент, который соответствует по имени валютной паре GBPCHF, например GBPCHF.b или GBPCHF.def.

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

В противном случае расчет финансовых результатов и залоговых требований при тестировании будет невозможен.

Оптимизация на пользовательском символе в локальной сети

Для оптимизации торговых стратегий на пользовательских символах можно помимо собственных агентов задействовать агентов из локальной сети и удаленных агентов. Таким образом, вы сможете использовать еще одно преимущество тестера стратегий MetaTrader 5 и сократить время на поиски оптимальных параметров вашей торговой системы.

Использование MQL5 Cloud Network для оптимизации на собственных символах не разрешено. Это связано с тем, что на компьютерах разных трейдеров могут находиться пользовательские символы с одинаковыми именами, но разными ценовыми историями.

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

Функции для работы с пользовательскими символами

Работать с собственными символами можно и помощью языка MQL5,  для этого служат функции из раздела Пользовательские символы. С помощью MQL5-программы можно быстро создавать нужные вам финансовые инструменты с заданными свойствами на основе данных из сторонних источников.

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

Где скачать MetaTrader 5

Получить доступ ко всем возможностями можно за 1 минуту, бесплатно и без регистраций https://www.metatrader5.com/ru/download

Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730

$
0
0
Скачать бесплатно и открыть демку за секунды можно тут: https://www.metatrader5.com/

Обновление содержит следующие изменения:
  1. В MetaEditor появились полноценные проекты. Разрабатывать программы стало значительно удобнее.

    Теперь в качестве проекта не выступает основной MQ5 файл программы. Проект — это отдельный файл «MQPROJ», в котором хранятся настройки программы, параметры компиляции и информация обо всех используемых файлах. Доступ к основным настройкам проекта организован через отдельное диалоговое окно, больше нет необходимости указывать их в исходном коде через #property.

    Для удобной работы с проектом предусмотрена отдельная вкладка в Навигаторе. В ней по категориям отображаются все используемые файлы: включаемые, ресурсные, заголовочные и т.д. При этом файлы добавляются в навигатор проекта автоматически. Например, если вы включите новый MQH-файл в код, он будет автоматически показан в разделе «Dependencies» навигатора.

    Мы сразу же предусмотрели возможность работы с новыми проектами в онлайн хранилище MQL5 Storage. Теперь намного удобнее заниматься разработкой больших проектов вместе с другими участникам сообщества MQL5.community.

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

    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730

    При компиляции проекта в Shared Project исполняемый файл EX5 автоматически копируется в локальный каталог Experts, Indicators или Scripts, в зависимости от типа программы. Вы можете сразу запустить программу на графике, не копируя файлы каждый раз вручную.


    Изменения в работе с хранилищем MQL5 Storage

    Для реализации полноценной работы с групповыми проектами был полностью переделан протокол взаимодействия с хранилищем MQL5 Storage. К сожалению, после обновления на новую версию платформы вам потребуется заново извлечь все данные из хранилища. Сами данные, которые в нем хранятся, не будут затронуты и не потеряются.

    Перед обновлением на новую версию платформы мы рекомендуем отправить все локальные изменения в хранилище (выполнить Commit).

    Команда «Извлечь данные из хранилища» (Checkout from Storage) теперь недоступна. Для извлечения данных используются команды «Активировать MQL5 Storage» и «Получить файлы из хранилища»:

    • Если в текущей копии MetaEditor вы еще не пользовались хранилищем, нажмите «Активировать MQL5 Storage» в контекстном меню окна «Навигатор». Все имеющиеся в вашем хранилище каталоги и файлы будут перенесены на локальный компьютер.
    • Если вы уже работаете с хранилищем, то для извлечения данных нажмите «Получить файлы из хранилища» в контекстном меню конкретного проекта или корневого элемента MQL5 в окне «Навигатор».

    Новые проекты: пример создания и подробности работы

    В MetaEditor появилась новая сущность — собственно проект. Это файл с расширением mqproj, в котором хранятся общие свойства программы, а также информация обо всех используемых файлах. Теперь свойствами программы можно удобно управлять в отдельном диалоговом окне MetaEditor, а не изменять их вручную в исходном коде (директивы #property).

    Если у вас уже есть разработки, то самый простой способ попробовать новые проекты — воспользоваться командой «Новый проект из исходного файла».


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    В том же каталоге, что и выбранный исходный файл, будет создан одноименный файл проекта с расширением mqproj. В проект автоматически добавятся основные свойства программы, указанные в виде #property в исходном файле: имя, копирайт, версия, ссылка на разработчика и описание.

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


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    В свойствах проектов появились две новые опции для компиляции MQL5-программ:

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

    Для работы с проектом предназначена отдельная вкладка «Проект» в окне «Навигатор». В ней удобно показываются все файлы, используемые в проекте. При генерации проекта из исходного файла в раздел «Dependencies» автоматически добавляются все используемые включаемые файлы (указанные при помощи директивы #include в основном MQ5-файле и во всех включенных в него файлах).

    При добавлении новых включаемых файлов в исходный код, они также будут появляться в Навигаторе проекта. В раздел Headers будут добавляться используемые заголовочные файлы, а в раздел Resources — изображения, звуки и другие MQL5-программы, включенные в проект в виде ресурсов. В разделе Sources показываются MQ5-файлы с исходным кодом. В раздел Settings and files можно добавлять другие файлы, например, настройки для тестирования или шаблоны для графиков.

    Для добавления существующих файлов в проект и удаления из него файлов воспользуйтесь командами контекстного меню. Будьте внимательны при удалении: вы можете убрать файл из проекта (убрать привязку) или полностью удалить его с жесткого диска:


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    Новый проект создать также легко, как и обычную MQL5-программу. Нажмите «Новый проект», а затем в Мастере MQL5 выберите тип создаваемой программы и укажите ее свойства (имя, обработчики событий и т.п.).

    Для получения исполняемого файла EX5 вы можете открыть проект и выполнить команду компиляции (F7) или же, как раньше, открыть основной MQ5-файл программы и скомпилировать его.


    Групповые проекты в MQL5 Storage: подробности работы

    Для работы с групповыми проектами предусмотрен раздел Shared Projects. Если у вас еще не подключено хранилище, выполните в контекстном меню этой папки команду Activate MQL5 Storage. MetaEditor сразу же проверит, есть ли в вашем хранилище сохраненные данные, а также доступны ли вам какие-либо групповые проекты. Имеющиеся данные будут сразу же извлечены из хранилища и загружены на компьютер (Checkout). Доступные групповые проекты будут показаны в разделе Shared Projects; чтобы получить их, нажмите «Извлечь файлы из хранилища» в контекстном меню.

    Для создания нового группового проекта выберите папку Shared Projects и нажмите «Новый проект»:


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


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

    Сразу после создания проект будет автоматически добавлен в хранилище MQL5 Storage. Используемые файлы стандартной библиотекив хранилище не добавляются, при необходимости вы можете добавить их вручную.

    Чтобы разрешить другим участникам работать с проектом, откройте его свойства: здесь можно назначить права конкретным пользователям (указать логин MQL5.community), а также задать общие параметры групповой работы:

    • Приватный проект
    • К проекту может присоединиться любой
    • Участие в проекте по запросу


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    Для удобства работы при компиляции группового проекта конечный исполняемый файл (EX5) автоматически копируется в папку Experts, Indicators или Scripts в зависимости от типа программы. Таким образом, вы сразу можете запустить программу в терминале без ее ручного копирования в нужный каталог.


    Публичные проекты в MQL5 Storage: участие в разработках

    Как уже упоминалось выше, у каждого группового проекта в MQL5 Storage есть настройки публичности: проект может быть приватным или же открытым для участия других пользователей. Теперь все проекты, к которым можно свободно присоединиться, отображаются в отдельной вкладке «Публичные проекты».

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


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730

     

    Каждый присоединившийся пользователь получает права только на просмотр проекта. Для получения прав на отправку собственных изменений в хранилище обратитесь к автору проекта. Чтобы узнать его логин, откройте свойства проекта через контекстное меню.
  2. Terminal: Добавлена возможность создавать синтетические финансовые инструменты — инструменты на основе одного или нескольких имеющихся. Нужно просто задать формулу для расчета котировок, и платформа в режиме реального времени будет генерировать тики синтетического инструмента, а также создаст его минутную историю.


    Как это происходит

    • Вы создаете синтетический инструмент и задаете для него формулу.
    • Платформа будет рассчитывать его тики с частотой 10 раз в секунду (и только если изменилась цена хотя бы одного инструмента, входящего в формулу).
    • Платформа рассчитает историю минутных баров (за два последних месяца) на основе минутных баров инструментов, входящих в его формулу. Все новые бары (текущий и последующий) будут строиться в режиме реального времени на основе генерируемых тиков синтетического инструмента.

    Например, вы можете создать инструмент, который будет показывать индекс доллара (USDX). Его формула будет выглядеть следующим образом:

    50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)

    Примечание: в исходной формуле индекса доллара используются пары USDEUR и USDGBP. Поскольку в платформе есть только обратные валютные пары, в формуле синтетического инструмента для них используется отрицательная степень и цена Ask вместо Bid.

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


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    Создайте новый пользовательский инструмент, откройте его спецификацию и укажите формулу:


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    Для удобства редактор формул показывает список возможных вариантов по мере ввода имен инструментов и функций.

    Расчет тиков и минутных баров синтетического инструмента начнется при его добавлении в «Обзор рынка». При этом в «Обзор рынка» сразу же автоматически добавляются все символы, необходимые для его расчета. В журнал платформы будет добавлена запись о начале расчета: Synthetic Symbol USDX: processing started.
    • Расчет синтетического инструмента прекращается при его скрытии из «Обзора рынка».
    • Символы, которые в настоящий момент используются для расчета синтетических инструментов, невозможно скрыть из «Обзора рынка».

    Расчет котировок в реальном времени
    Каждые 100 мс (десять раз в секунду) проверяется, изменилась ли цена хотя бы одного из инструментов, участвующих в формуле. Если да, происходит расчет цены синтетического инструмента и генерируется тик. Расчет осуществляется параллельно в трех потоках для цен Bid, Ask и Last. Например, если в формуле указан EURUSD*GBPUSD, расчет цен синтетического инструмента будет следующим:

    • Bid — bid(EURUSD)*bid(GBPUSD)
    • Ask — ask(EURUSD)*ask(GBPUSD)
    • Last — last(EURUSD)*last(GBPUSD)

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

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

    Как только трейдер добавляет синтетический инструмент в Обзор рынка, платформа проверяет, есть ли для него рассчитанная минутная история. Если нет, она будет создана для последних 60 дней — это около 50 000 баров. Если в настройках платформы в параметре «Макс. баров в окне» указана меньшая величина, то будет использовано именно это ограничение.

    Если часть баров за этот период уже построена, то платформа досоздаст новые бары. Более глубокая история создается только при попытке просмотреть соответствующий временной период на графике (если прокрутить его назад или запросить историю из MQL5-программы).

    История минутных баров синтетического инструмента рассчитывается на основе минутных баров (не тиков) инструментов, входящих в его формулу. Например, чтобы посчитать цену Open минутного бара синтетического инструмента, платформа берет цены Opеn инструментов, входящих в его формулу. Аналогично производится расчет для цен High, Low и Close.

    Если для какого-либо инструмента из формулы отсутствует нужный минутный бар, платформа возьмет для расчета цену Close предыдущего бара. Например, используются три инструмента: EURUSD, USDJPY и GBPUSD. Если при расчете бара, соответствующего минуте 12:00, для инструмента USDJPY такого минутного бара не окажется, при расчете будут использованы следующие цены:

    • Для Open — EURUSD Open 12:00, USDJPY Close 11:59, GBPUSD Open 12:00
    • Для High — EURUSD High 12:00, USDJPY Close 11:59, GBPUSD High 12:00
    • Для Low — EURUSD Low 12:00, USDJPY Close 11:59, GBPUSD Low 12:00
    • Для Close — EURUSD Close 12:00, USDJPY Close 11:59, GBPUSD Close 12:00

    Если минутный бар отсутствует у всех инструментов из формулы, соответствующий минутный бар синтетического инструмента не будет рассчитан.

    Построение новых минутных баров
    Все новые бары (текущий и последующие) синтетического инструмента создаются на основе генерируемых тиков. Цена, по которой строятся бары, зависит от параметра «Построение графиков» в спецификации:



    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730



    Какие операции можно использовать в формуле инструмента
    В формуле можно использовать ценовые данные, а также некоторые свойства имеющихся символов (предоставляемых брокером). Для этого укажите:

    • Имя символа — в зависимости от того, какая цена синтетического инструмента рассчитывается, в формуле будет использована цена Bid, Ask или Last указанного инструмента. Например, если указать EURUSD*GBPUSD, то Вid будет рассчитываться как bid(EURUSD)*bid(GBPUSD), а цена Ask — как ask(EURUSD)*ask(GBPUSD).
    • bid(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Bid указанного символа. Фактически этот вариант соответствует предыдущему (без указания типа цены).
    • ask(имя символа) — для расчета цены Bid синтетического инструмента будет принудительно использоваться цена Ask указанного символа. Для расчета цены Ask наоборот будет использоваться цена Bid указанного инструмента. Для расчета цены Last будет использоваться цена Last указанного инструмента. Например, если указать ask(EURUSD)*GBPUSD, расчет будет следующим:
      • Вid = ask(EURUSD)*bid(GBPUSD)
      • Ask = bid(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • last(имя символа) — цена Last указанного символа будет использоваться при расчетах всех цен синтетического инструмента (Bid, Ask и Last). Например, если указать last(EURUSD)*GBPUSD, расчет будет следующим:
      • Вid = last(EURUSD)*bid(GBPUSD)
      • Ask = last(EURUSD)*ask(GBPUSD)
      • Last = last(EURUSD)*last(GBPUSD)
    • volume(имя символа) — в формуле будет использован объем тика указанного инструмента. Убедитесь, что информация об объемах транслируется для указанного инструмента.
    • point(имя символа) — в формулу будет подставлен размер минимального изменения цены указанного инструмента.
    • digits(имя символа) — в формулу будет подставлено количество знаков после запятой в цене указанного инструмента.

    Если символ имеет сложное название (содержит дефисы, точки и т.п.), оно должно быть заключено в кавычки. Например, «RTS-6.17».В формуле можно использовать арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/) и остаток от деления (%). Например, EURUSD+GBPUSD означает, что цена будет рассчитываться как сумма цен EURUSD и GBPUSD. Также в формуле можно использовать унарный минус для смены знака, например: -10*EURUSD.

    Для арифметических операций существует приоритет их выполнения:

    • Операции умножения, деления и остатка от деления выполняются первыми, далее выполняются операции сложения и вычитания.
    • Операции выполняются слева направо. Если в формуле используется несколько операций, имеющих одинаковый приоритет (например, умножение и деление), первой будет выполнена операция слева.
    • Для изменения приоритета операций можно использовать скобки ( и ). Выражения в скобках имеют наивысший приоритет при расчете. Для них также действует принцип слева направо: первыми вычисляются выражения в скобках, находящиеся в формуле левее.

    Также в формуле можно использовать константы:

    • Числовые (целочисленные и вещественные с точкой). Например, EURUSD*2+GBPUSD*0.7.
    • Свойства символа _Digits и _Point. Они подставляют в формулу свойства пользовательского символа из спецификации: _Digits — количество знаков после запятой в цене инструмента, _Point — размер минимального изменения цены инструмента.

    Также в формуле можно использовать все математические функции, поддерживаемые в MQL5, кроме MathSrand, MathRand и MathIsValidNumber. Для всех функций используются только короткие имена: fabs(), acos(), asin() и т.д.
  3. Terminal: Добавлена возможность вбрасывать котировки для пользовательских инструментов в режиме реального времени. Теперь на MQL5 можно написать эксперта, который будет вбрасывать любые котировки по заданному пользовательскому инструменту. Для этого используется новая функция CustomTicksAdd.
    int  CustomTicksAdd(   const string           symbol,       // имя символа   const MqlTick&         ticks[]       // массив с тиковыми данными, которые необходимо применить к пользовательскому инструменту   );
    Функция CustomTicksAdd позволяет транслировать тики так, как если бы они приходили от сервера брокера. Данные записываются не напрямую в базу тиков, а отправляются в окно «Обзор рынка». И уже из него терминал сохраняет тики в своей базе. При большом объеме данных, передаваемых за один вызов, функция меняет свое поведение для экономии ресурсов. Если передается более 256 тиков, данные делятся на две части. Первая часть (большая) сразу напрямую записывается в базу тиков (как это делает CustomTicksReplace). Вторая часть, состоящая из последних 128 тиков, передается в окно «Обзор рынка» и после этого сохраняется терминалом в базе.
  4. MQL5: Добавлен новый онлайн-сервис для дополнительной защиты MQL5-программ — MQL5 Cloud Protector. Эта защита аналогична используемой в крупнейшем магазине торговых приложений MetaTrader Маркет, где присылаемые продавцами файлы продуктов (EX5) дополнительно компилируются в нативный код.

    Теперь использовать защиту как в Маркете может каждый. Достаточно выполнить команду Сервис — MQL5 Cloud Protector в MetaEditor. Единственное отличие этой защиты от Маркета заключается в том, что файл не привязывается к компьютеру пользователя. Файлы, защищенные через MQL5 Cloud Protector, можно запускать на любых компьютерах как обычные EX5-файлы.Сервис MQL5 Cloud Protector работает безопасно. Дополнительная защита накладывается только на уже скомпилированный файл. Исходный код никуда не передается. Сначала программа компилируется в EX5-файл на компьютере пользователя, затем скомпилированный файл по зашифрованному соединению отправляется в сервис, защищается и возвращается обратно пользователю.

    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730

  5. Terminal: Добавлено отображение цен High и Low в Обзоре рынка. По умолчанию, эти колонки выключены. Включить их можно через контекстное меню:


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730



    Для инструментов, чьи графики строятся по ценам Bid (указано в спецификации), показываются цены Bid High и Bid Low. Для инструментов, чьи графики строятся по ценам Last, показываются Last High и Last Low.

    Вместе с колонками High/Low автоматически включается колонка Last, если в Обзоре рынка есть хотя бы один инструмент, чьи графики строятся по ценам Last.
  6. Terminal: Добавлена возможность редактирования тиковой истории пользовательских финансовых инструментов. Нажмите «Символы» в контекстном меню Обзора рынка, выберите пользовательский инструмент и запросите необходимый интервал данных на вкладке «Тики».

    • Чтобы изменить значение, дважды нажмите на него.
    • Для добавления или удаления записей воспользуйтесь контекстным меню.
    • Чтобы удалить сразу несколько баров/тиков, выделите их мышью, удерживая клавишу Shift или Ctrl+Shift.



    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    Для удобства измененные записи подсвечиваются:

    • зеленый фон — измененная запись
    • серый фон — удаленная запись
    • желтый фон — добавленная запись

    Для сохранения изменений нажмите «Применить изменения» в нижней части окна.
  7. Terminal: Добавлено отображение предварительных счетов в дереве Навигатора.

    Трейдеры могут отправлять брокеру запросы на открытие реальных счетов прямо из десктопных терминалов. Для этого достаточно заполнить простую форму с контактными данными как при открытии демо-счета. После этого для трейдера создается специальный предварительный счет. Далее брокер связывается с трейдером для оформления взаимоотношений и создает из предварительного счета реальный.


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


     

  8. Terminal: Добавлен показ времени в миллисекундах в Окне котировок
  9. Terminal: Ускорено сканирование доступных серверов в диалоге открытия нового счета.
  10. Terminal: Исправлено отображение графического объекта «Трендовая линия» с включенными опциями «Луч влево» и «Луч вправо».
  11. Terminal: Оптимизирована работа с большим количеством писем внутренней почты (сотни тысяч).
  12. Terminal: Оптимизирована работа терминала с большим количеством торговых инструментов (50 тысяч и более).
  13. Terminal: Добавлена оптимизация тиковой истории пользовательских инструментов, выполняемая после редактирования истории.
  14. MQL5: Добавлены функции для работы с пользовательскими финансовыми инструментами.

    ФункцияДействие
    CustomSymbolCreateСоздает пользовательский символ с указанным именем в указанной группе
    CustomSymbolDeleteУдаляет пользовательский символ с указанным именем
    CustomSymbolSetIntegerУстанавливает для пользовательского символа значение свойства целочисленного типа
    CustomSymbolSetDoubleУстанавливает для пользовательского символа значение свойства вещественного типа
    CustomSymbolSetStringУстанавливает для пользовательского символа значение свойства строкового типа
    CustomSymbolSetMarginRateУстанавливает для пользовательского символа коэффициенты взимания маржи в зависимости от типа и направления ордера
    CustomSymbolSetSessionQuoteУстанавливает время начала и время окончания указанной котировочной сессии для указанных символа и дня недели
    CustomSymbolSetSessionTradeУстанавливает время начала и время окончания указанной торговой сессии для указанных символа и дня недели
    CustomRatesDeleteУдаляет все бары в указанном временном интервале из ценовой истории пользовательского инструмента
    CustomRatesReplaceПолностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlRates
    CustomRatesUpdateДобавляет в историю пользовательского инструмента отсутствующие бары и заменяет существующие бары данными из массива типа MqlRates
    CustomTicksAddДобавляет в ценовую историю пользовательского инструмента данные из массива типа MqlTick. Пользовательский символ должен быть выбран в окне MarketWatch (Обзор рынка)
    CustomTicksDeleteУдаляет все тики в указанном временном интервале из ценовой истории пользовательского инструмента
    CustomTicksReplaceПолностью заменяет ценовую историю пользовательского инструмента в указанном временном интервале данными из массива типа MqlTick
  15. MQL5: В Стандартную библиотеку добавлены Шаблонные коллекции данных, которые содержат классы и интерфейсы для определения коллекций на основе шаблонов. Новые строго типизированные коллекции обеспечивают большее удобство в разработке программ и высокую производительность работы с данными.

    Библиотека размещается в рабочем каталоге терминала в папке Include\Generic.

  16. MQL5: Добавлена поддержка шаблонов для данных типа union.
  17. MQL5: Добавлено свойство торгового инструмента SYMBOL_VISIBLE. Вызов SymbolInfoInteger(symbol, SYMBOL_VISIBLE) вернет false, если указанный символ не виден в Обзоре рынка.
  18. MQL5: Добавлено событие CHARTEVENT_MOUSE_WHEEL. Событие вызывается при прокрутке или нажатии колеса мыши на графике (если для него установлено свойство CHART_EVENT_MOUSE_WHEEL=true).
  19. MQL5: Добавлены новые свойства графика:

    • CHART_EVENT_MOUSE_WHEEL — включение/отключение генерации события прокрутки и нажатия колеса мыши на графике CHARTEVENT_MOUSE_WHEEL. Возможные значения: 0 и 1.
    • CHART_CROSSHAIR_TOOL — включение/отключение возможности переключения курсора в режим «Перекрестие» по нажатию средней клавиши мыши. Возможные значения: 0 и 1.
    • CHART_CONTEXT_MENU — включение/отключение отображения контекстного меню при нажатии правой клавишей мыши на графике. Возможные значения: 0 и 1.
  20. MQL5: Теперь при вычислении масштаба окна индикатора не учитываются буферы рисования со стилем DRAW_NONE.
  21. MQL5: Добавлена генерация события CHARTEVENT_CHART_CHANGEпри выставлении свойства CHART_SCALEFIX (фиксированный масштаб) для графика.
  22. MQL5: Добавлена функция ArraySwap, позволяющая быстро обменяться содержимым динамических массивов.
    Функция принимает динамические массивы одинакового типа и одинаковых размерностей. Для многомерных массивов количество элементов во всех измерениях кроме первого должно совпадать.
  23. MQL5: Добавлено новое свойство TERMINAL_RETRANSMISSION — процент повторно отправляемых сетевых пакетов (ретрансмитов) в TCP/IP протоколедля всех запущенных приложений и служб на данном компьютере. Даже в самой быстрой и правильно настроенной сети происходят потери пакетов и, как следствие, отсутствие подтверждений о доставке пакетов между получателем и отправителем. В таких случаях производится повторная отправка «потерянного» пакета.

    Терминал не рассчитывает этот показатель, он запрашивается раз в минуту из операционной системы. Он не является показателем качества подключения конкретного терминала к конкретному торговому серверу, так как считается для всей сетевой активности, включая системную и фоновую.

    Свойство TERMINAL_RETRANSMISSION добавлено в перечисление ENUM_TERMINAL_INFO_DOUBLE, для его получения используется функция TerminalInfoDouble.
  24. MQL5: Оптимизирована работа с торговой историей.
  25. Signals: Исправлено проставление типа исполнения ордера по остатку (filling) при принудительном закрытии позиций, открытых по сигналу. В настройках копирования сигналов предусмотрена опция «Стоп, если счет ниже XXX USD»: если уровень средств на счете падает ниже указанного, то копирование торговых сигналов автоматически прекращается, принудительно закрываются все позиции. Ранее при принудительном закрытии позиций в некоторых случаях для ордеров на закрытие неправильно указывался тип заливки. Теперь терминал проверяет разрешенные типы заливки в настройках символа и указывает в ордерах допустимый вариант.
  26. Tester: Поведение функции HistoryOrderSelectв тестере стратегий приведено в соответствие с клиентским терминалом.
  27. Tester: Поведение функций CopyTicksи CopyTicksRangeв тестере стратегий приведено в соответствие с клиентским терминалом.
  28. Tester: Оптимизировано отображение графических объектов при тестировании в визуальном режиме.
  29. Tester: Исправлен показ результатов тестирования биржевых инструментов (с биржевой моделью управления рисками). Теперь на графике отображаются только средства (эквити), баланс и нагрузка на депозит не показываются. Торговое состояние таких счетов оценивается по уровню средств. Сам по себе баланс показывает лишь сумму собственных денег на счету и не учитывает активы и обязательства трейдера. Нагрузка на депозит (margin/equity) не показывается, так как маржа в биржевом расчете представляет собой текущую стоимость актива/обязательства с учетом дисконта, и она изменяется вместе с эквити.
  30. MetaEditor: Добавлена возможность легкой вставки различных свойств и ресурсов в код программы. Например, вы можете быстро добавить в код включаемый файл. Выберите команду «Вставить — MQH в виде #include», а затем в открывшемся окне выберите нужный включаемый файл. После этого в код программы будет добавлена директива #include с правильно указанным путем к выбранному файлу.


    Проекты в MetaEditor и синтетические инструменты в MetaTrader 5 build 1730


    При помощи этого же меню в код программы можно легко добавить файлы в виде бинарного или текстового массива. Например, вы можете переносить шаблоны графиков вместе с экспертами/индикаторами: включите свой шаблон в код программы в виде массива, затем при помощи функции FileSave сохраните его на диск. После этого шаблон можно применить к графику прямо из эксперта при помощи функции ChartApplyTemplate.
  31. MetaEditor: Добавлена возможность преобразования строк между форматами ASCII, HEX и Base64. Выделите строку в исходном коде, а затем нажмите нужную команду в меню «Правка — Преобразовать»
  32. MetaEditor: Исправлен поиск по файлам без учета регистра.
  33. MetaEditor: Исправлена ошибка в отладчике при вычислении значения выражения вида x.y[0][1].z.
  34. MetaEditor: Исправлен переход по коду при помощи кнопок «Вперед» и «Назад».
  35. Добавлен перевод пользовательского интерфейса на голландский язык.
  36. Обновлена документация.


Обновление доступно через систему Live Update на сервере MetaQuotes-Demo или через установку дистрибутива поверх предыдущей версии без потери настроек.

 

MetaTrader 5 становится ядром Пакистанской биржи PMEX

$
0
0

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

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

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

Интеграция MetaTrader 5 с PMEXбыла представлена в начале 2015 года, а уже в феврале того же года появился первый брокер. И вот спустя 3 года PMEX полностью переходит на наше программное обеспечение. 333 участника биржи и любой брокер с MetaTrader 5 платформой могут работать с PMEX напрямую без сторонних шлюзов.

MetaTrader 5 становится ядром Пакистанской биржи PMEX
Эджаз Али Шах, управляющий директор PMEX

Основанная в 2005 году в Карачи, PMEX стала первым фьючерсным рынком в Пакистане. Она является единственной в стране товарно-сырьевой биржей, регулируемой Комиссией по ценным бумагам и биржам (SECP).

«Мы рады сообщить, что MetaTrader 5 теперь доступна всем участникам PMEX, — говорит Эджаз Али Шах, управляющий директор биржи. — Переход на платформу пятого поколения полностью вписывается в нашу стратегию по модернизации используемых технологий. Мы всегда ищем возможности развития существующей технологической инфраструктуры, чтобы обеспечивать лучшие условия торговли для участников биржи и ее клиентов».

Бесплатный MetaTrader 5 можно скачать по ссылке: https://www.metatrader5.pro


Британский брокер Darwinex сделал ставку на MetaTrader 5

$
0
0

Инвестиционная компания предложила своим клиентам перейти на следующий уровень трейдинга. Запуском MetaTrader 5 брокерподдержал уже сложившийся на рынке тренд — миграцию всего живого на мультирыночный продукт от MetaQuotes.

Darwinex позиционирует себя как брокера, помогающего талантливым трейдерам развиваться быстрее. Компания предлагает прямой доступ к рынку (DMA) по конкурентоспособным ценам в сочетании с доступом к стороннему капиталу в $50 млн. Самое известное достижение Darwinex — разработка сервиса социального трейдинга в рамках британской лицензии FCA, одного из самых серьезных финансовых регуляторов в мире.

Хуан Колон, генеральный директор Darwinex

Хуан Колон, генеральный директор Darwinex

"MetaTrader 5стала очевидным решением при выборе торговой платформы для наших клиентов, — говорит Хуан Колон, генеральный директор Darwinex. — Она предлагает расширенные возможности для продвинутых пользователей, оставаясь доступной для новичков. Совсем скоро мы объединим MetaTrader 5 с ее передовой экосистемой и наш инвестиционный сервис по управлению активами. Это позволит нам привлекать в свое сообщество самых талантливых и пытливых трейдеров по всему миру!"

MetaTrader 5 от ФИНАМ: торгуйте с одного счета на MOEX, NYSE и Nasdaq

$
0
0

MetaTrader 5 от известного российского брокера — это один договор, одна платформа, четыре рынка. В рамках единого торгового счетаклиенты ФИНАМа получили доступ к ведущим биржам России и США. Это более 10 000 инструментов: акции, облигации, товарные фьючерсы и валюты.

Популярный здесь комментарий «Пятерка хороша, но для каждого рынка нужно ставить отдельный терминал» уже не работает. Шах и мат, господа технопессимисты: шортить Nasdaq, торговать фьючерсами на срочке MOEX’а и акциями компаний из S&P500 на Санкт-Петербургской бирже можно с одного счета в MetaTrader 5.

MetaTrader 5 от ФИНАМ: торгуйте с одного счета на MOEX, NYSE и Nasdaq

«Начало работы с новой версией платформы MetaTrader призвано решить нашу ключевую задачу — обеспечение высокого уровня сервиса для клиентов и создание комфортных условий работы, — комментирует событие член правления ГК «ФИНАМ» и руководитель Департамента бизнес-поддержки торговых систем Дмитрий Анциферов. — С MetaTrader 5 трейдер может сосредоточиться на торговых операциях, избегая лишних действий и экономя свое время. Новый продукт MetaQuotes Software поможет нашим клиентам обеспечить высокий уровень защиты капитала и получения дохода».

Бесплатно скачать платформу MetaTrader 5 с поддержкой единого счета можно по ссылке.

Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860

$
0
0
Скачать бесплатно и открыть демо-счет за секунды можно по ссылке https://www.metatrader5.com/ru/download

Что нового появилось в платформе:
  1. Terminal: Полностью переработан диалог открытия счетов. Теперь вы сначала выбираете интересующего брокера, а затем — тип счета, который хотите открыть. Благодаря этому список брокеров стал более компактным, поскольку в нем теперь отображаются названия компаний, а не всех доступных серверов.

    Также для облегчения поиска в список добавлены логотипы компаний. Если нужного брокера нет в списке, просто наберите название компании или адрес сервера в поисковой строке и нажмите «Найти вашего брокера».


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860



    Чтобы помочь начинающим трейдерам, в диалог добавлены описания типов счетов. Также в связи с обновлением General Data Protection Regulation (GDPR) при открытии счета теперь могут показываться ссылки на различные соглашения и политики брокерских компаний:


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860



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


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860



  2. MQL5: Увеличена скорость работы MQL5-программ за счет дополнительной оптимизации исходного кода при компиляции. Чтобы получить прирост скорости, перекомпилируйте ваши программы в новой версии MetaEditor.
    К сожалению, дополнительная оптимизация привела к потере совместимости новых программ с предыдущими версиями терминала. Все программы, скомпилированные в MetaEditor версии 1860 и выше, не будут запускаться в терминалах версии ниже 1860. При этом программы, скомпилированные ранее в предыдущих версиях MetaEditor, будут в работать в новых терминалах.
  3. MQL5: Добавлены функции iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. Эти функции аналогичны используемым в MQL4. Таким образом, пользователям будет проще переносить код торговых программ в платформу пятого поколения.

    Ранее большинство задач, решаемых этими функциями, можно было легко выполнить при помощи функций Copy*. Однако для поиска максимальных/минимальных значений на графике и поиска баров по времени пользователю требовалось реализовывать собственные функции. Теперь это можно легко выполнить функциями iHighest, iLowest и iBarShift.

  4. Terminal: В историю сделок добавлено отображение значений Стоп Лосс и Тейк Профит. Для сделок входа и разворота они устанавливаются в соответствии со значениями Стоп Лосс и Тейк Профит ордеров, в результате исполнения которых они были совершены. Для сделок выхода используются значения Стоп Лосс и Тейк Профит соответствующих позиций на момент их закрытия. Последнее позволяет сохранять и показывать информацию о том, какие значения Стоп Лосс и Тейк Профита были у позиции в момент ее закрытия. До этого такая информация нигде не сохранялась, так как позиция после закрытия исчезает, а история позиций в терминале формируется на основе сделок.


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860


  5. Terminal: В историю позиций добавлено отображение значений Стоп Лосс и Тейк Профит. Они заполняются в соответствии со значениями Стоп Лосс и Тейк Профит сделок, открывающих и закрывающих соответствующие позиции.


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860


  6. Terminal: Теперь при отображении отложенных ордеров на графике используется текущий объем ордера вместо изначально запрошенного.


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860


  7. Terminal: Оптимизировано и значительно ускорено отображение стакана цен в расширенном режиме с включенным показом спреда.
  8. Terminal: Оптимизирована обработка результатов выполнения торговых запросов. В некоторых случаях это может дать значительное ускорение обработки.
  9. Terminal: Исправлена ошибка работы Трейлинг Стопа, в некоторых случаях приводившая к отправке нескольких запросов на изменение уровня Стоп Лосс у одной позиции.
  10. Terminal: Исправлена установка минимального и максимального объема, а также шага объема в свойствах пользовательских инструментов.
  11. Terminal: Исправлена ошибка, из-за которой опция «Фиксировать масштаб» не учитывалась при применении шаблона к графику торгового инструмента.
  12. Terminal: Исправлена ошибка, в некоторых случаях приводившая к некорректному накоплению тиковой истории.
  13. MQL5: Добавлена функция TesterHideIndicators. Она задает режим показа/скрытия индикаторов, которые используются в эксперте. Функция предназначена для управления видимостью используемых индикаторов только при тестировании. Укажите флаг true, если необходимо скрывать создаваемые индикаторы, иначе false.
  14. MQL5: Добавлена генерация события CHARTEVENT_CLICKпри нажатии мышью на торговых уровнях графика.
  15. MQL5: Исправлена и оптимизирована работа функций CopyTicks.
  16. MQL5: Исправлено значение, отдаваемое функцией SymbolInfoDoubleдля свойства SYMBOL_PROP_LIQUIDITY_RATE.
  17. MQL5: Исправлена ошибка копирования строковых массивов с пересекающейся областью памяти.
  18. MQL5: Исправлена ошибка выделения строкового массива в функции FileReadArray.
  19. MQL5: Исправлен ряд ошибок в стандартной библиотеке MQL5.
  20. Tester: Полностью обновлена система работы с кэшем оптимизации. Кэш — это данные о ранее рассчитанных проходах оптимизации. Тестер стратегий хранит их, чтобы возобновлять оптимизацию после паузы и не пересчитывать уже рассчитанные проходы тестирования.

    Изменения в формате хранения кэша оптимизации
    Ранее кэш оптимизации хранился в виде одного XML-файла, в который попадали все проходы оптимизации эксперта с заданными настройками тестирования. В один и тот же файл попадали результаты оптимизации с разными входными параметрами.
    Теперь кэш оптимизации хранится в виде бинарных файлов отдельно для каждого набора оптимизируемых параметров. За счет изменения формата и сокращения размера файлов работа тестера с кэшем оптимизации значительно ускорилась. Это ускорение будет особенно заметно при продолжении ранее приостановленной оптимизации.

    Просмотр результатов ранее выполненных оптимизаций
    Теперь вы можете просматривать результаты ранее выполненных оптимизаций прямо в тестере стратегий, не разбирая огромные XML-файлы в сторонних программах. Откройте вкладку «Результаты оптимизации», выберите эксперта и файл с кэшем оптимизации:

    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860



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

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

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


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860



    Как использовать кэш оптимизации вручную
    Ранее кэш оптимизации хранился в виде XML-файла, который можно было открывать и анализировать в сторонних программах. Теперь он хранится в закрытых бинарных файлах. Чтобы получить данные в формате XML, экспортируйте их через контекстное меню вкладки «Результаты оптимизации».

  21. Tester: Добавлена возможность вручную задавать валюту депозита и размер плеча для тестирования и оптимизации. Ранее валюта депозита устанавливалась в соответствии с текущим подключенным счетом. Соответственно, для ее изменения пользователю приходилось переключаться на другие счета. Размер плеча можно было выбирать только из предопределенного списка, теперь вы можете указывать любое значение.

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


    Функции для работы с барами в MQL5 и улучшенный тестер стратегий в MetaTrader 5 build 1860


  22. Tester: Убран запрет на использование OpenCLв агентах тестирования. Ранее OpenCL-устройства можно было использовать только при тестировании на локальных агентах. Теперь агентам разрешено использовать все доступные OpenCL-устройства (процессор, видеокарту) при работе в локальной сети и в MQL5 Cloud Network.
  23. MetaEditor: Оптимизирована и ускорена работа с версионным хранилищем данных MQL5 Storage.
  24. MetaEditor: Исправлено возобновление отладки после приостановки в MQH-файле.
  25. MetaEditor: Исправлены ошибки подсветки исходного кода в редакторе.
  26. MetaEditor: Исправлена ошибка перехода по результатам поиска.
  27. MetaEditor: Исправлена массовая замена текста. В некоторых случаях заменялось только первое вхождение заменяемой последовательности вместо всех.
  28. Обновлена документация.

Обновление доступно через систему Live Update на сервере MetaQuotes-Demo или через установку дистрибутива поверх предыдущей версии без потери настроек.

Расчет полной истории синтетических инструментов в MetaTrader 5 build 1880

$
0
0

Скачать бесплатно и открыть демо-счет за секунды можно по ссылке https://www.metatrader5.com/ru/download

Что нового появилось в платформе:

  1. Terminal: Добавлен расчет ценовой истории синтетических инструментовна всю доступную глубину данных.

    Для синтетических инструментов платформа рассчитывает историю минутных баров на основе минутных баров инструментов, входящих в его формулу. Ранее расчет по умолчанию производился только для двух последних месяцев в истории. Более глубокая история достраивалась только при явном запросе (прокрутке графика влево или вызове Copy-функций). Теперь история рассчитывается по всем доступным данным безусловно.


    Расчет полной истории синтетических инструментов в MetaTrader 5 build 1880

    В примере на иллюстрации использована формула индекса доллара:

    USDX = 50.14348112*pow(ask(EURUSD),-0.576)*pow(USDJPY,0.136)*pow(ask(GBPUSD),-0.119)*pow(USDCAD,0.091)*pow(USDSEK,0.042)*pow(USDCHF,0.036)

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

    • EURUSD с историей до 2009.01.01
    • USDJPY с историей до 2012.06.01
    • EURJPY с историей до 2014.06.01
    В этом случае история синтетического инструмента будет рассчитана только с 2014.06.01 по настоящий момент. Дополнительно от этой даты будет отброшено еще 100 минут для обеспечения целостности расчета (при отсутствии отдельного минутного бара в истории в расчете используется бар за предыдущую минуту).

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

  2. MQL5: Добавлено свойство ACCOUNT_CURRENCY_DIGITS — число знаков после запятой у валюты депозита счета. Для его получения используйте функцию AccountInfoInteger. Свойство может быть использовано при самостоятельном расчете прибылидля нормализации полученных значений.
  3. MQL5: Исправлена задержка выполнения Copy-функцийи i-функцийпри работе с недельным таймфреймом.
  4. MQL5: Исправлены ошибки в работе функции WebRequest.
  5. Tester: Добавлена возможность одиночного тестирования эксперта после загрузки результатов оптимизации из кэш-файла.
  6. Tester: Ускорена начальная закачка ценовой истории локальными агентами тестирования.
  7. Обновлена документация.
Обновление доступно через систему Live Update на сервере MetaQuotes-Demo.

Алготрейдинг проще, чем вы думаете

$
0
0

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

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

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

  1. Что торговать?
  2. Когда торговать?
  3. Как торговать?


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

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

А третий вопрос на этом фоне совсем простой — как совершать операции покупки и продажи на данном языке программирования?

Сейчас мы рассмотрим каким образом можно реализовать торговые операции в алгоритмической торговле на языке MQL5.

Алготрейдинг проще, чем вы думаете

 

Что предлагает MQL5 для алготрейдинга?

MQL5 является языком программирования торговых стратегий и имеет множество торговых функцийдля работы с ордерами, позициями и торговыми запросами. Таким образом, создание торговых роботов на MQL5 для алготрейдинга является наименее трудозатратным с точки зрения разработчика.

Средствами MQL5 вы можете создать торговый запроси отослать его на сервер с помощью функций OrderSend()или OrderSendAsync(), получить результат его выполнения, просмотреть торговую историю, узнать спецификацию контрактадля инструмента, обработать торговое событиеи запросить еще множество другой необходимой информации.

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

Но это уже другая тема и вы можете посмотреть примеры реализации в многочисленных статьях.


Торговые операции — это просто!

Существует несколько основных типов торговых операций, которые вам могут понадобиться в торговом роботе:

  1. покупка/продажа по текущей цене,
  2. установка отложенного ордера на покупку/продажу по некоторому условию,
  3. модификация/удаление отложенного ордера,
  4. закрытие/наращивание/сокращение/переворот позиции.

Все эти операции реализуются с помощью функции OrderSend(), существует также и асинхронный вариант этой функции — OrderSendAsync(). Всё многообразие торговых операций описывается структурой MqlTradeRequest, содержащей описание торгового запроса.

Поэтому единственные трудности с торговыми операциями могут заключаться только в правильном заполнении структуры MqlTradeRequest и обработке результата выполнения запроса.

В соответствии с правилами вашей торговой системы вы можете совершить покупку или продажу по цене рынка (BUY или SELL), а можете поместить отложенный ордер на совершение покупки/продажи на некотором расстоянии от текущей цены рынка:

  • BUY STOP, SELL STOP — покупка или продажа при пробитии указанного уровня (хуже текущей цены);
  • BUY LIMIT, SELL LIMIT — покупка или продажа при достижении указанного уровня (лучше текущей цены);
  • BUY STOP LIMIT, SELL STOP LIMIT — установка ордера BUY LIMIT или SELL LIMIT при достижении указанной цены.

Типы этих стандартных ордеров соответствуют перечислению ENUM_ORDER_TYPE

Алготрейдинг проще, чем вы думаете

Кроме  того, вам может понадобиться модифицировать или вовсе удалить отложенный ордер, это также делается с помощью функций OrderSend()/OrderSendAsync(). Изменение открытой позиций тоже не представляет сложности, так как происходит в результате совершения всё тех же торговых операций.

Если вы до этого представляли себе торговые операции как нечто сложное и запутанное, то теперь самое время изменить своё мнение. Мы покажем не только, как легко и просто программировать покупки и продажи в MQL5, но также подскажем, как работать с торговым счетом и свойствами символов. Торговые классыпомогут нам.

 

CAccountInfo для проверки торгового счета

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

Для работы со счетом есть класс CAccountInfo, который как раз и разрабатывался для этих целей. Добавим в наш код подключение файла  AccountInfo.mqh и объявим переменную этого класса account:

#include <Trade\AccountInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()  {
//--- объект для работы со счетом
CAccountInfo account;
//--- получим номер счета, на котором запущен советник   long login=account.Login();   Print("Login=",login);
//--- выясним тип счета   ENUM_ACCOUNT_TRADE_MODE account_type=account.TradeMode();
//--- если счет оказался реальным, прекращаем работу эксперта немедленно!   if(account_type==ACCOUNT_TRADE_MODE_REAL)     {      MessageBox("Работа на реальном счете запрещена, выходим","Эксперт запущен на реальном счете!");      return(-1);     }
//--- выведем тип счета       Print("Тип счета: ",EnumToString(account_type));
//--- выясним, можно ли вообще торговать на данном счете   if(account.TradeAllowed())      Print("Торговля на данном счете разрешена");   else      Print("Торговля на счете запрещена: возможно, вход был совершен по инвест-паролю");
//--- выясним, разрешено ли торговать на счете с помощью эксперта   if(account.TradeExpert())      Print("Автоматическая торговля на счете разрешена");   else      Print("Запрещена автоматическая торговля с помощью экспертов и скриптов");
//--- допустимое количество ордеров задано или нет   int orders_limit=account.LimitOrders();   if(orders_limit!=0)Print("Максимально допустимое количество действующих отложенных ордеров: ",orders_limit);
//--- выведем имя компании и сервера   Print(account.Company(),": server ",account.Server());
//--- напоследок выведем баланс и текущую прибыль на счете   Print("Balance=",account.Balance(),"  Profit=",account.Profit(),"   Equity=",account.Equity());   Print(__FUNCTION__,"  completed"); //---   return(0);  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)  {
//---  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()  {
//---  }

Как видно из приведенного кода, с помощью переменной accountв функции OnInit() можно получить много полезной информации. Вы можете добавить этот код в своего эксперта и вам будет гораздо проще разбирать логи при анализе его работы.

Результат запуска советника на конкурсном счете Automated Trading Championship 2012 показан на картинке.

Алготрейдинг проще, чем вы думаете
 

CSymbolInfo поможет нам получить свойства символа

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

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

#include<Trade\SymbolInfo.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()  {
//--- объект для получения свойств символа
CSymbolInfo symbol_info;
//--- зададим имя символа, для которого будем получать информацию   symbol_info.Name(_Symbol);
//--- получим текущие котировки и выведем   symbol_info.RefreshRates();   Print(symbol_info.Name()," (",symbol_info.Description(),")",         "  Bid=",symbol_info.Bid(),"   Ask=",symbol_info.Ask());
//--- получим значения минимальных отступов для торговых операций   Print("StopsLevel=",symbol_info.StopsLevel()," pips, FreezeLevel=",         symbol_info.FreezeLevel()," pips");
//--- получим количество знаков после запятой и размер пункта   Print("Digits=",symbol_info.Digits(),         ", Point=",DoubleToString(symbol_info.Point(),symbol_info.Digits()));
//--- информация о спреде   Print("SpreadFloat=",symbol_info.SpreadFloat(),", Spread(текущий)=",         symbol_info.Spread()," pips");
//--- запросим тип исполнения ордеров, нет ли ограничений   Print("Ограничения на торговые операции: ",EnumToString(symbol_info.TradeMode()),         " (",symbol_info.TradeModeDescription(),")");
//--- выясним режим заключения сделок   Print("Режим исполнения сделок: ",EnumToString(symbol_info.TradeExecution()),         " (",symbol_info.TradeExecutionDescription(),")");
//--- выясним способ вычисления стоимости контрактов   Print("Вычисление стоимости контракта: ",EnumToString(symbol_info.TradeCalcMode()),         " (",symbol_info.TradeCalcModeDescription(),")");
//--- размер контрактов   Print("Размер стандартного контракта: ",symbol_info.ContractSize(),         " (",symbol_info.CurrencyBase(),")");
//--- минимальный, максимальный размеры объема в торговых операциях   Print("Volume info: LotsMin=",symbol_info.LotsMin(),"  LotsMax=",symbol_info.LotsMax(),         "  LotsStep=",symbol_info.LotsStep());
//---    Print(__FUNCTION__,"  completed");
//---   return(0);  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)  {
//---  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()  {
//---  }

И на рисунке показаны свойства символа EURUSD на Чемпионате Automated Trading Championship. Таким образом, вы готовы перейти непосредственно к торговле.

Алготрейдинг проще, чем вы думаете

CTrade — удобный класс для торговых операций

Торговля в MQL5 осуществляется всего двумя функциями — OrderSend() и OrderSendAsync(). На самом деле это две разные реализации одной функции.

Если OrderSend() отправляет торговый запрос и ждет результата его выполнения, то асинхронная OrderSendAsync() просто выстреливает запрос и позволяет работать программе дальше, не дожидаясь ответа торгового сервера. Таким образом, торговать в MQL5 действительно просто, достаточно использовать только одну функцию для всех торговых операций

Так в чем же тогда состоит вопрос? Обе функции получают в качестве первого параметра структуру MqlTradeRequest, которая содержит более десятка полей. Причем не все поля требуется заполнять обязательно, состав требуемых полей зависит от типа торговой операции.

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

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

Вот так примерно может выглядеть использование этого класса в вашем торговом роботе:

#include<Trade\Trade.mqh>
//--- объект для проведения торговых операций
CTrade  trade;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()  {
//--- зададим MagicNumber для идентификации своих ордеров   int MagicNumber=123456;   trade.SetExpertMagicNumber(MagicNumber);
//--- установим допустимое проскальзывание в пунктах при совершении покупки/продажи   int deviation=10;   trade.SetDeviationInPoints(deviation);
//--- режим заполнения ордера, нужно использовать тот режим, который разрешается сервером   trade.SetTypeFilling(ORDER_FILLING_RETURN);
//--- режим логирования: лучше не вызывать этот метод вообще, класс сам выставит оптимальный режим   trade.LogLevel(1); 
//--- какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend()
   trade.SetAsyncMode(true);
//---   return(0);  }

Ну а теперь пришло время посмотреть, как CTrade помогает в торговых операциях.

Покупка/продажа по текущей цене

Часто в торговых стратегиях необходимо совершить покупку или продажу по текущей цене прямо сейчас. CTrade знаком с такой ситуацией и просит лишь необходимый объем торговой операции.

Все остальные параметры — цену открытия и название символа, уровни Stop Loss и Take Profit, комментарий к ордеру — можно не указывать.

//--- 1. пример покупки по текущему символу   if(!trade.Buy(0.1))     {      //--- сообщим о неудаче      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

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

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

//--- 2. пример покупки по указанному символу   if(!trade.Buy(0.1,"GBPUSD"))     {      //--- сообщим о неудаче      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Можно указать все параметры ордера: уровни Stop Loss/Take Profit, цена открытия и комментарий.

//--- 3. пример покупки по указанному символу символу с заданными SL и TP   double volume=0.1;         // укажем объем торговой операции   string symbol="GBPUSD";    // укажем символ, на котором проводится операция   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт   double bid=SymbolInfoDouble(symbol,SYMBOL_BID);             // текущая цена для закрытия LONG   double SL=bid-1000*point;                                   // ненормализованное значение SL   SL=NormalizeDouble(SL,digits);                              // нормализуем Stop Loss   double TP=bid+1000*point;                                   // ненормализованное значение TP   TP=NormalizeDouble(TP,digits);                              // нормализуем Take Profit
//--- получим текущую цену открытия для LONG позиций   double open_price=SymbolInfoDouble(symbol,SYMBOL_ASK);   string comment=StringFormat("Buy %s %G lots at %s, SL=%s TP=%s",                               symbol,volume,                               DoubleToString(open_price,digits),                               DoubleToString(SL,digits),                               DoubleToString(TP,digits));   if(!trade.Buy(volume,symbol,open_price,SL,TP,comment))     {      //--- сообщим о неудаче      Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Напомним, Magic Number и допустимое проскальзывание мы задали при инициализации экземпляра CTrade, поэтому они не требуются. Хотя их тоже можно задавать непосредственно перед каждой торговой операцией, если это необходимо.

Выставление лимитного ордера

Для отправки лимитного ордера используется соответствующий метод класса BuyLimit()или SellLimit(). Для большинства случаев может подойти укороченный вариант, когда указываются только цена открытия и объем. Цена открытия для Buy Limit должна быть ниже текущей цены, а для Sell Limit должна быть выше.

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

//--- 1. пример установки отложенного ордера Buy LImit   string symbol="GBPUSD";    // укажем символ, на котором выставляется ордер   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);             // текущая цена покупки   double price=1000*point;                                    // ненормализованное цена открытия   price=NormalizeDouble(price,digits);                        // нормализуем цену открытия
//--- все готово, отправляем на сервер отложенный ордер Buy Limit   if(!trade.BuyLimit(0.1,price))     {      //--- сообщим о неудаче      Print("Метод BuyLimit() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод BuyLimit() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Можно использовать и более подробный вариант с указанием всех параметров: уровни SL/TP, время истечения, название инструмента и комментарий к ордеру.

//--- 2. пример установки отложенного ордера BuyLimit со всеми параметрами   double volume=0.1;   string symbol="GBPUSD";    // укажем символ, на котором выставляется ордер   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);             // текущая цена покупки   double price=1000*point;                                    // ненормализованное цена открытия   price=NormalizeDouble(price,digits);                        // нормализуем цену открытия   int SL_pips=300;                                            // Stop Loss в пунктах   int TP_pips=500;                                            // Take Profit в пунктах   double SL=price-SL_pips*point;                              // ненормализованное значение SL   SL=NormalizeDouble(SL,digits);                              // нормализуем Stop Loss   double TP=price+TP_pips*point;                              // ненормализованное значение TP   TP=NormalizeDouble(TP,digits);                              // нормализуем Take Profit   datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_D1);   string comment=StringFormat("Buy Limit %s %G lots at %s, SL=%s TP=%s",                               symbol,volume,                               DoubleToString(price,digits),                               DoubleToString(SL,digits),                               DoubleToString(TP,digits));
//--- все готово, отправляем на сервер отложенный ордер Buy Limit   if(!trade.BuyLimit(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment))     {      //--- сообщим о неудаче      Print("Метод BuyLimit() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод BuyLimit() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Ваша задача во втором варианте — правильно указать уровни SL и TP. Не забывайте, что для покупок уровень Take Profit должен быть выше цены открытия, а уровень Stop Loss — ниже цены открытия. Для ордеров Sell Limit всё наоборот.

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

 

Выставление стопового ордера

Для отправки стопового ордера используются аналогичные методы BuyStop()и SellStop(). Цена открытия для Buy Stop должна быть выше текущей цены, а для Sell Stop должна быть ниже. Стоповые ордера используются в стратегиях, которые входят на прорыве некоего уровня сопротивления, а также для ограничения убытков.

Простой вариант:

//--- 1. пример установки отложенного ордера Buy Stop   string symbol="USDJPY";    // укажем символ, на котором выставляется ордер   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);             // текущая цена покупки   double price=1000*point;                                    // ненормализованное цена открытия   price=NormalizeDouble(price,digits);                        // нормализуем цену открытия
//--- все готово, отправляем на сервер отложенный ордер Buy Stop    if(!trade.BuyStop(0.1,price))     {      //--- сообщим о неудаче      Print("Метод BuyStop() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод BuyStop() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

И более подробный, когда нужно указать максимум параметров для отложенного ордера Buy Stop:

//--- 2. пример установки отложенного ордера Buy Stop со всеми параметрами   double volume=0.1;   string symbol="USDJPY";    // укажем символ, на котором выставляется ордер   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); // количество знаков после запятой   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);         // пункт   double ask=SymbolInfoDouble(symbol,SYMBOL_ASK);             // текущая цена покупки   double price=1000*point;                                    // ненормализованное цена открытия   price=NormalizeDouble(price,digits);                        // нормализуем цену открытия   int SL_pips=300;                                            // Stop Loss в пунктах   int TP_pips=500;                                            // Take Profit в пунктах   double SL=price-SL_pips*point;                              // ненормализованное значение SL   SL=NormalizeDouble(SL,digits);                              // нормализуем Stop Loss   double TP=price+TP_pips*point;                              // ненормализованное значение TP   TP=NormalizeDouble(TP,digits);                              // нормализуем Take Profit   datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_D1);   string comment=StringFormat("Buy Stop %s %G lots at %s, SL=%s TP=%s",                               symbol,volume,                               DoubleToString(price,digits),                               DoubleToString(SL,digits),                               DoubleToString(TP,digits));
//--- все готово, отправляем на сервер отложенный ордер Buy Stop    if(!trade.BuyStop(volume,price,symbol,SL,TP,ORDER_TIME_GTC,expiration,comment))     {      //--- сообщим о неудаче      Print("Метод BuyStop() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод BuyStop() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Для отправки ордера Sell Stop применяется соответствующий метод класса CTrade, главное — правильно указывать цены.

Работа с позицией

Вы можете вместо использования методов Buy() и Sell() пользоваться методами для открытия позиции. Правда, в этом случае придется указать больше деталей:

//--- количество знаков после запятой   int    digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
//--- значение пункта   double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
//--- получим цену покупки   double price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
//--- вычислим и нормализуем уровни SL и TP   double SL=NormalizeDouble(price-1000*point,digits);   double TP=NormalizeDouble(price+1000*point,digits);
//--- заполним комментарий   string comment="Buy "+_Symbol+" 0.1 at "+DoubleToString(price,digits);
//--- все готово, делаем попытку открыть позицию на покупку   if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,0.1,price,SL,TP,comment))     {      //--- сообщим о неудаче      Print("Метод PositionOpen() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод PositionOpen() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Для закрытия позиции достаточно указать имя инструмента, остальное класс CTrade сделает сам.

//--- закрываем позицию по текущему символу   if(!trade.PositionClose(_Symbol))     {      //--- сообщим о неудаче      Print("Метод PositionClose() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод PositionClose() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Для модификации у открытой позиции доступны только уровни Stop Loss и Take Profit. Это делается с помощью метода PositionModify().

//--- количество знаков после запятой   int    digits=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
//--- значение пункта   double point=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
//--- получим текущую цену Bid   double price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
//--- вычислим и нормализуем уровни SL и TP   double SL=NormalizeDouble(price-1000*point,digits);   double TP=NormalizeDouble(price+1000*point,digits);
//--- все готово, делаем попытку модифицировать позицию на покупку   if(!trade.PositionModify(_Symbol,SL,TP))     {      //--- сообщим о неудаче      Print("Метод PositionModify() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод PositionModify() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

  Модификация и удаление ордера

Для изменения параметров отложенного ордера в классе CTrade предусмотрен метод OrderModify(), которому необходимо передать все требуемые параметры.

//--- тикет ордера указан только для примера, его нужно получить   ulong ticket=1234556;
//--- символ также указан для примера, его нужно получить   string symbol="EURUSD";
//--- количество знаков после запятой   int    digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);
//--- значение пункта   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
//--- получим цену покупки   double price=SymbolInfoDouble(symbol,SYMBOL_ASK);
//--- вычислим и нормализуем уровни SL и TP
//--- на самом деле они должны вычисляться в зависимости от типа ордера   double SL=NormalizeDouble(price-1000*point,digits);   double TP=NormalizeDouble(price+1000*point,digits);   //--- зададим срок действия одни сутки   datetime expiration=TimeTradeServer()+PeriodSeconds(PERIOD_D1);   
//--- все готово, делаем попытку модифицировать ордер    if(!trade.OrderModify(ticket,price,SL,TP,ORDER_TIME_GTC,expiration))     {      //--- сообщим о неудаче      Print("Метод OrderModify() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод OrderModify() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

Вам необходимо получить тикет ордера, который необходимо изменить, и в зависимости от его типа указать правильные уровни Stop Loss и Take Profit. Кроме того, новая цена открытия должна быть также корректной по отношению к текущей цене.

Для удаления отложенного ордера достаточно знать его тикет:

//--- тикет ордера указан только для примера, его нужно получить   ulong ticket=1234556;
//--- все готово, делаем попытку модифицировать позицию на покупку   if(!trade.OrderDelete(ticket))     {      //--- сообщим о неудаче      Print("Метод OrderDelete() потерпел неудачу. Код возврата=",trade.ResultRetcode(),            ". Описание кода: ",trade.ResultRetcodeDescription());     }   else     {      Print("Метод OrderDelete() выполнен успешно. Код возврата=",trade.ResultRetcode(),            " (",trade.ResultRetcodeDescription(),")");     }

В классе также есть универсальный метод OrderOpen(), который может выставлять отложенные ордера любого типа. В отличие от специализированных методов BuyLimit, BuyStop, SellLimitиSellStop, он требует указывать больше обязательных параметров.

Возможно, кому-то он покажется более удобным.


Что осталось решить

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

Но в разделе Торговые классы остались еще несколько полезных удобных помощников для разработчиков на MQL5:

  • COrderInfo— для работы с ордерами;
  • CHistoryOrderInfo— для работы с отработанными ордерами, попавшими в историю торговли;
  • CPositionInfo— для работы с позициями;
  • CDealInfo— для работы со сделками;
  • CTerminalInfo— для получения информации о терминале (посмотрите, будет очень интересно).

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

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

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

Рекомендуем прочитать статьи из разделов Индикаторыи Примеры->Индикаторы, начинайте читать с наиболее ранних по дате публикации, это позволит вам продвигаться от простого к сложному.

Чтобы сразу получить представление о том, как работать с индикаторами и начать их использовать, смотрите статью MQL5 для «чайников»: Получение значений технических индикаторов в своих экспертах.

 

Делайте сложные вещи простыми

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

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

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

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

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

Приложенные файлы:
Viewing all 80 articles
Browse latest View live