初学者的问题 MQL4 MT4 MetaTrader 4 - 页 180

 
Igor Makanu:

是的,我也是这样认为的,但不仅仅是历史记录和指标缓冲区的 数量--也就是说,同样是内存分配,如果MT4已经吞噬了所有的内存,那么它就会变慢--显然它开始释放内存区域了

肯定的是,开发人员可以回答,但我们谈论的是MetaTrader 4,这里...

 
Alexander Fedosov:

为什么要在代码中进行任何计算?

不要做计算 - 这个题目并不聪明,我有兴趣检查优化器的作用,所以我起草了代码

你可以以这样的方式将其添加到你的代码中。

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

即只需将优化参数写入文件,如果它挂了,在文件中你可以读到最后一次通过的参数是什么,文件的时间将是测试员 "最后一口气 "的时间。

 
Artyom Trishkin:

开发人员将能够明确回答,但我们谈论的是MetaTrader 4,并且有...

而在这里......一切都不会改变。我们使用我们所拥有的。

 

你好,你能告诉我,交易系统在某些条件下只在新的小时线开盘时开仓。我需要确保,如果我在当前柱状图上使用止损平仓,交易将不会再次开启。我是这样实施的。

如果(OrdersTotal()==0 &&ticket!=-1) //没有未平仓合约,但存在票据

{

如果(OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 订单结束时间

datetime tob=iTime(NULL,PERIOD_H1,0); // 当前栏位的打开时间。

if (tob>tct) // 如果交易在开仓的同一蜡烛图上被关闭,则不允许打开新的订单。

{

功能,以打开一个位置

}


策略测试器中,重开的头寸不再打开,但在实盘交易时,会打开一个头寸。你能告诉我什么是错的吗?)

 
kmerlin:

你好,你能告诉我,在某些条件下,交易系统是否只在新的小时线开盘时开仓? 我需要确保,如果我在当前柱状图上使用止损平仓,交易将不会再次开启。我是这样实施的。

如果(OrdersTotal()==0 &&ticket!=-1) //没有未平仓合约,但存在票据

{

如果(OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 订单结束时间

datetime tob=iTime(NULL,PERIOD_H1,0); // 当前栏位的打开时间。

if (tob>tct) // 如果交易在开仓的同一蜡烛图上被关闭,则不允许打开新的订单。

{

功能,以打开一个位置

}


策略测试器中,重开的头寸不再打开,但在实盘交易时,会打开一个头寸。你能告诉我什么是错的吗?)

是吗?

 
Alexander Fedosov:

是吗?


并非如此。我的变体有什么问题吗?主要条件是不能在当前的小时蜡烛上重新进入!?这是一个相当简单的条件,它有什么问题,为什么不工作?

 
kmerlin:

并非如此。我的变体有什么问题吗?主要的条件是不可能在当前的蜡烛上重新进入!这是不可能的。这是一个相当简单的条件,它有什么问题,为什么不工作?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

那你在OrderSelect 中选择了什么票?

 
Alexander Fedosov:

你在OrderSelect中选择了哪张票?

该票据是最后发出的...当一个订单处于开放状态时,系统中不能有新的订单,也不能有待定订单。因此,最后一张票是最后的止损或盈利订单。
 
kmerlin:
该票据被传递给最后一个订单。当一个订单处于开放状态时,在系统内不可能开立新的订单,而挂单 也不能进行。因此,最后一张票是止损或盈利的最后一笔订单。

你如何传递最后一个订单的票据?

而OrdersTotal()传递的是开仓和挂单 的总数。

这里是当前时间框架的新栏。

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

你如何传递最后一个订单的票据?

而OrdersTotal()传递的是开仓和挂单 的总数。

这里是当前时间框架的新栏。

该票据被声明为一个全局变量。一张票是通过购买或出售的。在我的系统中,不能开几个订单,只能开一个订单,而且也不能有任何待定的订单。因此,按照我的理解,最后一张票是以利润或止损点关闭的订单。

好吧,我的头在嗡嗡作响......我明天会重新考虑你的建议。