从模式识别到交易策略全过程实战(上)

论坛 期权论坛 期权     
期权匿名问答   2022-6-21 01:39   11687   0
我们平时见到的很多交易策略都可以理解为模式识别策略,比如双均线策略,MACD等等,只是由于均线策略或者MACD策略都不是标准的模式,所以往往不会纳入到模式识别的范畴之内。
今天想结合一个简单的模式识别和python的数据分析,设计一款实际可用的交易策略
识别什么模式

我们假设一个比较简单的模式,0代表跌,1代表涨,那么111111代表连续涨了6次,000000代表连续跌了6次,111111000000代表连续涨了6次,之后连续跌了6次。现在假定我们要识别模式000000-111111之间任意一种(比如001001),并标注出识别该模式之后价格走势情况
模式识别变成指标

我们将我们要识别的模式变成10进制,即
000000 = 0
000001 = 1
000010 = 2
000011 = 3
......
111111 = 63
我们将识别之后的价格走势图也按照上面的模式变成0-63这样的数据,
我们将要识别的模式取名pattern, 识别之后的模式叫recognition, 根据这两个数组的值写成指标,将指标拖入到图表中,具体的指标是这样:


提取指标数据

上面指标包含了两条线,我们还需要提取指标数据:
步骤如下:
一、建立指标数据文件,比如命名为pr.csv
二、在指标头部添加如下代码:
string filename = "pr.csv";string dirname = "indicator";int file_handle = FileOpen(dirname + "//" + filename, FILE_READ|FILE_WRITE|FILE_CSV);三、在指标循环内添加如下代码,可以将任意的指标数据导入到文件中
if(file_handle != INVALID_HANDLE){             FileWrite(file_handle, ExtRecognition, ExtPattern, ExtDuration);}else   PrintFormat("Failed to open %s file, Error code = %d",filename,GetLastError());
指标数据分析

获取到我们想要的指标后,我们可以使用python对指标数据进行分析,去掉前10000条无效数据,
import pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv('pr.csv', sep="\t", encoding="utf-16LE", header=None)df = df.drop(df.index[0:10000])df.tail()得到如下结果
101159  24.0  42  4905.0101160  24.0  42  4906.0101161  24.0  42  4907.0101162  24.0  42  4907.0101163  24.0  42  4909.0我们总共获取了大约10万条数据,其中 24表示要识别的模式(23 = 010111 跌涨跌涨涨涨),对应的识别模式是42(41 = 101001 涨跌涨跌跌涨)


接下来,我们需要知道如下信息:
一、任一模式下会出现哪些识别模式,出现频率最高的模式是哪一个
二、任一模式出现的频次是怎样的?有没有规律
如下代码就是将统计任一模式下可能出现的识别模式,并保存在csv文件中,供MT5中设计交易策略时使用
def dec2bin(num):    num1, digit1 = divmod(num, 2)    num2, digit2 = divmod(num1, 2)    num3, digit3 = divmod(num2, 2)    num4, digit4 = divmod(num3, 2)    num5, digit5 = divmod(num4, 2)    num6, digit6 = divmod(num5, 2)    return str(digit6) + str(digit5) + str(digit4) + str(digit3) + str(digit2) + str(digit1)a = []b = []for i in range(1, 65):    for j in range(1, 65):        a.append({'i': i, 'j': j, 'count': df[(df[0] == i) & (df[1] == j)].shape[0]})        b.append({'i': dec2bin(i-1), 'j': dec2bin(j-1), 'count': df[(df[0] == i) & (df[1] == j)].shape[0]})df2 = pd.DataFrame(a)df3 = pd.DataFrame(b)df2.to_csv('pr3.csv', sep=',', encoding='ANSI', header=None, index=None)df3.to_csv('pr4.csv', sep=',', encoding='ANSI', header=None, index=None)获得如下信息,我们截取其中任意3条信息
18,14,018,15,018,16,25上面的信息表示:

  • 在出现模式18时,识别模式14出现的次数是0
  • 在出现模式18时,识别模式15出现的次数是0
  • 在出现模式18时,识别模式16出现的次数是25


如下代码获取任一模式出现的频次
df[0].value_counts().plot(kind='bar', figsize=(20, 6))

交易策略设计

接下来,我们就要使用该模型识别进行交易策略的设计


一、每出现一个新的tick的时候,利用指标识别出当前的模式,比如8
二、读取csv文件,找出某个任一模式下最可能出现的识别模式,并基于此给出买卖信号,比如,对于8模式最可能对应的识别模式是25,我们就会基于此模式25(24=011000 跌涨涨跌跌跌)设计交易计划
下面的代码就是在MT5平台读取csv数据的示例代码
file_handle = FileOpen(dirname + "//" + filename, FILE_READ|FILE_CSV|FILE_ANSI, ",");  if(file_handle!=INVALID_HANDLE)  {      //--- 读取来自数组文件的所有数据      int line_count = 0;      int field_count = 0;      while(!FileIsEnding(file_handle)){         string str = FileReadString(file_handle);         if(line_count >= ArraySize(file_array)){            ArrayResize(file_array, ArraySize(file_array) + 1024);         }         file_array[line_count].pattern = (int) str;         field_count = 1;         while(!FileIsLineEnding(file_handle)){            str = FileReadString(file_handle);            if(field_count == 1){                              file_array[line_count].recognition = (int) str;               field_count++;            }            else if(field_count == 2){               file_array[line_count].count = (int) str;               field_count++;            }            else {             field_count++;             Print("field count is ", field_count);             continue;            }         }            line_count++;         }      ArrayResize(file_array, line_count);      // Print("size is ", ArraySize(file_array));      FileClose(file_handle);  }  else{   Print("File open failed, error ",GetLastError());  }
回测

我们将设计好的交易策略应用于模拟盘,并检测模式是否能够识别正确,检测开仓方向是否正确,接下来就需要对该交易策略进行回测,由于MT5回测读取文件信息会产生错误,在下一篇文章中我们将文件直接放进交易策略中进行回测,欢迎继续关注我们
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP