日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

印钞机 java c c vb_自己动手写一个印钞机 第六章

發(fā)布時間:2024/9/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 印钞机 java c c vb_自己动手写一个印钞机 第六章 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:阿布🐶

未經(jīng)本人允許禁止轉(zhuǎn)載

非均衡勝負收益帶來的必然非均衡勝負比例,目標由因子的能力解決一部分,模式識別提升關(guān)鍵的一部分

上一章構(gòu)造了 3個主裁和一個輔助裁判,這一章開始構(gòu)建邊裁及裁判的最優(yōu)參數(shù)選擇

fn = ZEnv.g_project_root + '/data/cache/orders_pd_ump_hit_predict_abu'

key = 'orders_pd_ump_hit_predict_abu'

orders_pd_ump = ZCommonUtil.load_hdf5(fn, key)

orders_pd_ump.shape

# out

(47374, 39)

UmpEdge 邊裁

import UmpEdge

ump_edge = UmpEdge.UmpEdgeClass(orders_pd_ump)

邊裁使用profit, profit_cg作為gmm分類數(shù)據(jù)生成ss分類序列,之后根據(jù)profit_cg進行rank數(shù)據(jù)生成p_rk_cg,再找到top winN,top lossN N現(xiàn)在的設(shè)置是25%且對外不暴露,分別給于1, -1, 其它的都是0生成rk列,將atr,deg,wave所有數(shù)據(jù)的numpy矩陣保存起來,對輸入的數(shù)據(jù)進行標準化后實行距離對比,找到最匹配的rk標簽

簡單說就是引入交易后置參數(shù)收益,把收益的top 25%單子,和blow 25%的單子的特征抽取,但是由于在實際交易那一時刻沒有收益這個變量,所以無法直接預(yù)測,所以之前將特征的x預(yù)處理做標準化,再使 pairwise_distances計算輸入的相似度最相似那個預(yù)存x,影射出那個x是否在top25%或者below25%, 明白了嗎?不明白就看源代碼吧,下面也貼了一段

核心代碼如下所示,或者直接查閱源代碼UmpEdge.py

def dump_clf(self):

dump_clf = {'top_loss_ss': self.top_loss_ss, 'top_win_ss': self.top_win_ss,

'fiter_df': self.fiter.df, 'fiter_x': self.fiter.x}

ZCommonUtil.dump_pickle(dump_clf, self.dump_file_fn())

def predict(self, **kwargs):

dump_clf = UmpEdgeClass.dump_clf_manager.get_ump(self)

x = np.array([kwargs[col] for col in dump_clf['fiter_df'].columns[2:-3]])

x = x.reshape(1, -1)

con_x = np.concatenate((x, dump_clf['fiter_x']), axis=0)

x_scale_param = self.scaler.fit(con_x)

con_x = self.scaler.fit_transform(con_x, x_scale_param)

distance_min_ind = pairwise_distances(con_x[0].reshape(1, -1), con_x[1:],

metric='euclidean').argmin()

'''

置換出可以作為分類輸入的x

'''

ss = dump_clf['fiter_df'].iloc[distance_min_ind]['ss']

if ss in dump_clf['top_loss_ss']:

return -1

elif ss in dump_clf['top_win_ss']:

return 1

return 0

def gmm_component_filter(self, nc=20, threshold=0.72, show=True):

clf = GMM(nc, n_iter=500, random_state=3).fit(self.fiter.y)

ss = clf.predict(self.fiter.y)

self.fiter.df['p_rk_cg'] = self.fiter.df['profit_cg'].rank()

self.fiter.df['ss'] = ss

win_top = len(self.fiter.df['profit_cg']) - len(self.fiter.df['profit_cg']) * 0.25

loss_top = len(self.fiter.df['profit_cg']) * 0.25

self.fiter.df['rk'] = 0

self.fiter.df['rk'] = np.where(self.fiter.df['p_rk_cg'] > win_top, 1, self.fiter.df['rk'])

self.fiter.df['rk'] = np.where(self.fiter.df['p_rk_cg'] < loss_top, -1, self.fiter.df['rk'])

xt = pd.crosstab(self.fiter.df['ss'], self.fiter.df['rk'])

xt_pct = xt.div(xt.sum(1).astype(float), axis=0)

if show:

xt_pct.plot(

figsize=(16, 8),

kind='bar',

stacked=True,

title=str('ss') + ' -> ' + str('result'))

plt.xlabel(str('ss'))

plt.ylabel(str('result'))

ZLog.info(xt_pct[xt_pct[-1] > threshold])

ZLog.info(xt_pct[xt_pct[1] > threshold])

self.top_loss_ss = xt_pct[xt_pct[-1] > threshold].index

self.top_win_ss = xt_pct[xt_pct[1] > threshold].index

return xt, xt_pct

ump_edge.fiter.df.head()

如下可視化是不是更明白點了,top 25是1, below 25是-1,其它的都用0代表,gmm分類之后rank profit,大于閥值的類別得到保留,這些類別如下所示

xt, xt_pct = ump_edge.gmm_component_filter(nc=20, threshold=0.72, show=True)

# out

rk -1 0 1

ss

0 1.0 0.0 0.0

6 1.0 0.0 0.0

7 1.0 0.0 0.0

9 1.0 0.0 0.0

19 1.0 0.0 0.0

rk -1 0 1

ss

2 0.0 0.000000 1.000000

4 0.0 0.000000 1.000000

5 0.0 0.000000 1.000000

10 0.0 0.000000 1.000000

11 0.0 0.000000 1.000000

12 0.0 0.028401 0.971599

13 0.0 0.000000 1.000000

16 0.0 0.000000 1.000000

18 0.0 0.000000 1.000000

pd.crosstab交織表生成gmm生成的類別與rk的交織結(jié)果

xt

rk

-1

0

1

ss

---

---

---

---

0

2465

0

0

1

0

4326

241

2

0

0

4

3

1073

4038

0

4

0

0

3053

5

0

0

33

6

47

0

0

7

3633

0

0

8

103

4799

0

9

886

0

0

10

0

0

20

11

0

0

978

12

0

114

3900

13

0

0

2

14

0

3249

1036

15

0

4346

1

16

0

0

213

17

2892

1536

0

18

0

0

1723

19

104

0

0

xt_pct

rk

-1

0

1

ss

---

---

---

---

0

1.000000

0.000000

0.000000

1

0.000000

0.947230

0.052770

2

0.000000

0.000000

1.000000

3

0.209939

0.790061

0.000000

4

0.000000

0.000000

1.000000

5

0.000000

0.000000

1.000000

6

1.000000

0.000000

0.000000

7

1.000000

0.000000

0.000000

8

0.021012

0.978988

0.000000

9

1.000000

0.000000

0.000000

10

0.000000

0.000000

1.000000

11

0.000000

0.000000

1.000000

12

0.000000

0.028401

0.971599

13

0.000000

0.000000

1.000000

14

0.000000

0.758226

0.241774

15

0.000000

0.999770

0.000230

16

0.000000

0.000000

1.000000

17

0.653117

0.346883

0.000000

18

0.000000

0.000000

1.000000

19

1.000000

0.000000

0.000000

最后的常規(guī)任務(wù)就是將裁判本地序列話

ump_edge.dump_clf()

下面的主題是尋找裁判最優(yōu)參數(shù)

將orders_pd_ump數(shù)據(jù)重新讀取,新的數(shù)據(jù)包涵了使用這些裁判進行裁決,但不攔截的所有統(tǒng)計數(shù)據(jù),形式如下所示表格所示,通過數(shù)據(jù)統(tǒng)計來組織攔截規(guī)則,比如幾個主裁一起合作,達到幾個hit就直接攔截,幾個等待邊裁裁決,輔助裁判應(yīng)用賦予的權(quán)力權(quán)重,這些參數(shù)設(shè)置好了之后就可以組成一個實用的交易攔截系統(tǒng)!

orders_pd_ump.filter(regex='result|ump_main_mlfiter*|ind_key').tail(2)

# 先對三個主裁尋找參數(shù),主裁的優(yōu)先級是一致的,至少這里是這樣實現(xiàn)的

from MlFiter import MlFiterClass

orders_pd_ump['ind_key'] = np.arange(0, len(orders_pd_ump))

orders_pd_tmp = orders_pd_ump.filter(regex='result|ump_main_mlfiter*|ind_key')

order_has_ret = orders_pd_tmp[orders_pd_tmp['result'] <> 0]

order_has_ret['result'] = np.where(order_has_ret['result'] == -1, 0, 1)

order_has_ret['ump_main_mlfitermainpdclass_predict'] = np.where(order_has_ret['ump_main_mlfitermainpdclass_predict'] == True, 1, 0)

order_has_ret['ump_main_mlfiterdegpdclass_predict'] = np.where(order_has_ret['ump_main_mlfiterdegpdclass_predict'] == True, 1, 0)

order_has_ret['ump_main_mlfiterwavepdclass_predict'] = np.where(order_has_ret['ump_main_mlfiterwavepdclass_predict'] == True, 1, 0)

order_has_ret = order_has_ret[(order_has_ret['ump_main_mlfitermainpdclass_predict'] == 0) |

(order_has_ret['ump_main_mlfiterdegpdclass_predict'] == 0) |

(order_has_ret['ump_main_mlfiterwavepdclass_predict'] == 0)]

order_has_ret['predict_sum'] = order_has_ret['ump_main_mlfitermainpdclass_predict'] + order_has_ret['ump_main_mlfiterdegpdclass_predict'] + \

order_has_ret['ump_main_mlfiterwavepdclass_predict']

order_has_ret['hit_sum'] = order_has_ret['ump_main_mlfiterdegpdclass_hit'] + order_has_ret['ump_main_mlfitermainpdclass_hit'] + \

order_has_ret['ump_main_mlfiterdegpdclass_hit']

matrix = order_has_ret.as_matrix()

y = matrix[:, 0]

x = matrix[:, 1:]

fiter = MlFiterClass(x, y, order_has_ret)

fiter.df.head()

order_has_ret.head()

由于簡書不支持html的表格,完整的請參閱git上的ipython notebook版本

這里為了讓你能看懂我將表格做個T再截一張圖,有條件請參閱notebook版本

order_has_ret.T

通過可視化尋找參數(shù),綜合參考數(shù)量,概率等多方面因素

如下圖所示,1個hit以上就上0.65了 20個hit 0.70以上,> 20個就可以主裁直接使用裁決了,小于的等待,輔助裁判,邊裁

from sklearn import metrics

import matplotlib.pyplot as plt

hd_range = np.arange(0, 50)

hd_result = []

hd_sum = []

for hd in hd_range:

xt = order_has_ret[(order_has_ret['hit_sum'] > hd)]['result'].value_counts()

hs = xt.sum()

hd_sum.append(hs)

hd_result.append(float(xt[0])/hs)

cmap = plt.get_cmap('jet', 20)

cmap.set_under('gray')

fig, ax = plt.subplots()

ax.plot(hd_range, hd_result)

cax = ax.scatter(hd_range, hd_result, c=hd_sum, cmap=cmap, vmin=np.min(hd_sum),

vmax=np.max(hd_sum))

ax.grid(True)

fig.colorbar(cax, label='hd_sum', extend='min')

跳空的輔助裁判本身數(shù)據(jù)就少,輔助裁判盡量裁決 jump ump可以使用hit 5作為閥值,大于5個hit直接裁決,否則等待邊裁

orders_pd_tmp = orders_pd_ump.filter(regex='result|ump_jump_mlfiter|ind_key*')

order_has_ret = orders_pd_tmp[orders_pd_tmp['result'] <> 0]

order_has_ret['result'] = np.where(order_has_ret['result'] == -1, 0, 1)

order_has_ret['ump_jump_mlfiterjumppdclass_predict'] = np.where(order_has_ret['ump_jump_mlfiterjumppdclass_predict'] == True, 1, 0)

order_has_ret = order_has_ret[(order_has_ret['ump_jump_mlfiterjumppdclass_predict'] == 0)]

hd_range = np.unique(order_has_ret['ump_jump_mlfiterjumppdclass_hit'])[:-1]

# -1 要使用0開始的范圍

hd_range = np.array(hd_range) - 1

print hd_range

hd_result = []

hd_sum = []

for hd in hd_range:

xt = order_has_ret[order_has_ret['ump_jump_mlfiterjumppdclass_hit'] > hd]['result'].value_counts()

hs = xt.sum()

hd_sum.append(hs)

hd_result.append(float(xt[0])/hs)

cmap = plt.get_cmap('jet', 20)

cmap.set_under('gray')

fig, ax = plt.subplots()

ax.plot(hd_range, hd_result)

cax = ax.scatter(hd_range, hd_result, c=hd_sum, cmap=cmap, vmin=np.min(hd_sum),

vmax=np.max(hd_sum))

ax.grid(True)

fig.colorbar(cax, label='hd_sum', extend='min')

邊裁在現(xiàn)在的規(guī)則中不需要需找參數(shù)

好了,這些都組織好之后,下一章就該看看這個系統(tǒng)能不能成為印鈔機之路上那個重要組成環(huán)節(jié)了,下一章也是最終章節(jié),如果您 真的能看到這里,并且大概知道我再說些什么,我就感覺很欣慰了,如果那樣的話多多交流

感謝🙏您能有耐心看到這里

如果有什么問題可以加阿布的微信

微信號:aaaabbbuu

總結(jié)

以上是生活随笔為你收集整理的印钞机 java c c vb_自己动手写一个印钞机 第六章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。