新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1497

 
大家好!请帮助我们有一个线人,它需要被删除......我可以让它计算净利润,而不考虑掉期、佣金吗?事先非常感谢
附加的文件:
 
ANDREY:

大家好!
关于mql4中for()语句的问题。循环头包含一些变量值的连续减少或增加

for(int A=14; A>=0;A--) orfor(int A=0; A<14;A++) orfor(int A=0; A<14;A=+2) 在给定的例子1或2中,假设 A变量增加或减少的大小总是相同

问题:如果A变量是一个时间框架值(1(分钟),5,15,30,60,240,1440),很明显,增加或减少这个变量的大小不能相等。在这种情况下,如何格式化for 头,使变量A以1开始,然后在每次迭代中以所需的分钟数非均匀地递增

有变量A的例子是一个特例。一般来说,如果循环头中的变量的变化应该在所需的时间间隔内不均匀地进行,我应该如何格式化一个循环。
还是有一些其他的操作者可以用于这些情况?但在我看来,与for 相比,其他运算符非常笨重。 请帮助我在for 语句的帮助下准确地解决我的问题,并准确地使用其标题 因为要在 for 语句的正文中解决我的问题 ,当然,你可以使用if语句,但这将是非常麻烦的,for 语句将不得不为了过滤7个正确的值而进行1440次反复
谢谢你。

这里有一个错误。 它应该是for(int A=0; A<14;A+=2)

我能想到的最简单的方法是把句号放入数组中

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

最容易想到的是在一个数组中对周期进行评分

谢谢,我也可以使用它)

 
Alexey Viktorov:

这里有一个错误。 它应该是for(int A=0; A<14;A+=2)

我能想到的最简单的方法是将周期存储在一个数组中


非常感谢你的提示。事实证明,这比我想象的要简单得多。
我不明白的只有一件事。阵列的名称是per。而ENUM_TIMEFRAMES是一个变量类型的标识符?我在mql4 Reference中没有发现这样的标识符。只有

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

非常感谢你的提示。事实证明,这比我想象的要容易得多。
只有一件事我不明白。每一个数组的名称。而ENUM_TIMEFRAMES是一个变量类型的标识符?我在mql4 Reference中没有发现这样的标识符。只有

这里

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

这里

我有没有理解错,你给我发了关于mql 5的信息?或者这些信息也适用于mql 4?

 
ANDREY:

我有没有理解错,你给我发了关于mql 5的信息?或者这些信息也适用于mql 4?

我纠正了它。
 
MakarFX:
我已经改正了。

谢谢你。

 
ANDREY:

谢谢你。

一个小建议:立即习惯ENUM_TIMEFRAMES,忘掉作为分钟数的数字表示

首先PERIOD_W1 比10080更有信息量,它更清楚地表明它是一个星期。

其次,在mql5中,周期并不对应于分钟数,在迁移到mql5的过程中,这不会是一个不必要的问题,这也是不可避免的。

好吧,如果你真的需要一个时期内的分钟数,那么你可以

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
伙计们,帮我在指标上附加一个警报。
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }
原因: