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

 
fxsaber:

Это пример самого примитивного использования.

Что-то не понимаю: в Вашем примере нет вызова новой функции. В последней библиотеки история будет работать как в МТ4 по умолчанию? Или все таки нужно что-то делать с получаемым тикетом

 
fxsaber:

Благодарен Вам, @Andrey Khatimlianskii и @Igor Makanu за то, что "добили". В голову не приходили задачи, которые были озвучены.

Это Вам спасибо за громадный труд и поддержку

 
Ilya Malev:

Что-то не понимаю: в Вашем примере нет вызова новой функции. В последней библиотеки история будет работать как в МТ4 по умолчанию? Или все таки нужно что-то делать с получаемым тикетом

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


Этот скрипт

#property script_show_inputs

#include <MT4Orders.mqh>

input TICKET_TYPE inTicket = 0;

// Удобный вывод
template <typename T>
T MyPrint( const T Value, const string Str ) { Print(Str + " = " + (string)Value); return(Value); }
#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A)

// Выводит всякие данные по тикету
void Test( const TICKET_TYPE Ticket )
{
  _P(Ticket);
  
  if (_P(OrderSelect(Ticket, SELECT_BY_TICKET)))
  {
    OrderPrint();
    
    _P(OrderTicket());
    _P(OrderTicketOpen());
    _P(OrderTicketID());
  }
  
  Print("");
}

void OnStart()
{    
  Test(inTicket);
  
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Test(OrderTicket());
}


выдаст нечто такое

void Test(const long), Line = 15: Ticket = 0
void Test(const long), Line = 17: OrderSelect(Ticket,1) = false

void Test(const long), Line = 15: Ticket = 1753321
void Test(const long), Line = 17: OrderSelect(Ticket,1) = true
#1753321 2019.03.13 16:15:07 buy 1.00 EURUSD 1.13119 0.00000 0.00000 2019.03.13 16:15:08 1.13118 -4.52 0.00 -1.00 0
void Test(const long), Line = 21: OrderTicket() = 1753321
void Test(const long), Line = 22: OrderTicketOpen() = 1753320
void Test(const long), Line = 23: OrderTicketID() = 2532884

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

 
fxsaber:

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

Поэтому полностью нормальна ситуация, когда выбор по Ticket прошел успешно и при этом OrderTicket() != Ticket.

 

Forum on trading, automated trading systems and testing trading strategies

Experts: TradePanel

fxsaber, 2019.04.10 22:28

Convert to MT5:
#include <KimIVToMT5.mqh> // https://www.mql5.com/ru/forum/93352/page32#comment_10603352

#define ERR_NO_CONNECTION 6
#define ERR_TRADE_NOT_ALLOWED 4109
#define ERR_TRADE_EXPERT_DISABLED_BY_SERVER 4112

int ObjectsTotal() { return(ObjectsTotal(0)); }
string ObjectName( const int Pos ) { return(ObjectName(0, Pos)); } 
bool IsConnected() { return((bool)TerminalInfoInteger(TERMINAL_CONNECTED)); }

#define NULL _Symbol // macro redefinition

#include "TradePanel.mq4" // https://www.mql5.com/en/code/19752
 
Еще пример конвертации

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Индикаторы: Equity Chart

fxsaber, 2019.04.25 11:25

Похоже, получилось

#define MT4_TICKET_TYPE // Обязываем OrderSend и OrderTicket возвращать значение такого же типа, как в MT4 - int.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

// https://www.mql5.com/en/blogs/post/681230
#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 2
#property indicator_color1 SteelBlue
#property indicator_color2 OrangeRed
#property indicator_color3 SlateGray
#property indicator_color4 ForestGreen
#property indicator_color5 Silver
#property indicator_color6 Gray
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1
#property indicator_width6 1

#define TotalOrders TotalOrdersTmp
#define Ticket TicketTmp
#define StartTime StartTimeTmp
#define Type TypeTmp
#define Margin MarginTmp
#define Magic MagicTmp

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         (!font_size || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)));
}

string StringConcatenate( const string Str1, const string Str2, const string Str3 )
{
  return(Str1 + Str2 + Str3);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4)
{
  return(Str1 + Str2 + Str3 + Str4);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5);
}

string StringConcatenate( const string Str1, const string Str2, const int Str3, const string Str4, const int Str5 )
{
  return(Str1 + Str2 + (string)Str3 + Str4 + (string)Str5);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5, const string Str6 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6);
}

string StringConcatenate( const string Str1, const int Str2, const string Str3, const double Str4, const string Str5, const string Str6 )
{
  return(Str1 + (string)Str2 + Str3 + (string)Str4 + Str5 + Str6);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5, const string Str6, const string Str7 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6 + Str7);
}

string StringConcatenate( const int Str1, const string Str2, const ENUM_TIMEFRAMES Str3, const string Str4)
{
  return((string)Str1 + Str2 + EnumToString(Str3) + Str4);
}

// Закомментировать строку с ошибкой компиляции: 'Import_History' - constant cannot be modified Equity-Monitor.mq4      734     7
#include "Equity-Monitor.mq4" // https://www.mql5.com/ru/code/13242

 

Forum on trading, automated trading systems and testing trading strategies

MT4 to MT5 code converter

fxsaber, 2019.04.29 10:47

#property indicator_chart_window 
#property indicator_buffers 6
#property indicator_plots 6
#property indicator_color1 White 
#property indicator_color2 White 
#property indicator_color3 DodgerBlue
#property indicator_color4 DodgerBlue
#property indicator_color5 Lime
#property indicator_color6 Red
 
#property indicator_width1 5
#property indicator_width2 5
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 1
#property indicator_width6 1

#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

// https://www.mql5.com/en/blogs/post/681230
#define MT4_OLD_EVENT_HANDLERS
#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

#define digits digits2
#undef MODE_LOW
#undef MODE_HIGH

#include "Chaos_Semafor_-_3_Mod.mq4" // https://c.mql5.com/3/277/Chaos_Semafor_-_3_Mod__1.mq4
 
Если требуется не светить использование MT4Orders в своем продукте, можно либо резать соответствующие куски исходника библиотеки, либо поставить универсальную заглушку
// Через макросы обрубаем любые намеки о присутствии MT4Orders.
#define Alert PrintTmp
#define Print PrintTmp
  void PrintTmp( string ) {}
  
  #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
#undef Print
#undef Alert
 

Forum on trading, automated trading systems and testing trading strategies

Experts: Daily Chart Trader

fxsaber, 2019.04.30 12:08

MT5-version
#define MT4_TICKET_TYPE // Обязываем OrderSend и OrderTicket возвращать значение такого же типа, как в MT4 - int.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL, const color Color = clrNONE )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) &&
         ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color)));
}

#define NULL ""

#include "AEROSPINE.mq4" // https://www.mql5.com/en/code/24903
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Советники: Equity Tral

fxsaber, 2019.04.30 22:57

Конвертация этого советника под MT5

#define MT4_TICKET_TYPE // Обязываем OrderSend и OrderTicket возвращать значение такого же типа, как в MT4 - int.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL, const color Color = clrNONE )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) &&
         ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color)));
}

void OnInit() { init(); }
void OnDeinit( const int ) { deinit(); }
void OnTick() { start(); }

#include "Equity_Tral.mq4" // https://www.mql5.com/ru/code/12354
Причина обращения: