错误、漏洞、问题 - 页 567

 
所以CTrade 成功了......只是需要一个文件来重做一切......又是一艘直升机潜艇......我告诉你我不知道怎么做,不是一个无赖......:)
 

是的......这在原则上都是一样的......

 

新的建设已经停止复制循环中的简单结构。这里有一个测试脚本。

//+------------------------------------------------------------------+
//|                                             Test_Copy_Struct.mq5 |
//+------------------------------------------------------------------+
struct  trade_settings
  {
   int      reopened;
   int      reverse; 
   int      TrailingStop;
   int      WithoutlossLevel;
   int      WithoutlossProfit;
   double   LossToReverse;
   int      MAPeriod;
   int      MA_use;
   double   Lots;
   int      takeprofit; 
  };
trade_settings arr_tr_set_ini[3]={  
 {60,90,1000,100,900,2000.0,105,1,0.13,2700},   // EURUSD
 {130,1298,400,300,600,1000.0,130,1,0.1,2800},  // GBPUSD
 {110,140,200,600,800,1000.0,85,0,0.15,1700}};   // AUDUSD 
trade_settings symb_default={110,130,200,1300,1500,3000.0,100,1,0.1,1000};

class CTest_Copy_Struct
  {  
protected:
   trade_settings    m_tr_set;
public:
   void              Copy_tr_set(const trade_settings& tr_set){m_tr_set=tr_set;}
   void              Print_tr_set(){printf("Setting reopened=%u overpos=%u TrailingStop=%u WithoutlossLevel=%u WithoutlossProfit=%u" 
                        ,m_tr_set.reopened,m_tr_set.reverse,m_tr_set.TrailingStop,m_tr_set.WithoutlossLevel,m_tr_set.WithoutlossProfit);
                        printf("LossToReverse=%.2f MAPeriod=%u MA_use=%u Lots=%.2f takeprofit=%u"
                        ,m_tr_set.LossToReverse,m_tr_set.MAPeriod,m_tr_set.MA_use,m_tr_set.Lots,m_tr_set.takeprofit);}
   void              Zero(){ZeroMemory(m_tr_set);} 
  };

void OnStart()
  {
   CTest_Copy_Struct Test; 
   Test.Zero();
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(arr_tr_set_ini[0]);
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(arr_tr_set_ini[2]);
   Test.Print_tr_set();
   Print("------------------------------");
   Test.Copy_tr_set(symb_default);
   Test.Print_tr_set();
   int total=ArraySize(arr_tr_set_ini);
   for(int i=0;i<3;i++)
     {
      Print("i=",i);
      Test.Copy_tr_set(arr_tr_set_ini[i]);
      Test.Print_tr_set();
     } 
  }
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Valmars:

结果。

2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Access violation read to 0x00000000209FFFAC in 'E:\Program Files\Championship_2011\MQL5\Scripts\Test_Copy_Struct.ex5' 。
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) i=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=3000.00 MAPeriod=100 MA_use=1 Lots=0.10 takeprofit=1000
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) 设置reopened=110 overpos=130 TrailingStop=200 WithoutlossLevel=1300 WithoutlossProfit=1500
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=1000.00 MAPeriod=85 MA_use=0 Lots=0.15 takeprofit=1700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD, M15) Setting reopened=110 overpos=140 TrailingStop=200 WithoutlossLevel=600 WithoutlossProfit=800
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=2000.00 MAPeriod=105 MA_use=1 Lots=0.13 takeprofit=2700
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=60 overpos=90 TrailingStop=1000 WithoutlossLevel=100 WithoutlossProfit=900
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) ------------------------------
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) LossToReverse=0.00 MAPeriod=0 MA_use=0 Lots=0.00 takeprofit=0
2011.11.13 09:30:44 Test_Copy_Struct (EURUSD,M15) Setting reopened=0 overpos=0 TrailingStop=0 WithoutlossLevel=0 WithoutlossProfit=0

 

https://www.mql5.com/ru/docs/basis/function/events,最后说:"为了更好地理解,运行下面所附代码的指标将是有益的。"

运行代码。在周末。没有发生更好的理解--我想,现在的情况很好,但最坏的印象被加上了。周末没有刻度,所以在这个时候prev_calculated= 0,当从时间框架到时间框架时,总是如此。

然而,在一个点上,这个值出现了(没有重新连接,说实话很高贵!)。

和图表上的有趣线条。

或一半的乐趣,像这样。

在故事的开头甚至还有以ZigZag形式出现的台词(唉,我忘了截图,无法重现)。

线条也出现在其他TFs上,但更加稀少。你可以很容易地自己看到它。

这正是作者想说的吗?

为什么prev_calculated 的结果即使不奇怪,也至少在没有ticks的情况下是不相等的?从TF跳转到TF时,是否有什么地方出现故障?

这些(或任何其他)线条是否应该出现在刻度线之外?

在极少数情况下,相对频繁的从TF到TF的跳跃能否产生某种假动作,启动历史上的条形值的计算等?

我是否应该期待终端的不稳定行为会被消除?还是我应该学习数学?

也许我正试图做一些我不应该做的事情?在这种情况下,请证明你的观点是正确的。

我有很多问题...但这仅仅是个开始...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

继续...

在同一个链接中,有一句话:"注意:如果OnCalculate函数返回空值,在客户终端的DataWindow中不会显示任何指标值。"

事情是这样的...如果需要,我很乐意同意任何手臂的增长,并在必要时立即跑去矫正它。但是。在简单和中等复杂度的指标中,你可以通过某种方式摆脱一些磕磕绊绊的情况。但是,随着代码变得越来越复杂,任何Copy...() 的函数(既接受另一个指标句柄作为参数,也不接受它)开始使情况复杂化,正如我个人认为,一周前处理MQL编程。这时,人们不知道代码中还有什么可以改变,因为所有可以改变的东西都已经被改变了,剩下的,在我看来,一定不能改变,因为它与问题没有关系。或者出现一个绝对令人沮丧的想法:改变整个算法,因为没有考虑到终端的特殊性和变化无常。毕竟,在研究MQL的文档时,你必须处理细微的差别,而这些差别是开发人员保持沉默的,很可能是无意的。而MQL程序员在完全研究了文档之后,从来没有学到很多东西......而最令人失望的是,使用MQL,你要么根本无法纠正终端的许多变化无常,要么你可以使用可疑的拐杖,有一天痛苦地崩溃......

嗯...我今天有点疯了。现在是周末了。

这就是我今天早上想告诉你的...

https://www.mql5.com/ru/forum/1111/page570#comment_117425- 我已经完全解决了指标在初始终端启动时无法呈现的主要问题(我希望没有人会争论,没有什么应该阻止一个分形指标在整个历史上正确呈现,即使没有刻度?)

它是。

            CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                    TimeUpBuffer[shift],
                                    exact_extremum);

被取代。

            if(CopyHigh(_Symbol,PERIOD_M1,TimeUpBuffer[shift+1]-1,
                                       TimeUpBuffer[shift],
                                       exact_extremum)<0) return(0);

我承认我的不专心和由此产生的有害的形式主义。

但是。它在最简单的情况下也有帮助(我特意简化了初始指标)。在一个更复杂的指标中,这些操作是没有帮助的--在某个时刻,这些变化没有显示出任何差异,特别是现在有很多复制功能。而且我非常希望得到一个合理的指示,告诉我下一步该怎么走,去哪里。毕竟,这么多时间是花在开箱即用的东西上。到目前为止,我甚至不知道这是我的错还是终端的错。而且我不确定这只是缺乏如果和回报......在这里和那里看起来很可疑,比如说别的,比如说......

如果有必要,我会把代码发给我个人的开发人员;我也可以附上一个类似的代码,但以不同的方式实现,而且工作起来没有问题(虽然,它不太适合我正在探索的任务和目标)。

 
终端专家标签中的打印功能记录过程,以及RAM和磁盘上的文件是否是一个独立的过程?似乎是分开的,终端没有冻结,但为什么在密集的记录过程中,它的速度变慢了,好像装满了砖头?有什么办法可以卸载它吗?如果我决定输出相当中等的ArraySize的数组元素,滞后是相当明显的,我将忘记一次性输出更大尺寸的数组元素的值。
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 

有一个强烈的怀疑,就是终端在搅乱缓存(我几乎不在这个圈子里,所以......)。更糟糕的是--即使是MetaEditor也会以某种方式影响对当时终端中正在发生的事情的处理。

我不止一次遇到这样的问题,当我修改了MQL程序的代码(将调试数据打印到Expert Advisor标签日志中),重新编译,进入终端窗口,看到以前的结果在重复,尽管我可以肯定地说,这不是以前未完成的程序运行的某种延迟返工。所以,看起来我在MetaEditor中用F7编译更新的代码,并将其发送至运行,与此同时,终端被命令重放旧的代码(从缓存中,或类似操作系统 "伪造 "内存页的东西)。有趣的是,不仅可以通过完全卸载terminal.exe进程来撤销/卸载 "卡在牙缝里 "的前一版本的.ex5-代码,而且在某些罕见的情况下--仅仅通过关闭MetaEditor。你想怎么理解就怎么理解,我只是叙述了我个人观察到的情况。

最近,出现了一种情况,即设计。

Print(1);
for(int e=0; e<ArraySize(Arr); e++)
{
   Print(Arr[e]);
}
图表只显示第一个Print的值,但等待数组元素 的输出是没有用的。在删除第一个Print并重新编译后,数组项目的循环输出立即开始。是普林斯对MQL5-社区的秘密阴谋,还是只有我一个人有这样的坏运气?

此外,我想指出的是,这些终端行为的奇怪情况不是在MT5实例上观察到的,而是在一个干净的图表窗口(不包括运行中的指标的轮廓)上观察到的,该实例上有大量的图表窗口、图形对象和MQL程序。

 
x100intraday 忘掉这些问题--用C语言或其他语言编写。毕竟,我们从终端需要的只是获取报价、账户信息和执行订单,其余的可以在专门的编程环境中编写,并通过库连接。否则,他们会在某一时刻改变一些东西,如果项目很大的话,就会没有答案,不知道为什么不成功。你不需要这样的冒险 :)如果专家顾问在同一时间不得不重新编译和追赶维护当前的订单,你将失去金钱,因为你将不得不找出什么和为什么。
 
ivandurak:

1.ArrayInitialize代码不工作,如果取消循环,一切正常。

而当在类中声明变量和在全局层面上声明相同名称的指标时,就会弹出警告。

1.PlotIndexSetDouble(z,EMPTY_VALUE)用于inite中的指标缓冲区。

2.它突然出现了。那么就应该做些什么,建议用 "m_"前缀来标记类成员。

Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
Документация по MQL5: Пользовательские индикаторы / PlotIndexSetDouble
  • www.mql5.com
Пользовательские индикаторы / PlotIndexSetDouble - Документация по MQL5