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

 
YarTrade: VolC - 我就是这么称呼这个文件的。你不需要一个文件名吗?

然后它是这样的。

   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,(double)V5);       // V5 - это что?
   FileClose(file_handle);
 
STARIJ:

然后它是这样的。


V5是某种类型的计算结果。我删除了V5,在它的位置上放了一个数组,并希望它被写入文件。文件被创建,但只有一个值被写入其中,而不是指标数据阵列。缺少什么呢?我有一个指标,它在图表上的绘制是正确的。我想把它的值写进一个文件,以便以后能够读取。但只写了一个数字。你能帮助我了解什么是错的吗?

 
STARIJ:

然后它是这样的。


我用FileWriteArray 做了,但现在文件是空的。它不会在那里写一个数组:(.你知道如何帮助吗?你当然知道。请告诉我什么是错的。

 
YarTrade: 我用FileWriteArray做了,但现在文件是空的。 它不会把数组写到那里 :(.你知道如何帮助吗?你当然知道。请告诉我什么是错的。

它是这样的

   int V5=555;
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWrite(file_handle,V5);
   FileClose(file_handle);

什么类型的阵列?插入代码,不要再贪心了!而这里的数组写的显然只是一个字符 数组。

   string V5[5]={"Жили","были","дед","и","баба"};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,V5);
   FileClose(file_handle);

而循环中的数组双数写的是

   double V5[5]={3.333,7.7777777,1.1,2.22,9.999999999};
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   for(int n=0; n<5; n++)FileWrite(file_handle,V5[n]);
   FileClose(file_handle);
 
STARIJ:

它是这样的

什么类型的阵列?插入代码,不要再贪心了!而这个数组写的显然只是一个字符数组

这里是在循环中写的数组双数


这有多贪婪呢?:)

#property copyright "ZyZy"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
// #property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
#property indicator_separate_window
//--- input parameters
input int      Aver=15;
datetime Время=0;   // Время прошлого бара
double Bid1;
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // накопленный объем для всех тиков вниз для текущего бара
long V4; // объем текущего тика вниз
long V5;

//--- indicator buffers
double         Buf_1[];   // буфер для значений идикатора
double         Counter[];     // буфер для расчетов   
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   IndicatorBuffers(2);
   SetIndexBuffer(0,Buf_1,INDICATOR_DATA); // создаю буфер для значений индикатора
   SetIndexBuffer(1,Counter,INDICATOR_CALCULATIONS);
   SetIndexEmptyValue(0,0.0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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 limit = prev_calculated > 0 ? rates_total-prev_calculated : rates_total-1;
//for(int i =  limit; i >= 0; i--)
// {
//  Counter[i] = close[i];
//  Indicator[i] = iMAOnArray(Counter, 0, 5, 0, 0, i);
// }
   if(prev_calculated==0)
     {
      ArrayInitialize(Counter,0.0);
      ArrayInitialize(Buf_1,0.0);
     }
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
     {
      Время=Вр;           // Запомнить
      Counter[0]=0;         // и обнулить последний элемент буфера
      V2 = 0;
      V4 = 0;
     }

   if(Bid>=Bid1)
     {
      if(Bid>Bid1)
        {
         V1 = iVolume(NULL, 0, 0);
         V2 = V1 + V2;
        }
      else
        {
         V1 = 0;
         V2 = V1 + V2;
        }
     }
   else
     {
      V3 = iVolume(NULL, 0, 0);
      V4 = V3 + V4;
     }

   V5=V2-V4;
   Bid1=Bid;
   Counter[0]=(double)V5;
   Buf_1[0]=iMAOnArray(Counter,0,Aver,0,MODE_SMA,0);
   Comment("Counter ",Counter[0],"\n"
           ,"Buf_1 ",Buf_1[0]);
   
   string file_name="VolC_"+Symbol()+(string)Period();
   int file_handle=FileOpen(file_name,FILE_WRITE|FILE_TXT);
   FileWriteArray(file_handle,Counter, 0, WHOLE_ARRAY);     
   FileClose(file_handle);

   return(rates_total);
  }
//+------------------------------------------------------------------+
 
YarTrade: 这其中有什么贪婪?:)

你为什么要从一个指标上打印任何东西?一切都在屏幕上--这就是指标的作用。当我需要一个表格时--我用iCustom()运行一个脚本。

 

你好,我一直在纠结应该在终端检查订单的价格的代码。我决定尝试对照票据进行检查。将门票放入一个数组,开始检查。

一切都很好,它返回TRUE。我想,我将删除一个,它将返回FALSE。但是没有(((我删除了所有的,脚本仍然返回1而不是0。我做错了什么?


int start()
{
   while(!IsStopped())
   {
      int ordsel = 0;
      double ticord[3] = {8895969,8901032,8901033};
         for(ordsel=0; ordsel<=2;ordsel++) 
         {
            Sleep(5000); 
            Alert(OrderSelect(ticord[ordsel],SELECT_BY_TICKET,MODE_TRADES)); 
         }
      if(!IsExpertEnabled()) break;
   }
   return;
}
 

你好,专家朋友们请帮助一个初学者。我想在我的专家顾问中加入一个指标(我已经绞尽脑汁......)!出现了一个错误:'limit'--声明没有类型。

在这一行:limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period()。


 
Dimitry-1983:

你好,我一直在纠结应该在终端检查订单的价格的代码。我决定尝试对照票据进行检查。将门票放入一个数组,开始检查。

一切都很好,它返回TRUE。我想,我将删除一个,它将返回FALSE。但是没有(((我删除了所有的,脚本仍然返回1而不是0。我做错了什么?



问题是,如果你通过票据选择(OrderSelect(...)),参数3会被忽略MODE_TRADES

所以,要想知道你从哪个列表(关闭的,打开的)中选择了订单,你需要检查其关闭时间

0-开放和等待,>0关闭

 
Ptichka12:

你好,专家朋友们请帮助一个初学者。我想把一个指标放到专家顾问中去(我绞尽脑汁......)!出现了一个错误:'limit'--声明没有类型。

在这一行:limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period())。



这是一种相当有趣的方式。

在错误上尝试以下方法

int limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,indicatorFileName,"returnBars",0,0)*timeFrame/Period()));
原因: