请观看如何免费下载自动交易
请在Telegram上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
程序库

TradeTransactions - MetaTrader 5程序库

显示:
1232
等级:
(30)
已发布:
2018.11.08 10:10
\MQL5\Indicators\fxsaber\ \MQL5\Experts\fxsaber\ \MQL5\Include\fxsaber\TradeTransactions\
Resource.mqh (0.63 KB) 预览
String.mqh (0.45 KB) 预览
\MQL5\Include\
TypeToBytes.mqh (20.54 KB) 预览
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

异步交易订单有很大的优点 - 当大批发送时速度很快。但是,许多这样的订单会造成不便处理 - 订单的结果只能在 OnTradeTransaction 中看到,如果用户想要在他们的交易策略中使用异步处理,必须构建一种事件模型。这并不总是那么简单(对于EA), 而有时甚至是不可能的 (对于脚本)。

这个开发库解决了这个问题,在任何时候,它都可以提供对终端中所有事务的访问 (相应 OnTradeTransaction 的完整数据),这个应用程序的运行简化了使您程序异步运行的过程。

例子

下面的例子展示了开发库的运行原则:

// 不适用 OnTradeTransaction 打印出所有事务

#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // 在程序中的任何位置访问 OnTradeTransaction 的数据

TRADETRANSACTIONS Transactions; // 交易事务

const bool Init = EventSetMillisecondTimer(100);

void OnTimer()
{
  static uint Total = 0;
  const uint NewTotal = Transactions.Total(); // 保存的事务数量
  
  for (uint i = Total; i < NewTotal; i++) // 在新的事务中遍历
  {
    MqlTradeTransaction Trans;
    MqlTradeRequest Request;
    MqlTradeResult Result;
    
    // 取得所有对应的事务数据并打印它们.
    Print(TimeToString(Transactions[i].Get(Trans, Request, Result)) + "\n" + 
          ToString(Trans) + ToString(Request) + ToString(Result));        
  }
  Total = NewTotal;
}

运行这个EA 并尝试人工进行交易,这个 EA 交易将会打印所有的细节,就像它有 OnTradeTransaction 一样,尽管它没有!

使用这样的功能可能会有很多实际场景,例如,交易交易品种篮子。例如,如果您需要在代码中快速建立多个仓位,如果它们已经建立,您可以不离开 On 函数就进行额外的交易操作。

因为我们经常需要等待很多异步发送的订单的结果,这个开发库含有快速访问信息的功能,就像使用这样的例子一样。

// 大批量异步交易并等待结果的实例。

#include <MT4Orders.mqh> // https://www.mql5.com/zh/code/16006
#include <fxsaber\TradeTransactions\TradeTransactions.mqh> // 在程序中的任何位置访问 OnTradeTransaction 的数据

TRADETRANSACTIONS Transactions; // 交易事务

// 尽快建立多个仓位,当仓位建立好以后返回。
bool OpenPositions( const int Amount = 10 )
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, Amount) - 1; i >= 0; i--)
  {
    const string Symb = SymbolName(i, true);
    
    RequestID[i] = OrderSendAsync(Symb, OP_BUY, 1, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0); // 发送异步订单
  }
  
  return(Transactions.Waiting(RequestID)); // 等待服务器对所有的异步订单做出回应
}

// 尽快关闭一切. 当操作被确认后返回.
bool CloseAll()
{
  uint RequestID[];
  
  for (int i = ArrayResize(RequestID, OrdersTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS))
      // 发送异步订单
      RequestID[i] = (OrderType() <= OP_SELL) ? OrderCloseAsync(OrderTicket(), OrderLots(), OrderClosePrice(), 100) : OrderDeleteAsync(OrderTicket());
  
  return(Transactions.Waiting(RequestID)); // 等待服务器对所有的异步订单做出回应
}

void OnStart()
{
  if (OpenPositions())
    Print(CloseAll());
}

当然,这是一个脚本,但是它还是允许通过这个开发库来操作事务。运行它会展示如何快速建立和关闭多个交易仓位/订单。

特性

  • 应当编译代码 Indicators\fxsaber\TradeTransactions.mq5 文件。
  • 使用了 TypeToBytes 开发库。
  • 这个开发库的源代码含有 (ResourceData.mqh) 一个通用类,可以是您快速保存/读取资源中的数据。

由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/22166

Skyscraper Skyscraper

一个 NRTR 类型的趋势指标,带有额外的中心线。

XRSI_Candle_Vol_Zer_Alerts XRSI_Candle_Vol_Zer_Alerts

XRSI_Candle_Vol_Zer 指标在有交易信号来到的时候会提供提醒,发送电子邮件和推送通知。

Easy Canvas Easy Canvas

本开发库以及 iCanvas 类简单使用了 Canvas 来开发程序。

Previous Candle Breakdown 3 Previous Candle Breakdown 3

"Previous Candle Breakdown" EA 交易。