新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1013

 

我怎样才能在MQL5中控制挂单


问题是,我需要以下功能:"不要混淆头寸和挂单"。


那么我怎样才能获得这些待定订单的信息?

 
Alexandr Sokolov:

我怎样才能在MQL5中控制挂单


问题是,我需要以下功能:"不要混淆头寸和挂单"。


那么我应该如何获得这些待定订单的信息?

我只需要阅读待定的订单。例如,这个功能只适用于待定止损单。

//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
 
Vladimir Karputov:

你只需要阅读待处理的订单。例如,这个功能只适用于待定止损单。

非常感谢您!


我只是在看例子,都是通过Position...

 
Alexandr Sokolov:

非常感谢您!


只是,我看了一下例子,都是通过Position...

下面是一个可以编译的例子。

//+------------------------------------------------------------------+
//|                                    CalculateAllPendingOrders.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#property script_show_inputs
//---
#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
//---
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
COrderInfo     m_order;                      // object of COrderInfo class
//--- input parameters
input ulong    InpMagic             = 200;         // Magic number
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return;
     }
//---
   int count_buy_stops=0,count_sell_stops=0;
   CalculateAllPendingOrders(count_buy_stops,count_sell_stops);
  }
//+------------------------------------------------------------------+
//| Calculate all pending orders                                     |
//+------------------------------------------------------------------+
void CalculateAllPendingOrders(int &count_buy_stops,int &count_sell_stops)
  {
   count_buy_stops   = 0;
   count_sell_stops  = 0;

   for(int i=OrdersTotal()-1; i>=0; i--) // returns the number of current orders
      if(m_order.SelectByIndex(i))     // selects the pending order by index for further access to its properties
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==InpMagic)
           {
            if(m_order.OrderType()==ORDER_TYPE_BUY_STOP)
               count_buy_stops++;
            else
               if(m_order.OrderType()==ORDER_TYPE_SELL_STOP)
                  count_sell_stops++;
           }
  }
//+------------------------------------------------------------------+
附加的文件:
 
Alexandr Sokolov:

我怎样才能在MQL5中控制挂单


问题是,我需要以下功能:"不要混淆头寸和挂单"。


那么我怎样才能获得这些待定订单的信息?

不同的是,在mql4函数OrdersTotal()返回市场和挂单的总数。而在mql5中,它只返回挂单的数量。而要获得头寸的数量,以mql4市场订单而言,函数PositionsTotal()

 
Alexey Viktorov:

没有看到论坛上的主题,但看了几个说明后,我觉得这个 更容易理解。试过了,起作用了,但我认为还没有必要应用它。尽管我认为将所有终端的历史记录合并到一个文件夹中是一个好主意。

我读了链接中的文章。这很精彩。对于那些有许多终端的人来说,这是一个超级解决方案。现在,不同的终端可以有一个mql4文件夹,而不需要不断地来回复制文件。

非常感谢!!!

 
Sergey Likho:

我读了链接中的文章。这很精彩。对于那些有许多终端的人来说,这是一个超级解决方案。现在,不同的终端可以有一个mql4文件夹,而不需要不断地来回复制文件。

非常感谢!!!

我不是那个应该感谢的人。我注意了谢尔盖-塔波林的帖子,并将其中的一些话与Seric29的愿望相匹配,好在我自己查了一下。

 

你好。

请帮助我理清代码。

我试着把网格放在市场上,他们开始骂我:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: FreeMarginCheck函数 的无效手数

附上专家顾问文件。

预先感谢你。

Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...
附加的文件:
123.mq4  87 kb
 
Dmitriy Prigodich:

你好。

请帮助我理清代码。

我试着把网格放在市场上,他们开始骂我:2016.04.01 00:02:00 1111111113241135454356146 EURUSD,H1: FreeMarginCheck函数 的无效手数

附上专家顾问文件。

预先感谢你。

它还说:无效的手数

FreeMarginCheck函数不检查专家顾问的参数,也不增加正常化的手数。

PS - 好吧,不要把所有东西都放在市场上,越是这样他们自己就越不用。需要评级,填上更好的代码库

 

我想做一个视频,但我没有相机,我有一个沙皇豆时代的旧手机。 所以我创建了一个专家,并将其称为111.mq4

下面是它的原始代码。

#property strict
#import "111б.ex4"//111б.mq4
int Funi(string Soob);
#import

int OnInit(){Funi(Symbol());return(INIT_SUCCEEDED);}
void OnDeinit(const int reason){}
void OnTick(){Funi(Symbol());}


然后我创建了一个库,将其命名为111b.mq4,其原始代码为

#property library
#property strict
 string  st_mas[]; //export
 int Funi(string Soob)export
 {st_mas[(ArrayResize(st_mas,ArrayRange(st_mas,0)+1))-1]=Soob;
 Print("Размер массива = ",ArrayRange(st_mas,0));
 for(int i=0;i<ArrayRange(st_mas,0);++i)
 Print("Вывод массива ",st_mas[i]);
 return 2;}

.我在库中声明了一个字符串数组,但后来发现,开发者没有提供导出和导入数组和变量的可能性。事实证明,没有办法得到一个能记住这些信息的全局数组。但不要紧,我走了另一条路。我创建了Funi() 函数。然后我通过H键终端创建了硬链接,是这样设置的

原始文件在Forex4you中,链接在Forex4you1中,我把机器人的原始文件和链接扔到了图表上,第一次计算得到了,但是当ticks去了只有原始的Forex4you更新了信息和数组st_mas 的大小增加了,但是当ticks去了Forex4you1的时候什么都没有发生只有当文件手动到了图表上。然后我走了另一条路。我做了一个名为333.mq4的专家顾问,并将其安装在MT4 Forex4you1中,将库111b.mq4连接到它,并将程序扔在图表上。机器人333.mq4能够连接到库的链接,这个东西开始在线工作,但后来发现,这个库是一个原型,其中声明的数组在一个单一的图表中工作。

这个例子表明,即使机器人连接到一个有全局数组的库,该数组作为一个图像工作,仍然不能提供通信,我们需要创建共享变量,这些变量将从所有方面都可以使用。谁知道是否有可能导出数组和变量。我认为第二个选择是将信息写入文件,因为文件不会是一个代理,将从两边读取,因此终端和机器人将能够相互沟通。谁知道如何使用文件检查这个理论,因为我还没有这个经验。

你们知道是否可以导出数组和变量吗?

原因: