沪深吧 关注:2,022贴子:8,631
  • 0回复贴,共1

股票量化软件:赫兹量化中通过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)
这部分的逻辑是这样组织的:
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);
}


IP属地:浙江1楼2024-03-22 15:05回复