程序库: MT4Orders - 页 36

 
Ilya Malev:
超强!据我所知,这解决了历史记录中 SELECT_BY_TICKET 选择的问题(在保证不部分执行的情况下)?
#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0); // 打开了一个仓位。
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);         // 关闭位置。
    
  if (OrderSelect(Ticket, SELECT_BY_TICKET)) // 在任何 MT5 票据上选择的选项将被触发。
    OrderPrint();
}

这是最原始的用法示例。

感谢@Andrey Khatimlianskii@Igor Makanu 的 "完成"。大家提出的任务都没有想到。


特别是,现在即使在净额结算中,也可以根据订单打开时的票据来监控订单的命运。

很难举例说明所做工作的复杂性。请尝试在不同情况下(和部分执行)对OrderTicket、OrderTicketOpen、OrderTicketID和任何MT5订单执行SELECT_BY_TICKET。

 
fxsaber:

这是一个最原始用法的例子。

有一点我不明白:在您的示例中没有调用新函数。在最新的库中,历史记录会像 MT4 默认的那样工作吗?还是仍有必要对收到的票据进行处理?

 
fxsaber:

感谢@Andrey Khatimlianskii@Igor Makanu 的 "完成"。提出的任务没有想到。

感谢你们的辛勤工作和支持

 
Ilya Malev:

有一点我不明白:在您的示例中没有调用新函数。在最新的库中,历史记录会像 MT4 默认的那样工作吗?还是您仍然需要对收到的票据进行处理?

您不需要对收到的票据做任何处理。现在可以轻松解决的任务范围已经扩大。举个例子


此脚本

#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:

通过所选票据中的任何票据进行选择都会得到相同的结果。

因此,按票据选择成功且 OrderTicket() != 票据是完全正常的。

 

关于交易、自动交易系统和测试交易策略的论坛

专家:TradePanel

fxsaber, 2019.04.10 22:28

转换到 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 // 宏重新定义

#include "TradePanel.mq4" //https://www.mql5.com/en/code/19752
 
转换的另一个例子

关于交易、自动交易系统和测试交易策略的论坛

指标:股票图表

fxsaber, 2019.04.25 11:25 AM.

看起来成功了

#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" - 常量无法修改 Equity-Monitor.mq4 734 7
#include "Equity-Monitor.mq4" //https://www.mql5.com/zh/code/13242

 

关于交易、自动交易系统和测试交易策略的论坛

MT4 至 MT5 代码转换器

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/zh/code/16006
#undef  Print
#undef  Alert
 

关于交易、自动交易系统和测试交易策略的论坛

专家:每日图表交易员

fxsaber, 2019.04.30 12:08 AM

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)));
}

#define NULL ""

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