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

 

我正试图做一个简单的条目。正如我所希望的那样--如果开盘价比收盘价 少了几个点(在上一交易日),那么在新交易日开始时买入,同时考虑到获利和止损。但似乎有什么东西的工作方式与我想要的不同。帮助我了解


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

我正试图做一个简单的条目。正如我所希望的那样--如果开盘价比收盘价 少了几个点(在上一交易日),那么在新交易日开始时买入,同时考虑到获利和止损。但似乎有什么东西的工作方式与我想要的不同。请帮助我理解


错误1:你正在复制一个项目。 因此,项目索引将是[0]。

开盘100,收盘105--牛市。开-关=100-105=-5。'-5'将总是低于你的设定值,因为结果是一个负数。

开盘110,收盘103--看跌柱。开-关=110-103=7。'7'是一个正数,这已经可以正常工作了。


总结一下:纠正对索引的引用(而不是[1],我们应该引用索引[0]。在计算之前,考虑蜡烛的类型:是看涨还是看跌。

 

DRAW_HISTOGRAM2结构问题的延续。

例子。

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| 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 i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

在提出的指标中,有可能建立两种直方图。一个出乎意料的奇特现象是如下。

对于条目#属性指示器_colorn、#属性指示器_typen等中的正常行,n的值比缓冲区索引 多1。
此外,即使在一行中没有指定缓冲区的索引,并且相邻的索引之间有空闲空间,这一要求仍然存在。
例如,如果使用索引0、1、2、3、8,所有五行都将被显示。

一个不同的要求是针对DRAW_HISTOGRAM2类型的结构,即。
如果在一行中指定了直方图,则条目#属性指标_colorn,#属性指标_typen等。
n值是由计数而不是由缓冲区索引计算的。在这个例子中,指数5和6被指定,尽管逻辑上5和7是预期的。

所有这些无稽之谈使人根本无法理解这两张直方图之后的规则线(红色)的n值应该是什么。
在这个例子中,指定了n=9的值,但它不起作用,所以所有与缓冲区8有关的行都被注释掉了。它对其他的n值也不起作用。

结论:所有直方图都必须在缓冲区列表的最后一行指定。此外,它们的值应该只是按数量计算的一行(尽管它们的缓冲指数)。
要理解这一点是不可能的,但有可能与之相处。

顺便说一下:没有发现INDICATOR_CALCULATIONS和INDICATOR_DATA缓冲区顺序的影响。

感谢Vladimir Karputov和Artem Trishkin参与解决这个问题。

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

DRAW_HISTOGRAM2结构问题的延续。

例子。

在提出的指标中,有可能建立两种直方图。一个出乎意料的奇特现象是如下。

对于条目#属性指示器_colorn、#属性指示器_typen等的正常行,n的值比缓冲区索引 多1。
此外,即使在一行中没有指定缓冲区索引,并且在相邻的索引之间有空闲空间,这一要求也会被维持。
例如,如果使用索引0、1、2、3、8,所有五行都将被显示。

一个不同的要求是针对DRAW_HISTOGRAM2类型的结构,即。
如果在一行中指定了直方图,则条目#属性指标_colorn,#属性指标_typen等。
n值是由计数而不是由缓冲区索引计算的。在这个例子中,指数5和6被指定,尽管逻辑上5和7是预期的。

所有这些无稽之谈使人根本无法理解两个直方图之后的常规线(红色)的指数应该是什么。
在这个例子中,指定了n=9的值,但它不起作用,所以所有与缓冲区8有关的行都被注释掉了。它对其他的n值也不起作用。

结论:所有直方图都必须在缓冲区列表的最后一行指定。此外,它们的值应该只是按数量计算的一行(尽管它们的缓冲指数)。
要理解这一点是不可能的,但有可能与之相处。

顺便说一下:没有发现INDICATOR_CALCULATIONS和INDICATOR_DATA缓冲区顺序的影响。

感谢弗拉基米尔-卡尔普托夫和阿尔特姆-特里什金参与解决该问题。

不客气。但你没有解决这个问题。

对指标中不同缓冲区类型的顺序没有依赖性。只有计算出来的才应该在被画出来的之后。

 
Artyom Trishkin:

不客气。但你还没有解决这个问题。

这些指标并不取决于不同缓冲区类型的顺序。只有计算出来的才必须在被抽中的之后。

没有太大的把握,但我仍然认为这两种说法都是错误的。

至于 "没有依赖性"。我没有得到任何方法来映射最后一个例子中的第8个缓冲区。顺序应该是什么...也许你能做到这一点?

关于 "计算......后绘制"。我的指标使用了200多个缓冲区,其中前100个是计算的缓冲区。
在我的例子中,它们都是简单的线,因此#属性的n是由缓冲区的索引 值计算出来的 n=b+1。并显示了简单的线条。混乱是从直方图的出现开始的。

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

没有太大的把握,但我仍然认为这两种说法都是错误的。

至于 "没有依赖性"。我没有得到任何方法来映射最后一个例子中的第8个缓冲区。顺序应该是什么...也许你能做到这一点?

关于 "计算......后绘制"。我的指标使用了200多个缓冲区,其中前100个是计算的缓冲区。
在我的例子中,它们都是简单的线,因此#属性的n是由缓冲区的索引 值计算出来的 n=b+1。并显示了简单的线条。误解从直方图的出现开始。

我不会争论。我创建的缓冲区绝对可以按任何顺序绘制。但只要我在它们之间添加一个计算缓冲区,要绘制的指标的图形就不会显示在图表上。它们的值保持在数据窗口中。我已经进行了许多测试,在文章中描述了指标及其缓冲区的创建。我得出的结论是,只有计算过的缓冲区(它们在声明指标缓冲区的顺序中的位置)才会以某种方式影响显示/不显示绘制的缓冲区。

 
Artyom Trishkin:

我不打算争论。我绝对以任何顺序创建绘图缓冲区。但只要我在它们之间添加一个计算缓冲区,要绘制的指标的图形结构就不会显示在图表上。它们的值保持在数据窗口中。我已经进行了许多测试,在文章中描述了指标及其缓冲区的创建。我得出的结论是,只有计算过的缓冲区(它们在声明指标缓冲区的顺序中的位置)会以某种方式影响显示/不显示绘制的缓冲区。

我也不确定。

一段时间以来(过去3-4个月),在符号窗口中普遍出现了一些令人费解和震惊的现象。

首先,我注意到指标的画法可以简单地转向任何方向,例如向下或向右,没有明显的原因。就在一个新的滴答声中,整个指标突然滑落。同样的情况有时会发生在刚打开电脑的时候。

其次,如果一些缓冲区被删除,然后被编译,这些被删除的构造的 "痕迹 "会一直保留到一些无法解释的事件(TF来回,新的重新编译,设置的更新,等等)。)可能,数据窗口 里有 "痕迹",那是很久以前的记忆(技术上,数组只被强行清理,在MT5中,如果不需要数组,它只是被 "取消注册",但数据仍然存在;当然,这都是MT5的小毛病)
--

有一个笑话:我们祖国的历史是不可预测的。对MT5也可以这么说:太神秘了:)
--

顺便说一下,根据我上次的声明,我对我的真实指标做了一些改变。这是不可行的。我为反射数组添加了DRAW_HISTOGRAM2和INDICATOR_CALCULATIONS--它可以工作。

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


不需要很业余--使用MQL5向导创建专家顾问的空白--这样,在声明图形结构 和指标阵列时,你会尽可能少犯错误。

 
User_mt5:

我也不确定

一段时间以来(过去3-4个月),在符号窗口中普遍发生了一些令人难以理解和震惊的现象。

首先,我注意到指标结构可以简单地向任何方向转变,例如向下或向右,没有明显的原因。就在一个新的滴答声中,整个指标突然滑落。同样的情况有时会发生在刚打开电脑的时候。

其次,如果一些缓冲区被删除,然后被编译,这些被删除的构造的 "痕迹 "就会一直存在,直到发生一些无法解释的事件(TF来回,新的重新编译,更新设置,等等)。)可能,数据窗口 里有 "痕迹",那是很久以前的记忆(技术上,数组只被强行清理,在MT5中,如果不需要数组,它只是被 "取消注册",但数据仍然存在;当然,这都是MT5的小毛病)
--

有一个笑话:我们祖国的历史是不可预测的。对MT5也可以这么说:太神秘了:)
--

顺便说一下,根据我上次的声明,我对我的真实指标做了一些改变。这是不可行的。我为反射数组添加了DRAW_HISTOGRAM2和INDICATOR_CALCULATIONS--它可以工作。

不是关于我

其余的--你的错误和不注意(除了指示器线的转移,但我想它已经被修复了,如果我没记错的话)。

你有什么构造?

 
Vladimir Karputov:

不需要很业余--使用MQL5向导创建一个专家顾问的空白--这样,在声明图形结构 和指标阵列时,你会尽可能少犯错误。

你能告诉我如何正确反映我最后一个例子中的第8个缓冲区吗?没有任何业余性?
你能告诉我这些规则吗?

Artyom Trishkin:

不是关于我

其余的都是你的错误和不注意(除了指标线的转移,但我想它已经被修复了,如果我没记错的话)。

你的构造是什么?

你能告诉我如何正确反映我最后一个例子中的第8个缓冲区吗?有了适当的注意?
并给出理由?
建2530。

--
我还在学习,所以如果你们能指出在哪里可以读到这些文件,我将非常感激。

原因: