初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1026

 
Vladimir Karputov:

重点并没有改变--你正试图删除一个 在每个tick上都有一个票据 "0"的挂单

还有,谁说你的挂单每一个刻度都是 "0 "刻度?你有没有检查过有多少个待处理订单?而你怎么知道....?

用哪个刻度是 "0"?OrderGetTicket(0)并不意味着选择了票数为0的订单,而是从索引为0的挂单列表中返回一个票数订单。

 
ascerdfg:


你可能需要在你的任务中更加具体。

例如:如果有一个魔力为 "1 "的挂单- 那么就删除它。

在这种情况下,执行情况将如下。

#include <Trade\Trade.mqh>

CTrade trader;
int OnInit()
  {

   trader.SetExpertMagicNumber(1);

   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
  {
//---
  
  }
void OnTick()
  {
   for(int i=OrdersTotal()-1;i>=0;i--) // returns the number of current orders
      if(OrderGetTicket(i)>0)     // selects the pending order by index for further access to its properties
         if(OrderGetInteger(ORDER_MAGIC)==1)
            trader.OrderDelete(OrderGetTicket(i));
  }

循环浏览所有待处理订单

如果一个挂单被成功选中(返回值是大于0的票据)。

如果所选挂单的魔法值为 "1"

删除它

 
Alexey Viktorov:

用哪张票 "0"?OrderGetTicket(0)并不意味着选择了票数为0的订单,而是从索引为0的挂单列表中返回一个票数订单。

是的,这是正确的。

 

你能告诉我,从2004年到今天,运行30个字符的测试器需要多少内存?

测试员说不够,但没有说需要多少。

 
Igor Zakharov:

你能告诉我,从2004年到今天,运行30个字符的测试器需要多少内存?

测试员说不够,但没有说有多少。

运行两个字符,五个字符...

 
Vladimir Karputov:

运行两个字符,五个字符...

这不是真正的问题--我需要购买多少内存才能使这样的测试成为可能?

下面是一个符号的结果(来自开盘价模式的日志)。

264  Mb memory used including 6 Mb of history data, 64  Mb of tick data

这里有2个。

271 Mb memory used including 12 Mb of history data, 64 Mb of tick data

3:

1038  Mb memory used including 12 Mb of history data, 832 Mb of tick data

而这里是4。

1450 Mb memory used including 18 Mb of history data, 1216  Mb of tick data

它的发展是成倍的:)我无法追踪其逻辑,因为刻度线是差不多的。

EURUSD,H1: 21470549 ticks, 94233 bars generated. 63097850 total ticks for all symbols
EURUSD: generate 21470549 ticks in 0:00:05.375, passed to tester 21470549 ticks
USDCAD: generate 20302871 ticks in 0:00:05.062, passed to tester 20302871 ticks
USDJPY: generate 21324430 ticks in 0:00:05.641, passed to tester 21324430 ticks
1450 Mb memory used including 18 Mb of history data, 1216 Mb of tick data

我看到很多关于20个或更多字符的报告,我不相信有人会使用TB级的内存。也许有一个秘密?

 

是否可以在指标中设置图形缓冲区的数量?

第二个问题,是否有可能强制重新初始化专家顾问使用的指标,以节省内存?

 
Aleksey Vyazmikin:

是否可以在指标中设置图形缓冲区的数量?

第二个问题,是否有可能强制重新初始化专家顾问使用的指标,以节省内存?

可以减少#property indicator_plots中所述的指标图的数量,我做到了。但几乎不可能增加它。但这种减少不会导致内存的节省。毕竟,缓冲区仍然存在。它们只是从 INDICATOR_DATA 转移到 INDICATOR_CALCULATIONS,仅此而已。

 
Alexey Viktorov:

在#property indicator_plots中陈述的内容可以减少,我做了这个。但增加它是不太可能的。但这种减少并不能节省内存。缓冲区毕竟还在。它们只是从 INDICATOR_DATA 转入 INDICATOR_CALCULATIONS,仅此而已。

谢谢你的答复。遗憾的是,缓冲区数量的外观变化与此无关。

 

我想在OnInit()块中从三个时间段获取MACD指标句柄。 在图表上--它可以工作,但在测试器中它不工作,终端挂得很紧!所以我想获取不存在的数据?能否请您告知如何处理?


//+------------------------------------------------------------------+
//|                                                        Test.mq5  |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//--- Количество периодов торгуемых символов
#define  NUMBER_OF_PERIODS 3

ENUM_TIMEFRAMES Periods[NUMBER_OF_PERIODS]={PERIOD_M1,PERIOD_M2,PERIOD_M3};
int handles[NUMBER_OF_PERIODS];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ArrayInitialize(handles,INVALID_HANDLE);
      for(int p=0; p<NUMBER_OF_PERIODS; p++)
        {
         if(handles[p]==INVALID_HANDLE)
           {
            handles[p]=iCustom(NULL,Periods[p],"Examples\\MACD");
            Print(handles[p]);
            if(handles[p]==INVALID_HANDLE)  Print("Не удалось получить хэндл индикатора для символа !");
           }
        }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+