Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MQL4存储指示符值_Mql4 - Fatal编程技术网

MQL4存储指示符值

MQL4存储指示符值,mql4,Mql4,是否有人知道是否可以存储一个指标(例如1年)或EA中计算的布尔函数的值序列 我想存储一个特定函数的值,该值是根据我在EA中定义的两个不同EMA之间的差值计算的 我需要存储这个双精度函数的值,在我的EA中计算几年(比如从2015年到2017年),并将其打印到一些输出文件(.txt或其他格式) int s15_60; 双B_M15_H1(内部i){ 如果(i>=0&&i=4&&i=8&&i=12&&i=16&&i=0&&i=4&&i=8&&i=12&&i=16&&i请提供您的MCVE代码以查看您需要

是否有人知道是否可以存储一个指标(例如1年)或EA中计算的布尔函数的值序列

我想存储一个特定函数的值,该值是根据我在EA中定义的两个不同EMA之间的差值计算的

我需要存储这个双精度函数的值,在我的EA中计算几年(比如从2015年到2017年),并将其打印到一些输出文件(.txt或其他格式)

int s15_60;
双B_M15_H1(内部i){

如果(i>=0&&i=4&&i=8&&i=12&&i=16&&i=0&&i=4&&i=8&&i=12&&i=16&&i请提供您的MCVE代码以查看您需要什么。您希望如何存储数据以及为什么需要它?指示器数据已存储在缓冲区中,因此只需使用
iCustom()调用它即可
。如果您想优化EA和指标,则需要花费大量时间来加载和计算缓冲区-是的,可以计算指标缓冲区一次,然后将其写入文件或数据库,并在新的优化开始之前获取,在这种情况下,使用
CArrayObj或CArrayDouble
作为存储大型阵列的动态阵列

请提供y我们的MCVE代码可以查看您需要什么。您希望如何存储数据以及为什么需要它?指示器数据已经存储在缓冲区中,因此只需使用
iCustom()调用它即可
。如果您想优化EA和指标,则需要花费大量时间来加载和计算缓冲区-是的,可以计算指标缓冲区一次,然后将其写入文件或数据库,并在新的优化开始之前获取,在这种情况下,使用
CArrayObj或CArrayDouble
作为存储大型阵列的动态阵列

好的您需要存储一些双值。您试图做什么,如果有的话-为什么不想查看mql4.docs并使用
FileOpen()FileWriteString()FileFlush()FileClose()
?很抱歉我出去度假了。我已经在脚本和EA中尝试了这些命令,但它没有输出任何文件。在哪里使用它们更好?在脚本中还是在EA中?尝试调试,并尝试确保FileOpen()返回了有效的句柄它是如何打印数据的?从最后到最早?您的指示器数据是从最后(0或1)给出的到最早(第1000个条,即1000个条之前),当前条为零。尝试检查日期时间,如果相反,则更改脚本,使最后一个数据与最后一个值匹配,或者尝试写入
FileWrite(文件句柄,TimeToStr(iTime(\u符号,0,i),框\u buff[i])
对于每一行,如果您有那么大的历史记录,那么您就可以得到它剩下的就跟这里一样了。如果你有大量的历史记录-在图表上增加,然后运行脚本,当然会更容易。如果你证明了你需要存储一些双值。如果你想做什么,如果有什么的话-为什么你不想看mql4.docs并使用
FileOpen()FileWriteString()FileFlush()FileClose()
?很抱歉我出去度假了。我已经在脚本和EA中尝试了这些命令,但它没有输出任何文件。在哪里使用它们更好?在脚本中还是在EA中?尝试调试,并尝试确保FileOpen()返回了有效的句柄它是如何打印数据的?从最后到最早?您的指示器数据是从最后(0或1)给出的到最早(第1000个条,即1000个条之前),当前条为零。尝试检查日期时间,如果相反,则更改脚本,使最后一个数据与最后一个值匹配,或者尝试写入
FileWrite(文件句柄,TimeToStr(iTime(\u符号,0,i),框\u buff[i])
对于每一行,如果您有那么大的历史记录,那么您就可以得到它。对于ea-将OnStart更改为OnTick()并添加isNewBar()和rest,就像您在这里所做的那样。如果您有很大的历史记录-在图表上增加,然后运行脚本,当然会更容易
    int s15_60;
double B_M15_H1(int i) {

                          if (i>=0  && i<4  ) s15_60=0;
                     else if (i>=4  && i<8  ) s15_60=1;
                     else if (i>=8  && i<12 ) s15_60=2;
                     else if (i>=12 && i<16 ) s15_60=3;
                     else if (i>=16 && i<20 ) s15_60=4;

                     return NormalizeDouble(MathAbs(M15(i) - H1(s15_60)),Digits);
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//--- show the window of input parameters when launching the script
#property script_show_inputs
//--- parameters for writing data to file
input string             InpFileName="BOX.csv";      // File name
input string             InpDirectoryName="Data";     // Folder name
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+



double H1  (int shift) {double val = iCustom(NULL,PERIOD_H1, "my_funct",100,2.0,30.0,2.0,2.0,0,1,0,shift); return(val);}
double H4  (int shift) {double val = iCustom(NULL,PERIOD_H4, "my_funct",100,2.0,30.0,2.0,2.0,0,1,0,shift); return(val);}


int s60_240;
double B_H1_H4(int i) {

                          if (i>=0  &&  i<4  ) s60_240=0;
                     else if (i>=4  &&  i<8  ) s60_240=1;
                     else if (i>=8  &&  i<12 ) s60_240=2;
                     else if (i>=12 &&  i<16 ) s60_240=3;
                     else if (i>=16 &&  i<20 ) s60_240=4;

                     return NormalizeDouble( 10000*MathAbs( H1(i) - H4(s60_240) ) , Digits);

                     } 


void OnStart()
  {

   double   box_buff[]; // array of indicator values
   datetime date_buff[]; // array of indicator dates
//--- copying the time from last 1000 bars
   int copied=CopyTime(NULL,PERIOD_H1,0,1000,date_buff);
   ArraySetAsSeries(date_buff,true);
//--- prepare box_buff array
   ArrayResize(box_buff,copied);


//--- copy the values of main line of the iCustom indicator
   for(int i=0;i<copied;i++)
     {
      box_buff[i]=B_H1_H4(i);
     }


//--- open the file for writing the indicator values (if the file is absent, it will be created automatically)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s file is available for writing",InpFileName);
      PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- first, write the number of signals
      FileWrite(file_handle,copied);
      //--- write the time and values of signals to the file
      for(int i=0;i<copied;i++)
         FileWrite(file_handle,date_buff[i],box_buff[i]);
      //--- close the file
      FileClose(file_handle);
      PrintFormat("Data is written, %s file is closed",InpFileName);
     }
   else
      PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
  }