在i铁矿石30min上自动生成的期货cta信号4

发布于: 雪球转发:0回复:0喜欢:0

遗传规划自动生成期货cta策略

在i铁矿石30min上自动生成的期货cta信号signal1=STDDEV(WILLR(close, low, close, 39), 57)|CTA策略结构的python伪代码:alpha = signal1[i - 100:i]percentage_down = 0.2 * (alpha.max() - alpha.min()) + alpha.min()percentage_up = 0.8 * (alpha.max() - alpha.min()) + alpha.min()if signal1 > percentage_up and MarketPosition != 1: # 开多 buy(i)if signal1< percentage_down and MarketPosition != -1: sellshort(i)

用遗传规划学习生成该信号时,在训练集上:

# begindate='2016-01-05 21:00:00'#训练集的时间

# enddate='2019-03-24 22:45:00'

在测试集上,

# begindate='2019-03-24 9:00:00'#测试集

# enddate='2022-03-14 22:45:00'

然后用自己写回测平台进行回测验证:

时间用训练集和测试集一起

begindate='2016-01-05 21:00:00'#train+testenddate='2022-03-14 22:45:00'

open=self.data[:,1].astype('float64') high = self.data[:, 2].astype('float64') low = self.data[:, 3].astype('float64') close = self.data[:, 4].astype('float64') volume=self.data[:,5].astype('float64') willr=ta.WILLR(close,low,close,self.pram_dict['pram1']) stddev=ta.STDDEV(willr,self.pram_dict['pram2']) self.data=np.c_[self.data,stddev] # df=pd.DataFrame(self.data) # df.iloc[:,-1].plot() def backtest(self, i): alpha = self.data[:, 6][i - 100:i] percentage_down = 0.2 * (alpha.max() - alpha.min()) + alpha.min() percentage_up = 0.8 * (alpha.max() - alpha.min()) + alpha.min() if self.data[i][6] > percentage_up and self.MarketPosition != 1: # 开多 self.buy(i) if self.data[i][6] < percentage_down and self.MarketPosition != -1: self.sellshort(i)

看看是否有参数高原

最后基于天勤的开源期货交易系统--TQPY

去实现模拟交易或者实盘交易

def get_alpha(self,klines): volume=klines.volume.values low=klines.low.values close=klines.close.values open=klines.open.values high=klines.high.values self.willr=ta.WILLR(close,low,close, 39) self.stddev=ta.STDDEV(self.self.willr,57) def stra(self): self.get_alpha(self.klines) self.klines['correl'] = self.stddev self.klines['correl.board'] = "B2" # 设置附图: 可以设置任意字符串,同一字符串表示同一副图 self.klines["correl.color"] = "green" self.alpha = self.stddev[-(100+1):-1] self.percentage_down = 0.2 * (self.alpha.max() - self.alpha.min()) + self.alpha.min() self.percentage_up = 0.8 * (self.alpha.max() - self.alpha.min()) + self.alpha.min() while True: self.api.wait_update() if self.api.is_changing(self.klines.iloc[-1], "datetime"): # 判断开仓条件 if self.MarketPosition != 1: # 如果最新价大于上轨,K线上穿上轨,开多仓 if self.stddev[-1]>self.percentage_up: print(self.stra_name + " 开多仓") self.buy() if self.MarketPosition !=-1: # 如果最新价大于上轨,K线上穿上轨,开多仓 if self.stddev[-1]<self.percentage_down : print(self.stra_name + " 开空仓") self.sellshort() self.api.close()

量化交流群介绍