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

 
Vikon:

你好!

我搞不清楚哪个区间可以显示一个图形对象

在所有的时间范围内。

谢谢你。

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
有谁知道编译器是否有一个键来获取关于未使用的函数和变量的信息,就像在MQL4中那样?

这在mql4中是如何做到的?

当被问及不显示未使用功能的警告时,Renat说它不会。与使用可插拔库有关。它曾经是在旧的建设中。现在没有了。在EA主体中寻找那些不使用的功能是非常不方便的。它只谈论未使用的变量,如果它在一个函数的主体中发现它们,而不是start()或OnTick()。

 
artmedia70:

在mql4中是如何做到的?

当被问及不显示未使用功能的警告时,Renat说它不会。由于使用了插件库。它曾经是在旧的建设中。现在没有了。在EA主体中寻找那些不使用的功能是非常不方便的。它只谈论未使用的变量,如果它在一个函数的主体中发现它们,而不是start()或OnTick()。

因为在OOP中,它不是函数,而是方法。每个库都可能有一堆有许多方法的类,其中一些是不使用的。此外类还引用了其他库,其中一些方法也没有被使用。这可能会导致一大堆未使用的方法混乱。

从编译后的代码量来看,编译器自动消除了未使用的方法。也就是说,自己寻找它们是没有意义的,因为这项工作是由编译器完成的。

 
Reshetov:

因为在OOP中,不是函数,而是方法。每个库都可能有一堆有许多方法的类,其中一些是不使用的。此外,类还引用其他库,其中一些方法也是未使用的。这可能会导致一大堆未使用的方法。

从编译后的代码大小来看,编译器自动消除了未使用的方法。也就是说,没有必要自己去寻找它们,因为编译器会做这项工作。

这不是问题所在。问题正是在你的 类中找到未使用的方法。我有自己的五百多种方法。相互关系是非常复杂的。运行时代码是不可避免的。快速查看一下不再使用的东西可能非常有用。
 
Reshetov:

因为在OOP中,不是函数,而是方法。每个库都可能有一堆有许多方法的类,其中一些是不使用的。此外,类还引用其他库,其中一些方法也是未使用的。这可能会导致一大堆未使用的方法。

从编译后的代码大小来看,编译器自动消除了未使用的方法。也就是说,没有必要自己去寻找它们,因为编译器会做这项工作。

尤里,这很自然。但当你把源代码交给客户时,你要把它清理干净。就这样开始了曲折的过程。模板不多--某些TC类的几个模板。我必须清理那些不涉及本案的函数。我希望有一个 "神奇的按钮",只指向EA主体中未使用的函数和变量。
 

我希望关于前一个问题的讨论已经结束。很难知道什么时候话题已经结束,而提出你的问题是合适的。你能给我一个提示吗?我不知道如何用St_handle和MA_handle 的计算结果填充一个二维数组,我只能把它们传给一维数组

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
这不是问题所在。问题正是在你的 类中找到未使用的方法。

你的意思是:你的类中未使用的方法?这不是OOP中的做法。一个正常的OOP程序员,与算法编程相反,创建的类具有所有必要的字段和方法,正如他们所说的,适用于所有场合,因为同一个类以后可能会在其他应用程序中使用或成为类库的一部分。更不用说即使在一个项目中,最好也是创建完整的类,而不是剥离的类,这样你就不必在源代码中搜索,并在以后添加所需的字段和方法。

在OOP中,任何经济,许多人在算法编程中习惯于此,以后可能会变成有害的。所有不使用的东西都必须由编译器而不是由程序员从代码中排除。

当然,与算法编程相比,OOP导致的源代码更大。但这不是缺点,而是优点,因为这个项目中的许多 "额外 "代码可以在其他项目中重复使用。

C-4:


我自己有五百多种方法。相互关系是非常复杂的。 简陋的代码是不可避免的。它对于快速查看不再使用的东西非常有用。

你不应该试图制造一个难题,即把所有东西都塞进一个班级。你需要创建类库,即把功能分解成独立的类,别忘了在这些东西上加上注释,然后一切都会自己解决。最初,当我在Pascal之后开始学习Java的时候,我也试图把所有的事情都放在一块做,也就是说,我没有使用OOP,而是创建了一个类,里面有某项任务所需的所有东西,就像在算法编程中一样。其结果是一个非通用的混乱局面,以后不可能在任何地方应用,更不用说难以理解这样的代码。
 
Andrei-1:

你能给我一个提示吗?我不知道如何用St_handle和MA_handle 的计算结果填充一个二维数组,我只能把它们传给一维数组

这有什么意义?也就是说,为什么要做一个驼峰而不是使用奥卡姆剃刀?也就是说,一个二维数组比两个一维数组有什么优势?毕竟,你首先需要把由默认指标创建的两个一维的东西放到二维的里面,然后再从里面取出东西。你在做不必要的工作,并试图把别人拉进来。

如果一维数组有问题,那就值得麻烦了。

 
在论坛上打探了一下,我发现这将需要多少内存,很多!我想,这将是一个很好的机会。决定填充一个一维数组,在其中寻找信号,覆盖并再次寻找信号。仍然需要10K周期。像这样。每小时一到两次搜索对我来说已经足够了。
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

对不起,如果这偏离了主题...

帮助谁可以...

在Delphi 7 dll程序中...

程序test1(var data: array of Double); stdcall;
begin
ShowMessage('Entered ' );

结束。

在mt4中。

#import "gayss.dll"
void test1( double &data[] ) ;
#import

ArrayResize(data, 6);
data[0]=2;
data[1]=4;
data[2]=8;
data[3]=16;
data[4]=21。

data[5]=3。

test1(data)。

并弹出了一个错误...2014.02.06 17:39:04.241 堆栈损坏,检查'SOG_2014.mq4'中的DLL函数调用(80,7)。

谁知道怎么做才对...