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

 
Metatrader 5与之前的4个有什么不同,是否更难操作。每个经纪商都提供这些方案,为什么没有一个方案适用于所有经纪商,这样你就不必安装许多方案。
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik:
Metatrader 5与之前的4个有什么不同,是否更难操作。每个经纪人都提供这些程序,为什么没有一个适用于所有经纪人的程序,这样你就不必安装很多程序了。
下载这两个终端,在模拟账户上进行操作,自己找出答案。
 

我想做一个函数,它将返回最后关闭 的位置的结果 (加或减)。这个函数是为多货币专家顾问设计的,应该在所有货币对中选择最后 关闭的头寸,我在这方面遇到了一些问题。你能纠正这个功能吗?

double last_profit()
{  
int dir = 0;
double prof = 0;
ulong d_ticket;

if (HistorySelect(0,TimeCurrent())) 
    {
       int j=HistoryDealsTotal()-1;
       if(j>0)
      {
         d_ticket = HistoryDealGetTicket(j);
         if (d_ticket>0)
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if(prof < 0)dir = -1;
if(prof > 0)dir = 1;
if(prof == 0)dir =0;

return(dir);
} 

 
Automated-Trading:

OBJ_ALL_PERIODS=2097151

谢谢,但没有任何效果。问题是,D1和...... 期间的计算应该在所有的时间框架上显示,但它并没有像现在这样运行出来。该怎么做?
附加的文件:
macd2.mq5  4 kb
 
Reshetov:

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

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

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

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

我非常理解这一切。但我们至少可以向你展示不会被使用的私有变量,因为它在VisualStudio中是这样做的?

问题是,类是在开发过程中设计的。你根本无法考虑到创造之前的一切。这就是为什么要创建功能尽可能少的框架类。在与这些框架类互动的同时,整体架构也开始被阐述。有些方法被简单地删除,有些则被移到私有部分,有些则从一个类迁移到另一个类。在这个过程中,不可避免地出现了被遗忘的变量、方法,甚至是整个类。这很正常,因为这是另一个类似于冈山原则的东西在起作用--首先我们写出了坏的、多余的代码。然后,我们把任务更明确地正规化,一些实体就简单地消失了。冗余的结果是一无所获。而正是在这个过程中,编译器的帮助将是非常有用的--看到未使用的变量和至少是私有方法将是非常有用的。

 

你好。

我知道,指标中使用的 OnCalculate() 函数是自己生成的,即没有价格变化事件

在指标中可以应用什么功能,只在价格变化事件发生时产生?谢谢你

 
Vikon:

你好。

我知道,指标中使用的 OnCalculate() 函数是自己生成的,即没有价格变化事件

在指标中可以应用什么功能,只在价格变化事件发生时产生?谢谢你

计算事件是在初始事件后和任何价格数据变化时 立即为指标生成的。它是由OnCalculate 函数处理的。当历史被改变时(当历史被分页时),这个事件也将产生OnCalculate

OnCalculate 是指标最重要的功能,在价格数据变化的情况下,所有的指标计算都在其中进行。

 
barabashkakvn:

计算事件只在Init事件发送后和价格数据发生任何变化时 立即为指标生成。该事件由OnCalculate 函数处理。当历史被改变时(当历史被分页时)也会产生同样的OnCalculate

OnCalculate 是指标最重要的功能,在价格数据变化的情况下,指标的所有计算都在其中进行。

在这里,它有一些循环,也就是说,它总是产生,当周期改变时,读数就会改变。错误是什么?

#property copyright "Copyright 2014, MetaQuotes Software Corp.
#属性链接 "http://www.mql5.com"
#财产版本 "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//|自定义指标初始化函数

int EMA1=12。
int EMA2=26。
int SMA=9。

ENUM_TIMEFRAMES period_macd。
datetime t_MACD[]。
双重MACD[]。
bool high_low=false。
int shift_nachalo;
double w_MACD[]; d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0。
int barUP=0。

//+------------------------------------------------------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE)。
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE) 。
ArraySetAsSeries(MACD,true)。
ArraySetAsSeries(t_MACD,true)。
ArraySetAsSeries(w_MACD,true)。
ArraySetAsSeries(d_MACD,true)。
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
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[])
{

ObjectsDeleteAll(0,0,-1)。
////////////////////////////////////////////////////////
period_macd=PERIOD_D1。
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD)。
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY)。
nachalo()。
ObjectCreate(0, "lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0)。
ObjectSetInteger(0, "lin_2",OBJPROP_BACK,true)。
ObjectSetInteger(0, "lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0, "lin_2",OBJPROP_COLOR,clrYellow)。
ObjectSetInteger(0, "lin_2",OBJPROP_STYLE,1)。
return(rate_total)。
}
//+------------------------------------------------------------------+
//////////////////////////////////////////////////////////////////////////////
void nachalo() //开始一个新的波动
{
double low_nachalo[],high_nachalo[];
CopyTime(NULL,period_macd,0,1000,t_MACD)。
如果(MACD[1]>0)
{high_low=false;
while (MACD[barDown]>0)
{barDown++;}
barUP=barDown。
while (MACD[barUP]<0)
{barUP++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo)。
ArraySetAsSeries(low_nachalo,true)。
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1))。
}
如果(MACD[1]<0)
{high_low=true;
while (MACD[barUP]<0)
{barUP++;}
barDown=barUP。
while (MACD[barDown]>0)
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(high_nachalo,true)。

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1))。
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
附加的文件:
macd2.mq5  4 kb
 
Vikon:

这就是循环发生的地方,即它不断地产生,当周期改变时,读数就会改变。错误是什么?


如何在论坛中正确插入代码

 
Vikon:


注意这个错误。

没有拴住的指示器缓冲器

使用。

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer()
还请阅读"如何 在MQL5中编写指标"一文。