Библиотеки: MT4Orders - страница 17

 
fxsaber:

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

MT4Orders не создает (и не должна) виртуальную среду. Все ордера/позиции  в ней настоящие, т.к. она может параллельно работать с MT5-торговым API.

Для виртуализации лучше использовать УПОМИНАНИЕ ПЛАТНЫХ ПРОДУКТОВ НА ФОРУМЕ ЗАПРЕЩЕНО.


Понятно, так и думал изначально, про платную тоже знаю.

Меня ввёл в сомнение коммент:

Maxim Dmitrievsky:
Использую в ботах, ни в тестере ни на реале ни одной ошибки пока не возникало вроде как, на Фортс в окрытии и на форексе.
Всё равно MT4Orders штука очень полезная, отличная работа, спасибо!
 
Sergey Chalyshev:

Меня ввёл в сомнение коммент:

Так ничего противоречивого там не написано. Сам использую и на хедже и на неттинге.

Конвертация MT4-советников - это же бонус. Основная цель библиотеки - создавать нормальный код.

 
fxsaber:

Так ничего противоречивого там не написано. Сам использую и на хедже и на неттинге.

Конвертация MT4-советников - это же бонус. Основная цель библиотеки - создавать нормальный код.


Я как то больше привык уже на МТ5, МТ4 уже стал забывать.

 
Sergey Chalyshev:

Я как то больше привык уже на МТ5, МТ4 уже стал забывать.

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

Хорошо владею MQL4/5. Но пишу в стиле MT4. Код гораздо кроссплатформенней и проще.


ЗЫ Вот что раздражает в MT5 - это абсолютно не практичные штатные html-отчеты, в отличие от MT4. Как народ читает MT5-стейтменты - загадка. Особенно на хедж-счетах.

 

Без сомнений.

МТ4 ордерная система гораздо удобней.

CloseBy добавили или планируется? Очень выгодная вещь, особенно в таких стратегиях как Quantum 103.

 
fxsaber:

ЗЫ Вот что раздражает в MT5 - это абсолютно не практичные штатные html-отчеты, в отличие от MT4. Как народ читает MT5-стейтменты - загадка. Особенно на хедж-счетах.


Зачем их читать? Главное Средства и Профит, пусть эксперт читает отчеты ))

 
Sergey Chalyshev:

CloseBy добавили или планируется?

CloseBy-работает. Но что касается Истории, то работа по корректной обработке таких MT5-Deals не велась. Это касается только Истории, OrderCloseBy работает, конечно.

Sergey Chalyshev:

Зачем их читать? Главное Средства и Профит, пусть эксперт читает отчеты ))

А как же анализ своей ТС в том же тестере? По отчету чаще всего могу определить, верно ли реализована желаемая торговая логика или нет.

 

На формульных синтетиках возможно написание торговых функций.

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


И запускаем на нем арбитражную ТС.

// Арбитражный советник на формульном синетике
#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (Bid > 1)
    OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0);
  else if (Ask < 1)
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
}
 
Быстрое закрытие позиций символа через CloseBy

Forum on trading, automated trading systems and testing trading strategies

Closing Multiple Trades at once

fxsaber, 2017.12.07 09:01

// MQL4&5-code
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#property strict

string CorrectSymbol( string &Symb )
{
  return(Symb = ((Symb == NULL) || (Symb == "")) ? _Symbol: Symb);
}

bool PlaceHedge( const string Symb )
{
  double Lots = 0;
    
  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
      Lots += OrderType() ? OrderLots() : -OrderLots();
      
  Lots = NormalizeDouble(Lots, 2);    
      
  return(((Lots > 0) && (OrderSend(Symb, OP_BUY, Lots, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0, "HEDGE") > 0)) ||
         ((Lots < 0) && (OrderSend(Symb, OP_SELL, -Lots, SymbolInfoDouble(Symb, SYMBOL_BID), 100, 0, 0, "HEDGE") > 0)) || !Lots);
}

bool CloseAll( string Symb = NULL )
{
  int Type = 0;
  long Ticket = 0;
  
  bool Res = PlaceHedge(CorrectSymbol(Symb));
  
  for (int i = OrdersTotal() - 1; !IsStopped() && Res && (i >= 0); i--)
    if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
    {
      if (!Ticket)
      {
        Ticket = OrderTicket();
        Type = OrderType();
      }
      else if ((OrderType() != Type) && (Res = OrderCloseBy(Ticket, OrderTicket()) && PlaceHedge(Symb)))
      {
        Ticket = 0;       
        
        i = OrdersTotal();
      }
    }

  return(Res);
}

void OnStart()
{
  CloseAll();
}
 
fxsaber: