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

 
Sergey Savinkin:

它是有效的。))

多么聪明的论坛引擎...你自己提供了链接,那里有关于如何粘贴代码 的完整说明。

 
Alexey Viktorov:

而且真的...为什么要努力做得更好...

计算一下这些函数中写了多少额外的代码,以及你通过调用这些自写的函数写了多少代码。

我努力在交易方面做得更好,我需要编码来向这个目标前进。

如果到了年底,差别将是0.1秒,那还有必要费心吗?

你能告诉我如何使这段代码不含函数并加快它的速度吗?

 
Aleksey Vyazmikin:

我正在努力在交易方面做得更好,我需要编码来实现这一目标。

如果到了年底,差别将是0.1秒,那还有必要费心吗?

你能告诉我如何使这段代码不含函数并加快它的速度吗?

这就是你的全部写法。只是它都被包裹在mql4之下。没有这样的包装,你就不能做到吗?

而这是

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

初学者的常见问题 MQL5 MT5 MetaTrader 5

Aleksey Vyazmikin, 2018.05.24 12:30

都是通过零星的收集,但类似功能的主体我最初是从这里 拿的 ,真的不知道还剩下什么。

ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);

      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);
      default: return(PERIOD_CURRENT);
     }
  }

这只是安静的可怕....这到底是怎么回事?

这并不是一个真正的课程。对不起,不再批评了。

 
Alexey Viktorov:

这就是你的全部写法。只是它都被包裹在mql4中。没有这样的包装,你就不能做到吗?

而这个...


是非常可怕的...这到底是怎么回事?

而一般来说,这不是这里的课程。对不起,不再批评了。

好吧,既然没有意愿为初学者展示如何做得更好......

我看不出有什么可怕的,在MT4中,时间段通常是由可被分钟除以的数字来指定的,这在MT5中是不符合逻辑的,但它可以使代码的移植更容易。

 
Aleksey Vyazmikin:

好吧,既然没有意愿为初学者展示最好的方法......

我看不出有什么可怕的,在MT4中,时间段经常用除以分钟的数字来表示,这在MT5中已经不符合逻辑了,但这样做更容易移植代码。

为什么让 转换为分钟数,然后再放回去?

16408比PERIOD_D1更容易理解,49153比PERIOD_MN1更容易理解吗?

Периоды графиков - Константы графиков - Стандартные константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Стандартные константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql4-программа. Перечисление ENUM_TIMEFRAMES содержит значения стандартных таймфреймов, онлайновые графики финансовых...
 

你好,在EA中,我想从图表的 高点时期 知道ATR的当前值。一个整数值。

#include <Trade\SymbolInfo.mqh> 
CSymbolInfo    m_symbol;
//===
input int             ATRper=7;         //ATR Period
input ENUM_TIMEFRAMES ATRtimeframe=PERIOD_CURRENT;//«Time_Frame_ ATR»
int            handle_iCustom;
double atr_tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
   handle_iCustom=iATR(m_symbol.Name(),ATRtimeframe,ATRper);
//--- if the handle is not created 
   if(handle_iCustom==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
                  m_symbol.Name(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int Bar_=0;
   atr_tp= iCustomGet(handle_iCustom  ,0,Bar_);
   atr_tp=NormalizeDouble(atr_tp,Digits())/_Point;
   atr_tp=(int)atr_tp;
   Comment("atr_",atr_tp);
  }
//+------------------------------------------------------------------+
double iCustomGet(int handle,const int buffer,const int index)
  {
   double Custom[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iCustom array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle,buffer,index,1,Custom)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iCustom indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(Custom[0]);
  }
///

错误在哪里?

 
lil_lil:

你好,在EA中,我想从图表的 高点时期 知道ATR的当前值。一个整数值。

错误在哪里?

它说的是什么?它在说什么?

 
Sergey Savinkin:

它说的是什么?他在说什么脏话呢?

不是的,是在撒谎。高位的指标显示 "8",但顾问在评论中说 "6"。

 
lil_lil:

它不发誓,而是撒谎。高位上的指标显示为 "8",但在评论中,EA说 "6"。

我在一个5分钟的周期上运行了你的EA,周期ATR14,时间框架ATR-1小时。一切都显示得很均匀,无论是在评论中还是在图表上。

 
lil_lil:

它也躺在我现在的上面,ATRtimeframe=PERIOD_CURRENT。


我认为这根本不是代码的问题。下面是我的PERIOD_CURRENT