在 Python 语言中,我想测试一个交易算法的几个规则。 我有 2 个过滤器(知道交易条件是好是坏)、2 个进入信号和 2 个退出信号。
我想创建一个可以一起测试不同规则组合的函数。 怎么办?
在作为示例附加的代码中,我自愿减少了标准数量(2 个过滤器、2 个输入和 2 个输出,因此有 8 个组合)。最终目标是能够使用根据大量不同标准创建的函数:
我导入数据和库
!pip install yfinance
import yfinance as yf
import pandas as pd
import numpy as np
df = yf.download('QQQ',period = '60d', interval = '5m')
我创造我的特征:
df['sma20'] = df['Close'].rolling(20).mean() # sma 20 periods
df['sma50'] = df['Close'].rolling(50).mean() # sma 50 periods
df['trend_up_sma20_50'] = np.where((df['sma20'] > df['sma50']), 1,0) # sma20 > sma50
df['slope_up_sma20'] = np.where((df['sma20'] > df['sma20'].shift(periods = 1)), 1,0) # slope of the sma20 rises
df['green'] = df['Open'] > df['Close'] # green candlestick
df['consecutive_green'] = df['green'] & df['green'].shift(periods=1) & df['green'].shift(periods=2) # 2 consecutive green candle
df['green_engulfing'] = np.where((df['Close'] > df['Open']) &
(df['Close'] > df['High'].shift(periods = 1)) &
(df['Open'])<df['Low'], 1,0) # engulfing candlestick
df['red'] = df['Open'] < df['Close'] # red candlestick
df['reverse'] = np.where((df['Close'] < df['sma20']), 1,0) # close < sma20
这里是我想一起测试的条件(本例中有 8 个组合):
filter = df['trend_up_sma20_50'] | df['slope_up_sma20']
signal_buy = df['consecutive_green'] | df['green_engulfing']
signal_close_buy = df['red'] | df['reverse']