|
@@ -12,6 +12,7 @@ import math
|
|
from datetime import datetime as dt
|
|
from datetime import datetime as dt
|
|
import multiprocessing as mp
|
|
import multiprocessing as mp
|
|
from backtrader.feeds import PandasData
|
|
from backtrader.feeds import PandasData
|
|
|
|
+import platform
|
|
|
|
|
|
|
|
|
|
# import multiprocessing
|
|
# import multiprocessing
|
|
@@ -140,7 +141,7 @@ class TestStrategy(bt.Strategy):
|
|
highest = np.max(self.high.get(size=self.params.num))
|
|
highest = np.max(self.high.get(size=self.params.num))
|
|
if (self.hl[-2] == 2 or self.hl[-2] == 1) and self.dataclose[0] > self.sma5[0] > self.sma5[-1] \
|
|
if (self.hl[-2] == 2 or self.hl[-2] == 1) and self.dataclose[0] > self.sma5[0] > self.sma5[-1] \
|
|
and self.sma5[-3]/self.sma5[-2] > self.sma5[-2]/self.sma5[-1] > (1+rate) \
|
|
and self.sma5[-3]/self.sma5[-2] > self.sma5[-2]/self.sma5[-1] > (1+rate) \
|
|
- and self.sma5[0] > self.sma5[-1]*(1+rate) \
|
|
|
|
|
|
+ and self.sma5[0] > self.sma5[-1]\
|
|
and (((lowest * (1 - vola)) < self.low[-2] < (lowest * (1 + vola))) or (
|
|
and (((lowest * (1 - vola)) < self.low[-2] < (lowest * (1 + vola))) or (
|
|
(lowest * (1 - vola)) < self.low[-1] < (lowest * (1 + vola)))) \
|
|
(lowest * (1 - vola)) < self.low[-1] < (lowest * (1 + vola)))) \
|
|
and self.volume[0] >= self.volume[-1] and self.dataclose[0] > self.dataopen[0] \
|
|
and self.volume[0] >= self.volume[-1] and self.dataclose[0] > self.dataopen[0] \
|
|
@@ -165,13 +166,16 @@ def err_call_back(err):
|
|
|
|
|
|
|
|
|
|
def to_df(lt):
|
|
def to_df(lt):
|
|
|
|
+ print('开始存数据')
|
|
df = pd.DataFrame(list(lt), columns=['周期', '波动率', 'MA5斜率', '盈利个数', '盈利比例', '总盈利', '平均盈利', '最大盈利',
|
|
df = pd.DataFrame(list(lt), columns=['周期', '波动率', 'MA5斜率', '盈利个数', '盈利比例', '总盈利', '平均盈利', '最大盈利',
|
|
'最小盈利', '总亏损', '平均亏损', '最大亏损', '最小亏损'])
|
|
'最小盈利', '总亏损', '平均亏损', '最大亏损', '最小亏损'])
|
|
df.sort_values(by=['周期', '波动率', 'MA5斜率'], ascending=True, inplace=True)
|
|
df.sort_values(by=['周期', '波动率', 'MA5斜率'], ascending=True, inplace=True)
|
|
df = df.reset_index(drop=True)
|
|
df = df.reset_index(drop=True)
|
|
- # df.to_csv(f"D:\Daniel\策略\策略穷举{dt.now().strftime('%Y%m%d')}.csv", index=True, encoding='utf-8', mode='w')
|
|
|
|
- df.to_csv(f"/Users/daniel/Documents/策略/策略穷举{dt.now().strftime('%Y%m%d')}.csv", index=True, encoding='utf-8', mode='w')
|
|
|
|
- print(df)
|
|
|
|
|
|
+ if platform.node() == 'DanieldeMBP.lan':
|
|
|
|
+ df.to_csv(f"/Users/daniel/Documents/策略/策略穷举{dt.now().strftime('%Y%m%d')}.csv", index=True, encoding='utf-8', mode='w')
|
|
|
|
+ else:
|
|
|
|
+ df.to_csv(f"D:\Daniel\策略\策略穷举{dt.now().strftime('%Y%m%d')}.csv", index=True, encoding='utf-8', mode='w')
|
|
|
|
+ print(f'结果:{df}')
|
|
|
|
|
|
|
|
|
|
def backtrader(list_date, table_list, result, result_change, result_change_fall, num, Volatility, rate, err_list):
|
|
def backtrader(list_date, table_list, result, result_change, result_change_fall, num, Volatility, rate, err_list):
|
|
@@ -264,16 +268,20 @@ def backtrader(list_date, table_list, result, result_change, result_change_fall,
|
|
endtime = dt.now()
|
|
endtime = dt.now()
|
|
print(f'{num}天波动率为{Volatility}%MA5斜率为{rate},myPID is {os.getpid()}.本轮耗时为{endtime - sttime}')
|
|
print(f'{num}天波动率为{Volatility}%MA5斜率为{rate},myPID is {os.getpid()}.本轮耗时为{endtime - sttime}')
|
|
else:
|
|
else:
|
|
- print(result, result_change, result_change_fall, num, Volatility, rate, err_list)
|
|
|
|
|
|
+ print('阿欧', len(result), len(result_change), len(result_change_fall), num, Volatility, rate, err_list)
|
|
|
|
+ list_date.append([num, Volatility, rate, 0, len(result) / len(table_list), len(result),
|
|
|
|
+ len(result), len(result), len(result), len(result), len(result), len(result), 0])
|
|
|
|
+ to_df(list_date)
|
|
# cerebro.plot()
|
|
# cerebro.plot()
|
|
|
|
|
|
|
|
|
|
-df = pd.DataFrame(
|
|
|
|
- columns=['周期', '波动率', 'MA5斜率', '盈利个数', '盈利比例', '总盈利', '平均盈利', '最大盈利', '最小盈利', '总亏损',
|
|
|
|
- '平均亏损', '最大亏损', '最小亏损'])
|
|
|
|
|
|
+# df = pd.DataFrame(
|
|
|
|
+# columns=['周期', '波动率', 'MA5斜率', '盈利个数', '盈利比例', '总盈利', '平均盈利', '最大盈利', '最小盈利', '总亏损',
|
|
|
|
+# '平均亏损', '最大亏损', '最小亏损'])
|
|
if __name__ == '__main__':
|
|
if __name__ == '__main__':
|
|
starttime = dt.now()
|
|
starttime = dt.now()
|
|
print(starttime)
|
|
print(starttime)
|
|
|
|
+ print(type(platform.node()))
|
|
# engine = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/hlfx?charset=utf8', poolclass=NullPool)
|
|
# engine = create_engine('mysql+pymysql://root:r6kEwqWU9!v3@localhost:3307/hlfx?charset=utf8', poolclass=NullPool)
|
|
|
|
|
|
# stocks = pd.read_sql_query(
|
|
# stocks = pd.read_sql_query(
|
|
@@ -289,7 +297,7 @@ if __name__ == '__main__':
|
|
cursor.execute("show tables like '%%%s%%' " % fre)
|
|
cursor.execute("show tables like '%%%s%%' " % fre)
|
|
table_list = [tuple[0] for tuple in cursor.fetchall()]
|
|
table_list = [tuple[0] for tuple in cursor.fetchall()]
|
|
# print(table_list)
|
|
# print(table_list)
|
|
- # table_list = table_list[0:100]
|
|
|
|
|
|
+ table_list = table_list[0:10]
|
|
|
|
|
|
list_date = mp.Manager().list()
|
|
list_date = mp.Manager().list()
|
|
thread_list = []
|
|
thread_list = []
|