文章 "编写"EA 交易"时,MQL5 标准交易类库的使用"

 

新文章 编写"EA 交易"时,MQL5 标准交易类库的使用已发布:

本文阐述的是,在编写"EA 交易"的过程中,如何使用 MQL5 标准库交易类的主要功能,实现更改仓位与平仓、挂单的下达与删除,以及交易进行之前的预付款验证。我们还会演示可以如何使用交易类来获取订单与交易详情。

作者:Samuel

 

这篇文章对我非常有用。如果使用库,一切都会容易得多!

请开发人员:写一个类来处理 High[i] , Low[i]。Open[i], Close[i]。我想这个类对每个人都会有用!我自己已经解决了这个问题,但我不确定它是否正确,因为测试需要大量时间....。

 
查看时代系列班集体 部分
 
#include <Indicators\Series.mqh>

double High[];
 CiHigh z;

为什么这段代码会出错

'1.mq5' 1.mq5 1 1

'Series.mqh' Series.mqh 1 1

'ArrayObj.mqh' ArrayObj.mqh 1 1

'Array.mqh' Array.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'ArrayDouble.mqh' ArrayDouble.mqh 1 1

CiHigh' - 声明无类型 1.mq5 12 2

1 个错误,0 个警告 2 1

在所有示例中,都没有必要声明类型...

如果不难写出如何获得

例如 Print High[2]。

 
dimeon:

为什么这段代码会出错


没有必要在所有示例中声明类型...

如果不难,请写出如何获得

例如 Print High[2]。

文档中有一处错误。该类位于 TimeSeries.mqh 文件中。

使用示例(脚本打印当前图表的最后三个高点):

#include <Indicators\TimeSeries.mqh>
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double High[];
   CiHigh z;
   int count=3;
   if(z.Create(_Symbol,_Period)==true)
     {
      if(z.GetData(0,count,High)==count)
        {
         for(int i=0; i<count; i++) Print(i,"=",High[i]);
        }
      else
         Print("检索失败",count,"时间序列数据"。);
     }
   else Print("创建时间序列出错"。);
  }
//+------------------------------------------------------------------+
 
Quantum:

文件中有一处错误。该类在 TimeSeries.mqh 文件中。

使用示例(脚本输出当前图表的最后三个高点):

非常感谢!我一直在绞尽脑汁!
 

我知道每个人都是为了自己和自己的需要而编程,但我从根本上不喜欢时间序列类组,因为它们基本上都由一个方法和描述性部分组成,而描述性部分多于功能性部分,通常有必要为某个工具提供所有时间序列,我制作了一个类,其中有必要工具的所有时间序列,在方法中是通过历史分页制作的,大致是这样:

struct str_bars{
   datetime    time[];     // 时间序列数组,包含当前图表中每个条形图的开盘时间
   double      open[];     // 时间序列数组,包含当前图表中每一栏的开盘价。
   double      close[];    // 时序数组,包含当前图表每个条形图的收盘价。
   double      high[];     // 时序数组,包含当前图表每个条形图的最高价格。
   double      low[];      // 一个时间序列数组,包含当前图表每个条形图的最低价格。
};
struct str_info{
   double   point;         // 以报价货币为单位的当前仪表点大小
   int      spread;        // 当前价差
};
//____________________________________________________________________
class currency {
   public:
//---- данные      
      MqlTick TICK;        // 勾选数据
      str_bars  BAR;       // 时间序列数据
      str_info INFO;       // 工具信息
      int error;
//---- методы      
      int create(string sym,ENUM_TIMEFRAMES period, int numbars);
      int refresh(void);
   private:
      string            symbol;
      ENUM_TIMEFRAMES   per;
      int               num;
      datetime          lastbar_time;
      int               tmpint1,tmpint2;
      int ch_load(void);
};
//____________________________________________________________________

我只在已经准备好的数据部分使用我的类,当然类本身也通过调用 refresh() 方法接收数据。

 
有用的文章!
 

文章中有一处不准确的地方

double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // 批量价格/所需保证金数量

应该是

   double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price);  //----批量价格/所需保证金数量
[删除]  

好文章。非常感谢作者。我还想在下单前检查 Stop_Level 以及点差值。问题是,如果点差是浮动的,那么在点差值较高时,您就不能进入市场,因为这无利可图。这将有助于 Expert Advisor 在新闻期间不进行交易。我还想检查偏差--道理类似。还有一个关于函数库的问题:什么是函数(它表示和描述什么样的过程)?

冻结水平

以点为单位获取冻结 交易操作的距离

int FreezeLevel() 常量

请用简单的语言解释一下。

还有一个问题。我们可以找出限制,例如当前时刻的 Stop_Level(假设为 10 点)。我们下一个挂单,SL=10 点。例如,一小时后,价格达到订单中指定的价格,但此时的 Stop_Level 等于 15 点。会发生什么情况--挂单会生效还是会被拒绝?此外,当价格达到订单中指定的价格,但价差发生变化时--是否意味着可以在与打开订单时的预期价格相比更差的价格进入或退出,或者订单根本不会起作用?

 

我做错了什么? 为什么投标书没有打印出来?

以下是工作日志


2011.01.31 20:20:18 00(eurusd,m1) eurusd 0

以下是代码

#include <Trade\SymbolInfo.mqh>  //--- CSymbolInfo 类
CSymbolInfo    my_symbol;        //--- CSymbolInfo 类的对象
//+------------------------------------------------------------------+
//| 专家初始化函数|
//+------------------------------------------------------------------+
int OnInit()
  {   return(0);  }
//+------------------------------------------------------------------+
//| 专家去初始化函数|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {  }
//+------------------------------------------------------------------+
//| 专家勾选功能|
//+------------------------------------------------------------------+
void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }
//+------------------------------------------------------------------+