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

 

谁能告诉我怎么写下面的东西。

我做了一个训练指标,对每个tick的iVolume进行计数:上升的iVolume为正,下降的iVolume为负。为了制作一条曲线,所有的iVolume(正数和负数)我都会在条形图之间增加总数。得到了一条曲线。然而,我遇到了两个问题。

1) 线路变的很断。

2)不可能测试专家顾问,因为获得的iVolume图表只有一个真实的生活。

问题。

1)如何描述允许根据我写在缓冲区的平均数据建立图表的代码?

2)是否有可能将该指标的数据(在真实模式下收到的)写入某个文件,以便以后参照这个文件,我们可以在历史数据上建立指标,将已经收集的tick量应用到这些数据上?如果可能的话,如何用程序化的方式来描述它?或者有其他解决方案,不需要 当前的iVolume信息写入文件

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5 = 0;
  
   
}
 
 
//+------------------------------------------------------------------+
//| 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
      
   if(Bid >= Bid1) 
{
   if(Bid > Bid1) 
{   
   V1 = iVolume(NULL, 0, 0); // если повышающий цену тик
   V2 = V1 + V2;
}
  else
{
   V1 = 0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
   V4 = V3 + V4;
}
  
   V5 = V2-V4;
   Bid1=Bid;
   Buf_1[0]= V5; // в буфер сгружаем 
  
   
  return(rates_total);
}
 

也许在代码的末尾添加。

double macurrent=iMAOnArray(Buf_1[0],0,5,0,MODE_LWMA,0)

诶,不!编译器产生了错误,说没有数组。


 
你好,你能告诉我策略面包机中的惊叹号是什么意思吗?
附加的文件:
 

Anyone.....,你能帮忙吗?我的死穴在这里列出:https://www.mql5.com/ru/forum/160683/page378#comment_6053255

 
YarTrade: 是否有可能将这个指标的数据(在真实模式下获得的)写入一个文件,以便以后参照这个文件,有可能在历史数据上建立一个指标,将已经收集到的tick volume应用到其中?如果可能的话,如何用程序化的方式来描述它?或者有其他的解决方案,不需要 当前的iVolume信息写入文件中

基于文件数据的指标--在搜索中输入这一行,发现

 

某种恶梦,我不明白为什么它会发出这样的声音:
Code section :


line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var",DoubleToStr(line[0],D));
Print("Code",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Output :

EURUSD,M15: Var 0。00000
EURUSD,M15: Code 11754.00000


赋值后会发生什么?

 
LuckySith:   Code section :

line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var",DoubleToStr(line[0],D));
Print("Code",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Print :

EURUSD,M15: Var 0。00000
EURUSD,M15: Code 11754.00000

赋值后会发生什么?

打印 赋值后的变量的 和变量D的值。用你的计算器来计算吧。

 

大家好。朋友们,请你们给我们一点帮助好吗?谁能在指标中设置一行可以指定声音文件的名称,以便在指标设置 中显示这一行。

附加的文件:
Awesome-33.ex4  16 kb
 
STARIJ:

打印出赋值后的变量值和变量D的值。让我们用计算器计算一下...


所以我在赋值后打印出变量的值。因此,代码基本上是以下内容。


a=b。

打印(a)。

打印(b)。

但a等于0,b被正确打印出来了

 
LuckySith:

我就是这样输出被分配的值的。因此,代码基本如下。


a=b。

打印(a)。

打印(b)。

但a等于零,而b却打印正确


我没有看到零,你在某处犯了一个错误。

   int D=5;
   double a=MathFloor(Low[1]*MathPow(10,D-1)); 
   Print("Var ",DoubleToStr(a,D)); 
   Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D)); 
原因: