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

 
hamsteruser:

*returntick也没有被销毁。我只是对交易终端 的排气感到困惑。这是在写未清除的记忆。


给我所有你使用函数返回的指针的代码,以及你销毁指针的时刻。要帮助你真是太难了。

 
Anatolij Povoroznyj:

你好。请帮助我纠正代码。我需要EA不要开一系列的订单,而是在第一个事件中只开一个订单。

现在它是这样工作的:当CCI向下穿过200线时,这就打开了一个BAY,然后如果CCI再次向下穿过200线,这就打开了另一个BAY,等等,等等,直到CCI向上穿过-200线,然后所有的BAY被关闭,一个Sell被打开。

我想问的是: 当SSI从上到下越过200线时--第一个也是唯一一个BAI打开,其他BAI不应该打开,直到SSI从下到上越过-200线,在这种情况下,BAI被关闭,卖出被打开。(镜像卖出线和-200线)。


增加一个功能,检查是否有任何相关类型的未结订单。也就是说,如果有订单,该函数将返回真,下一个订单将不会打开。

 

也许这不是重点...

关于MT4的一个愿望

我使用许多警报,它们都是为某些参数而设置的。

我将警报的寿命设置为必要的长度,并将其复活到新的目标价格。

由于我的终端机的警报日志不是按符号或事件分类的,所以每次寻找正确的警报是一件很麻烦的事。

如果能像 "交易 "标签那样有排序选项就更好了。

 
hamsteruser:

有一个带指针的函数。


我仍然在另一个函数中调用它。


我怎样才能清除背后的记忆?

在delete(TickReturn);我得到一个错误的操作数除外。

TickReturn* rt = returntick( period, 1 );

int timeis = rt.curtime;

delete rt;
 
MMM1972:

也许这不是重点...

关于MT4的一个愿望

我使用许多警报,它们都是为某些参数而设置的。

我将警报的寿命设置为必要的长度,并将其复活到新的目标价格。

由于我的终端机的警报日志不是按符号或事件分类的,所以每次寻找正确的警报是一件很麻烦的事。

如果能像 "交易 "标签那样有排序选项就更好了。

MT4终端已不再开发。只有发现的bug才会被修复。

 
Алексей Барбашин:

给出你使用函数返回的指针的所有代码,以及你销毁指针的时刻。要帮助你真是太难了。

记忆真的在流动。

  class TickReturn

   {

   public:

      int curtime;

      double open;

      double close;

      double high;

      double low;

      double priceask;

      double pricebid;

      

   };



  TickReturn *returntick(int period, int timeposition)

   {

      TickReturn *returntick = new TickReturn();

      MqlRates rates[];

      MqlTick last_tick;

      

      if(SymbolInfoTick(symbol,last_tick)){}

      else Print("SymbolInfoTick() failed, error = ",GetLastError());

      

      //int timeposition=0;

      ArraySetAsSeries(rates,true);

      ArrayResize(rates,1);

      int copied=CopyRates(symbol,period,timeposition,1,rates);

      

      returntick.curtime = rates[0].time;

      returntick.open = rates[0].open;

      returntick.close = rates[0].close;

      returntick.high = rates[0].high;

      returntick.low = rates[0].low;

      returntick.priceask = last_tick.ask;

      returntick.pricebid = last_tick.bid;

      

      return(returntick);

}

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Вот здесь пытаюсь уничтожить указатель. }

 
hamsteruser:

记忆真的在流动。


void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis=", TimeToStr(timeis,TIME_SECONDS)); 这就是我试图销毁指针的地方 }


现在还不太清楚这里到底能摧毁什么。难怪内存会泄漏。什么是指针?指针是对存储创建的动态变量的内存地址的引用。基本上,你调用了获取类变量指针的程序,在这个程序中,类对象被创建,放在内存中,然后指针被返回到获取刻度的函数中,....在你退出该函数时被销毁。请注意,指针被销毁了,但内存没有被清空!而每一次新的勾选,都会有越来越多的内存被吞噬掉!为了避免在你的代码中出现这一点,你首先应该删除缩写,并将指针放到另一个变量中。TickReturn* temptick =returntick(period, 1);//获得指针并将其放入一个变量 int timeis = temptick.curtime; // 通过指针从对象中获取所需的值 ...... delete temptick; // 销毁指针并清除内存

而在销毁指针之前,最好先检查一下它是否正确,以避免出现删除错误。

总的来说,我不会特别为指针和类而烦恼,因为事实上任务要简单得多,没有必要使用这个类。用需要的字段创建结构,用这个结构的类型声明全局变量,在每次打勾时,用函数来更新这个结构中的信息,并从中收集你需要的东西,因为变量是全局的,你不需要通过函数来运行它,也不需要指针。

 

1.是否可以用mql4来禁用其他EA?

2.要检查是否有一个专家顾问在一个给定的ChartId 上运行?

 
Sergey Likho:

1.是否可以用mql4来禁用其他EA?

2.检查是否有一个专家顾问在给定的ChartId上运行?


可以在EA代码内部禁用交易,并在一个外部文件中进行切换,那么另一个EA就可以通知任何EA不再需要交易了。

 
Aleksey Vyazmikin:

你可以在EA代码内禁止交易,并在外部文件中进行切换,那么另一个EA就可以告诉任何EA不再需要交易了。


这个想法正是,EA A将通过条件使EA B失效。