Init()和DeInit()执行顺序 - 页 25

 
Alexey Viktorov:

迪米特里,在我看来,你是一个受过教育的程序员。你没有被教导过编程中的礼节规则吗?

其余的你可以像在老的mql4中那样写,有可能出现数组 超限和其他假设。你得到一个错误的回应...好吧,把旗子插回去...让我们继续,我们没有时间...然后你遇到了一个在更严格的语言中不值一提的问题,并开始指责开发者......

基督已经复活了。


当你创建一个现有的对象时,没有什么可怕的事情发生,也没有什么可怕的事情发生,这个对象只是没有被创建,就是这样而已。
 
Nikolai Semko:

我想我以后也会添加一个解决方案,但不使用全局终端变量和文件,而且可以在一个窗口中应用几个相同的指标

顺便说一下,写一个函数,为每一组不同的指标输入参数 产生不同的值,这是一个有趣的任务。

我想到的第一件事是ChartSaveTemplate。


放弃全球--显然是资源。

 
fxsaber:

顺便说一下,写一个函数,为每一组不同的指标输入参数 产生不同的值,这是一个有趣的任务。

我首先想到的是通过ChartSaveTemplate。


要放弃全球的--显然是资源。


当然,资源--在我看来,它们是最好的解决方案,因为它们是不可见的,不像全局终端变量和文件,而且速度快。另外,你可以通过它们传递数组,就像通过文件一样,但速度更快,因为所有的事情都发生在RAM中。它们也属于窗口,而不是像全局那样属于终端。此外,你可以为一个窗口中的所有相同指标创建一个资源。

不,我认为ChartSaveTemplate太麻烦了。我将尝试为一个指标的所有实例创建一个公共资源,而不使用全局变化、模板和文件。

 
Nikolai Semko:

我的例子是为了说明新TF的单位和旧TF的单位顺序不明确的问题,而不是作为一种解决方案。

你只是绕过了这个问题,而不是解决了这个问题。
在我的例子中,只是在任何情况下都要删除旧TF单元中的对象,包括当TF被改变时,在新对象的单元中再次创建它。

如果该序列首先是旧TF的Deunit,然后是新TF的Unit,这在逻辑上应该是这样。然后,该对象被删除,然后再次创建。

如果序列首先是新TF的Unit,然后是旧TF的Deunit,那么当你试图在Unit中创建对象时,该对象只是被修改,因为它还没有被删除。然后它被旧TF的Deunit删除。这是个错误。

这就是这个例子的重点--展示任何没有读过这个分支、不知道这个 "特性 "的程序员可能遇到的情况。
这个例子并不意味着是一个解决方案。这里这里 介绍的是解决方案的变体。我想我以后也会添加一个解决方案,但不使用终端的全局变量和文件,而且即使在一个窗口中设置了几个相同的指标,这个解决方案也能发挥作用。你是否尝试过解决这个问题?或者你只能够在别人的代码中找到错误,特别是在他们不存在的时候。


今天说脏话是一种罪过,但我觉得是...

我甚至无法将你的废话读到最后。

我再次重申,不要在没有问题的地方制造问题。

你的代码中所有问题的答案都在这里

阿列克谢-维克多罗夫

使用原始的双行道例子有什么意义?

你最好用一个几乎正确的 代码的例子。

我并不指望绝对性。

就这样......撒旦走吧,不要把我引向罪恶。

 
Alexey Viktorov:

今天说脏话是一种罪过,但我觉得是...

我甚至无法将你的废话读到最后。

我再说一遍,不要把问题放在不存在的地方。

你代码中所有问题的答案都在这里。

我并没有指望绝对的东西。

就是这样......撒旦走吧,不要把我们引向罪恶。


哦,伙计,你需要到另一个论坛去。心理治疗师提供建议的地方。我明白,我明白。儿童时期爱的缺失,希望得到关注和爱。我很抱歉。如果你需要什么,我会帮助你。你可以亲自 给我写信。我不是在开玩笑。

而且你最好不要在这里做,因为我们已经把人们逗得很开心了。

确实是复活了!

 
厉害的方法!运转
#property indicator_chart_window
#property indicator_plots   0

void OnInit()
{
  Print(__FUNCTION__ + (string)ChartIndicatorGet(0, 0, MQLInfoString(MQL_PROGRAM_NAME)));
}

void OnDeinit( const int Reason )
{
  Print(__FUNCTION__);
}

int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double& price[])
{
  return(rates_total);
}

并调换TF。不会有任何一个Deinit!所有指标都会在不知不觉中运行,吞噬资源。而只是想

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2016.09.22 16:14

如何在一个指标中知道我在图表上的手柄?通过ChartIndicatorName是不合适的,因为它返回一个短名称而同名的指标可能已经在运行,输入参数不同。

事实证明,如果你想知道它的手柄,你必须使用ChartIndicatorGet,但正如上面的例子所示,这将是一个真正的问题--指标将被卸载。

真是无奈。


我甚至无法做到这一点。

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

fxsaber, 2016.09.23 10:20

我如何知道我的INDICATOR_SHORTNAME?IndicatorGet*-函数不存在!

没有办法从指标中知道它击中了哪个子窗口。这只是一群无赖。

 
fxsaber:

你不能从指标中看出它是在哪个子窗口。这只是一群无赖。

https://www.mql5.com/ru/docs/chart_operations/chartwindowfind
Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
Операции с графиками / ChartWindowFind - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
一个很酷的小技巧!运转

并调换TF。不会有一个Deinit!所有指标都会隐蔽地运行,吞噬资源。而我只想

事实证明,如果你想知道它的句柄,你应该使用ChartIndicatorGet,但是,如上面的例子所示,这将是一个真正的遗憾--该指标将是不可删除的。

它将变得无法恢复。

我曾面临这样的事情。建议开发者更仔细地阅读帮助,因为其中有一个例子。

//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart() 
  { 
   //--- количество окон на графике (всегда есть хотя бы одно главное окно) 
   int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL); 
   //--- про ходим по окнам 
   for(int w=0;w<windows;w++) 
     { 
      //--- сколько индикаторов в данном окне/подокне 
      int total=ChartIndicatorsTotal(0,w); 
      //--- переберем все индикаторы в окне 

      for(int i=0;i<total;i++) 
        { 
         //--- получим короткое имя индикатора 
         string name=ChartIndicatorName(0,w,i); 
         //--- получим хэндл индикатора 
         int handle=ChartIndicatorGet(0,w,name); 
         //--- выведем в журнал 
         PrintFormat("Window=%d,  index=%d,  Name=%s,  handle=%d",w,i,name,handle); 
         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным 
         IndicatorRelease(handle); 
        } 
     } 
  }
然而,他们随后补充说,这种行为将得到 "纠正"。但显然它仍在调整中。
 
Alexey Kozitsyn:
https://www.mql5.com/ru/docs/chart_operations/chartwindowfind

谢谢,但也有同样的限制--没有短名就没有办法(你怎么知道的?)

 
Alexey Kozitsyn:

我遇到过这样的事情。开发人员建议我更仔细地阅读帮助,因为其中有一个例子。

然而,随后补充说,这种行为将被 "纠正"。但显然它仍在调整中。

这真的很有帮助,谢谢你!

最主要的是不要在Deinit中做IndicatorRelease