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

 
Taras Slobodyanik:

我没有看到零,你在什么地方搞砸了。


你在两台打印机中的数值是否相同?

因为我的代码中没有Print函数,而且这些行是一个接一个的,所以数值不会有任何变化。

但Var给出了0,而Code给出了所需的值

 
LuckySith:

但我马上就输出我所分配的值。因此,代码基本如下。

a=b。

打印(a)。

打印(b)。

但是a等于0,而b却打印正确了

如果int a和double b>0和b<1,当向整数变量分配一个实数值时,有可能放弃小数部分

 
STARIJ:

如果int a和double b>0和b<1,这是有可能的,当把一个实数值分配给一个整数变量时,小数部分 被丢弃。


b大于1远大于1

a是一个类型为双数的数组

 

这个问题已经解决了。

我以如下方式创建了这个数组。


双线[]。

有了这个选项,当赋值line[0]=x时;null元素仍然显得是空的。


当我写到


双线[20]。


一切都在正常工作。我不明白为什么,在第一种情况下,我只是简单地创建了一个无界的数组;有什么区别呢?

 
LuckySith:

这个问题已经解决了。

我以如下方式创建了这个数组。


双线[]。

有了这个选项,当赋值line[0]=x时;null元素仍然显得是空的。


当我写到


双线[20]。


一切都在正常工作。我不明白为什么,在第一种情况下,我只是简单地创建了一个无界的数组;有什么区别呢?

你已经创建了一个动态数组,而它的大小应该由你自己来设置和控制。

 
Artyom Trishkin:

你已经创建了一个动态数组,但你需要自己设置和控制大小。

#property strict指令加快了发现这个错误的速度。程序结束时出现了这样的信息:'C.mq4'中的数组超出了范围(31,32)。
 

没有人帮忙吗?这里列出了我的死胡同将 当前的iVolume信息写入文件中

软件代码描述如下:https://www.mql5.com/ru/forum/160683/page378#comment_6053255

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2017.11.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
LRA:

通过文件中的数据指示器--在搜索中输入这一行,发现


要从一个文件中检索数据,你必须先把它填进去。

 

嗷...善良的人们!请帮助我!我正在学习编程。没有你的帮助,这就是一个僵局。

我正试图 指标数据写入一个文件,这样我就可以在以后使用它来建立一个指标。该指标是根据当前柱状图的正数点数和负数点数之间的差值绘制的线。

我使用MQL4参考来接收关于如何将数据阵列上传到文件的信息。我最终得到了一个充满错误的代码。我不能理解错误的本质,总的来说,我没有正确使用参考书上的提示,或者没有。有谁能帮忙吗?

input string             InpFileName="111.csv";      // Имя файла 
input string             InpDirectoryName="Data";     // Имя каталога 

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
// double ExtBuffer;
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;         // и обнулить последний элемент буфера
   }
   
   datetime date_Buf_1; // массив дат индикатора 
   datetime time_Buf_1; // массив времени 
// --- считаю объем для положительных и отрицательных тиков      
   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; // в буфер сгружаем  дельту

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

// запись в файл данных буфера

//--- установим для массивов признак таймсерии 
   ArraySetAsSeries(Buf_1,true); 
   ArraySetAsSeries(date_Buf_1,true);
   
//--- скопируем таймсерию 
   int copied=CopyTime(NULL,0,0,0,date_Buf_1);    

//--- подготовим массив Buf_1 
   ArrayResize(Buf_1,copied); 
//--- скопируем значения линии индикатора  
   for(int i=0;i<copied;i++) 
     { 
      Buf_1[i]= V5; 
     } 
//--- откроем файл для записи значений индикатора 
   ResetLastError(); 
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV); 
   if(file_handle!=INVALID_HANDLE) 
     { 
      PrintFormat("Файл %s открыт для записи",InpFileName); 
      PrintFormat("Путь к файлу: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 
      //--- сначала запишем значения индикатора 
      FileWrite(file_handle,Buf_1); 
      //--- запишем время и значения в файл 
      for(int i=0;i<Buf_1;i++) 
         FileWrite(file_handle,time_Buf_1[i],Buf_1[i]); 
      //--- закрываем файл 
      FileClose(file_handle); 
      PrintFormat("Данные записаны, файл %s закрыт",InpFileName); 
     } 
   else 
      PrintFormat("Не удалось открыть файл %s, Код ошибки = %d",InpFileName,GetLastError()); 
  }
   
  return(rates_total);
}
 
YarTrade: 我正试图 指标数据写入一个文件,以便我以后可以用它来建立指标。该指标是以线的形式建立的,其依据是当前柱状图的正数点位量和负数点位量之差的数据。

如果你认为看你代码的人可以很快发现错误,那你就错了。编译器会寻找错误。程序文本应该是有格式的--MetaEditor有一个样式设计工具。如果你喜欢不同的风格--使用,例如,AStyle.exe程序。经过样式设计,你很快就会发现,程序1)有一个额外的闭合小括号。2)声明的变量: datetime date_Buf_1; //指标日期数组--要使其成为一个数组,必须是[size]或[]的动态数组,然后大小必须设置为ArrayResize,似乎。而且你必须在使用数组之前做这件事--见上面关于这个问题的帖子。3) FileOpen(InpDirectoryName+"//"+InpFileName - 似乎棍子应该向另一个方向倾斜。你最好不要使用InpDirectoryName+"//"--反正你会在Files文件夹中找到该文件。

on line: int copied=CopyTime(NULL,0,0,0,date_Buf_1); compiler gets angry, start=end=0 number=0

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...