量化软件——赫兹MT5通过EA操作图制作具有趋势标记的数据集

当我们设计人工智能模型时,我们通常需要首先准备数据。良好的数据质量将使我们在模型训练和验证方面事半功倍。但我们的外汇或股票数据是特殊的,其中包含复杂的市场信息和时间信息,数据标注很困难,但我们可以很容易地在图表上分析历史数据的趋势。
 
初始化图表和文件
图表初始化
因为我们需要看图表来标记数据,所以图表不能随意滚动,必须根据我们的手动操作进行滚动,因此我们需要禁用 CHART_AUTOSCROLL 和 CHART_SHIFT:

 ChartSetInteger (0, CHART_AUTOSCROLL, false);

  ChartSetInteger (0, CHART_SHIFT, true);

  ChartSetInteger (0, CHART_MOUSE_SCROLL ,1);
注意:代码的绿色部分旨在允许我们使用鼠标滚轮控制图表
文件初始化
文件的初始化应首先检查是否存在现有标签文件,如果存在历史文件,则将文件名保存到变量“reName”中:

 do
     {
       //---Find if there are files that match the chart
       if (StringFind(name, Symbol())!=-1 && StringFind(name,".csv")!=-1)
         reName=name;
     }

   while (FileFindNext(hd,name));
注意:这里应该注意的是,我们使用的是“do-while”循环,它与“while”循环的不同之处在于,它首先执行运算符,然后计算表达式。但是名称的初始化是个问题,我们可以这样做
int hd= FileFindFirst("*",name,0);


如果有一个原始的标记文件,打开该文件并使用read_csv()函数获取标记的最后时间:

read_csv(file_handle,a);
然后将图表滚动到最后标记的时间:
shift = - iBarShift(Symbol(),PERIOD_CURRENT,(datetime)a[i-8]);
ChartNavigate(0, CHART_END ,shift);


如果没有历史记录文件,就创建一个文件:

file_handle = FileOpen(StringFormat("%s%d-%d.csv",Symbol(),Period(),start_t), FILE_WRITE | FILE_CSV | FILE_READ);
然后将图表滚动到全局变量“start_t”指定的位置
 shift = -iBarShift(Symbol(),PERIOD_CURRENT,(datetime)start_t);
  ChartNavigate(0,CHART_END,shift);
添加一条垂直红线以标记起始列:
 ObjectCreate (0,"Start",OBJ_VLINE,0,(datetime)start_t,0)
这部分的逻辑是这样组织的:
 if (FileIsExist(reName))
     {
      file_handle = FileOpen(reName, FILE_WRITE | FILE_CSV | FILE_READ );
       string a[];
       int i= 0 ;
      read_csv(file_handle,a);
      i = ArraySize (a);
      shift = -iBarShift(Symbol(), PERIOD_CURRENT,(datetime)a[i-8]);
       ChartNavigate(0,CHART_END,shift);
     }
   else
     {
      file_handle = FileOpen (StringFormat ("%s%d-%d.csv", Symbol(), Period(),start_t), FILE_WRITE | FILE_CSV | FILE_READ );
       Print ("There is no history file,create file:" , StringFormat ( "%s%d-%d",Symbol(), Period(),start_t));
       shift = - iBarShift (Symbol(), PERIOD_CURRENT ,(datetime)start_t);
       ChartNavigate (0, CHART_END ,shift);
       ObjectCreate (0,"Start", OBJ_VLINE,0,(datetime)start_t,0);
     }
注意:由于我们想将图表向左移动,我们必须在“iBarShift()”函数之前添加“-”
shift = -iBarShift(Symbol(), PERIOD_CURRENT ,(datetime)start_t);
当然,它也可以在ChartNavigate()函数中实现,例如:
ChartNavigate(0,CHART_END,-shift);
本文中的代码仍然是根据第一种方法实现的。
这些初始化操作将在我们的OnInit()中实现,包括定义我们需要的变量。最重要的是明确我们希望图表移动的位置并开始标记。这主要由变量“shift”和“start_t”控制。我们将反映在最终代码中:
int OnInit()
  {
//---initial
   string name;
   string reName="1";
   int hd=FileFindFirst("*",name,0);
   int shift;

   ChartSetInteger(0,CHART_AUTOSCROLL,false);
   ChartSetInteger(0,CHART_SHIFT,false);
   ChartSetInteger(0,CHART_MOUSE_SCROLL,1);


   do
     {
      //---check File
      if(StringFind(name,Symbol())!=-1 && StringFind(name,".csv")!=-1)
         reName=name;
     }
   while(FileFindNext(hd,name));

   if(FileIsExist(reName))
     {
      file_handle = FileOpen(reName,FILE_WRITE|FILE_CSV|FILE_READ);
      string a[];
      int i=0;
      read_csv(file_handle,a);
      i = ArraySize(a);
      shift = -iBarShift(Symbol(),PERIOD_CURRENT,(datetime)a[i-8]);
      ChartNavigate(0,CHART_END,shift);
     }
   else
     {
      file_handle = FileOpen(StringFormat("%s%d-%d.csv",Symbol(),Period(),start_t),FILE_WRITE|FILE_CSV|FILE_READ);
      Print(FileTell(file_handle));
      Print("No history file,create file:",StringFormat("%s%d-%d",Symbol(),Period(),start_t));
      shift = -iBarShift(Symbol(),PERIOD_CURRENT,(datetime)start_t);
      ChartNavigate(0,CHART_END,shift);
      ObjectCreate(0,"Start",OBJ_VLINE,0,(datetime)start_t,0);
     }
   return(INIT_SUCCEEDED);
  }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值