第一段量化決策代碼

碎碎念

心心念念的量化決策念叨了好久炫惩,前段時(shí)間終于把excel版的決策模板做出來了,但是一遍遍手動(dòng)錄入市價(jià)數(shù)據(jù)太繁瑣,這周利用閑暇學(xué)習(xí)python,終于寫出了自己的第一段量化決策代碼嫁艇。

沒有圖的道理都是耍流氓,話不多說弦撩,上圖步咪!


持倉一覽
量化決策

平臺(tái)選擇

前期簡單了解了一下,目前國內(nèi)主流的量化平臺(tái)如下:

  • 優(yōu)礦(Uqer)
  • 萬礦(Wind Quant)
  • 聚寬(JoinQuant)
  • BigQuant
  • 文華財(cái)經(jīng)
  • 同花順Mind Go
  • 米筐(RiceQuant)
  • 掘金量化

優(yōu)礦是最早做的益楼,但是近一年社區(qū)沒那么活躍了歧斟;
萬礦依托國內(nèi)最強(qiáng)大的金融數(shù)據(jù)端wind提供數(shù)據(jù)支持;
聚寬社區(qū)挺活躍的偏形,但是用了幾天感覺用戶體驗(yàn)不太好,尤其是新手接入這塊兒存在斷層觉鼻。

思慮再三俊扭,決定從萬礦入手,畢竟有wind的數(shù)據(jù)支持坠陈,數(shù)據(jù)可靠性還是很有保證的萨惑。

設(shè)計(jì)思路

小插曲

因?yàn)樯现芪鍎偨佑|python捐康,對(duì)這塊還不夠熟悉,加之對(duì)pandas庸蔼、numpy等數(shù)據(jù)操作庫的生疏解总,決定從excel開始構(gòu)建數(shù)據(jù),而非在python中從0開始捏數(shù)據(jù)姐仅。

之前設(shè)計(jì)的excel模板有些不適合代碼讀取后提取有用信息花枫,故做了簡單的整理改造,改造后各表結(jié)構(gòu)如下:

標(biāo)的池
標(biāo)的持倉
調(diào)倉參數(shù)
調(diào)倉決策

整體思路:

  1. 讀取excel掏膏,提取各表數(shù)據(jù)
  2. 根據(jù)'標(biāo)的池'表代碼劳翰,查詢各標(biāo)的最新 市價(jià)
  3. 結(jié)合'標(biāo)的持倉'表持倉數(shù),計(jì)算最新 持倉市值
  4. 根據(jù)持倉情況馒疹,計(jì)算 當(dāng)前倉位
  5. 結(jié)合當(dāng)前倉位佳簸、目標(biāo)倉位和'調(diào)倉參數(shù)'表的配置,計(jì)算 動(dòng)態(tài)倉位
  6. 根據(jù)調(diào)倉參數(shù)表的可分配資金和持倉市值計(jì)算 可分配價(jià)值
  7. 根據(jù)可分配價(jià)值和動(dòng)態(tài)倉位確定 目標(biāo)市值
  8. 再借此計(jì)算 價(jià)值偏移颖变、應(yīng)調(diào)倉數(shù)調(diào)倉金額

代碼實(shí)現(xiàn)

  1. 引入萬礦依賴并建立連接
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 引入萬礦依賴并建立連接
from WindPy import *
w.start(show_welcome = False)
  1. 引入pandas依賴生均,用以數(shù)據(jù)處理
# 引入pandas依賴,用以數(shù)據(jù)處理
import pandas as pd
  1. 定義持倉處理函數(shù):獲取市價(jià)腥刹,計(jì)算最新持倉市值
# 處理持倉
def work_flow1(stockpool,positions):
    codes=stockpool['代碼'].tolist()
    # 獲取行情
    error,prices=w.wsq(codes, 'rt_last', "func=DemoWSQCallback", usedf=True)
    assert error ==0 , "API數(shù)據(jù)提取錯(cuò)誤马胧,ErrorCode={},具體含義請(qǐng)至幫助文檔附件《常見API錯(cuò)誤碼》中查詢肛走。".format(error) 
    # 行情數(shù)據(jù)處理:拼接市價(jià)漓雅、計(jì)算持倉市值
    positions=pd.merge(positions,prices,left_on='代碼', right_index=True, how='left')
    positions['市價(jià)']=positions.pop('RT_LAST')
    positions['持倉市值'] = positions.apply(lambda r: round(r['市價(jià)'] * r['持倉數(shù)']),axis=1)
    return positions
  1. 定義決策處理函數(shù):根據(jù)持倉情況和調(diào)倉配置,作出調(diào)倉決策
# 處理決策
def work_flow2(positions,param,decision):
    market_cap = positions['持倉市值'].sum()  # 持倉市值合計(jì)
    step = param.loc[param['名稱'] == '調(diào)整步數(shù)']['值'].iloc[0] # 分步數(shù)
    amt = param.loc[param['名稱'] == '當(dāng)次投入額']['值'].iloc[0] # 手頭現(xiàn)金
    value_cap=market_cap+amt        # 可支配價(jià)值
    print('持倉市值合計(jì):%d朽色,可支配價(jià)值:%d' % (market_cap,value_cap))

    def action(row):
        pos = positions.loc[positions['代碼'] == row['代碼']].iloc[0]
        row['當(dāng)前倉位'] = round(pos['持倉市值'] / value_cap, 4)
        row['動(dòng)態(tài)倉位'] = round(row['當(dāng)前倉位'] + (row['目標(biāo)倉位'] - row['當(dāng)前倉位']) / step, 4)
        # 目標(biāo)市值
        tar_value = row['動(dòng)態(tài)倉位'] * value_cap
        row['價(jià)值偏移'] = round((pos['持倉市值'] - tar_value) / tar_value, 4)
        row['應(yīng)調(diào)倉數(shù)'] = round((tar_value - pos['持倉市值']) / pos['市價(jià)'], -2)
        row['調(diào)倉金額'] = round(row['應(yīng)調(diào)倉數(shù)'] * pos['市價(jià)'], 2)
        return row
    decision=decision.apply(action,axis=1)
    return decision
  1. 編排工作流并執(zhí)行
# 工作流
def work_flow():
    # 定義文件路徑和表名
    data_from='data/榜單應(yīng)用模板20200424.xlsx'
    stockpool_sheet='標(biāo)的池'
    positions_sheet='標(biāo)的持倉'
    param_sheet='調(diào)倉參數(shù)'
    decision_sheet='調(diào)倉決策'
    # 讀取模板e(cuò)xcel
    stockpool = pd.read_excel (data_from, sheet_name = stockpool_sheet)
    positions = pd.read_excel (data_from, sheet_name = positions_sheet)
    param = pd.read_excel (data_from, sheet_name = param_sheet)
    decision = pd.read_excel (data_from, sheet_name = decision_sheet)
    # 處理持倉數(shù)據(jù)
    positions=work_flow1(stockpool,positions)
    # 處理決策
    decision=work_flow2(positions,param,decision)

    print('完成工作流邻吞!')
    return stockpool,positions,param,decision

# 執(zhí)行工作流
df=work_flow()
  1. 展示持倉情況
# 持倉
from WindCharts import *
# 數(shù)據(jù)顯示
WTable(data=df[1]).plot()
持倉情況
  1. 展示決策情況
# 決策結(jié)果
from WindCharts import *
# 數(shù)據(jù)顯示
WTable(data=df[3]).plot()
決策結(jié)果
  1. 為了直觀地分析持倉分布,定義了柱狀圖和餅狀圖
# 持倉柱狀圖
import matplotlib.pyplot as plt
def draw_bar(positions):
    names=positions['名稱'].tolist()
    values=positions['持倉市值'].tolist()
    plt.bar(names,values)
    plt.xticks(rotation=90)
    
draw_bar(df[1])
持倉分布
# 持倉餅圖
import matplotlib.pyplot as plt
def draw_pie(positions):
    positions=positions.loc[positions['持倉市值'] != 0,:].sort_values('持倉市值')
    names=positions['名稱'].tolist()
    values=positions['持倉市值'].tolist()
    
    fig = plt.figure(facecolor='#f1f5f5')
    ax=plt.axes([0,0,1.6,1.6])
    patches,l_text,p_text=ax.pie(values,labels=names,autopct='%1.2f%%',startangle=90)
    for t in l_text: t.set_size(20)
    for t in p_text: t.set_size(18)
    
draw_pie(df[1])
持倉分布

Ending

項(xiàng)目地址:https://gitee.com/stephenshen/ark-quant/tree/master/first-quant
可以直接導(dǎo)入到萬礦

記得上傳數(shù)據(jù)表到指定位置


image.png

轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/b973a5f56213
謝謝~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末葫男,一起剝皮案震驚了整個(gè)濱河市抱冷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梢褐,老刑警劉巖旺遮,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盈咳,居然都是意外死亡耿眉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鱼响,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸣剪,“玉大人,你說我怎么就攤上這事】鸷В” “怎么了债鸡?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铛纬。 經(jīng)常有香客問我厌均,道長,這世上最難降的妖魔是什么告唆? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任棺弊,我火速辦了婚禮,結(jié)果婚禮上悔详,老公的妹妹穿的比我還像新娘镊屎。我一直安慰自己,他們只是感情好茄螃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布缝驳。 她就那樣靜靜地躺著,像睡著了一般归苍。 火紅的嫁衣襯著肌膚如雪用狱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天拼弃,我揣著相機(jī)與錄音夏伊,去河邊找鬼。 笑死吻氧,一個(gè)胖子當(dāng)著我的面吹牛溺忧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盯孙,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鲁森,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了振惰?” 一聲冷哼從身側(cè)響起歌溉,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骑晶,沒想到半個(gè)月后痛垛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桶蛔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年匙头,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仔雷。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乾胶,死狀恐怖抖剿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情识窿,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布脑融,位于F島的核電站喻频,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肘迎。R本人自食惡果不足惜甥温,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望妓布。 院中可真熱鬧姻蚓,春花似錦、人聲如沸匣沼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽释涛。三九已至加叁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唇撬,已是汗流浹背它匕。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留窖认,地道東北人豫柬。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像扑浸,于是被迫代替她去往敵國和親烧给。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 算法技術(shù)解構(gòu) 1首装、Python基礎(chǔ)知識(shí) (1)IPythonIPython的開發(fā)者吸收了標(biāo)準(zhǔn)解釋器的基本概念创夜,在此...
    shenciyou閱讀 5,316評(píng)論 0 10
  • ——讀《跟巴菲特學(xué)習(xí)倉位管理》感想 一驰吓、倉位管理的重要性 一項(xiàng)好的投資必須具備的三大要素是:好公司、好價(jià)格和好倉位...
    蔣仁鋼閱讀 2,257評(píng)論 0 5
  • 轉(zhuǎn)眼已是一年中最后一個(gè)月。 隨手翻看臺(tái)歷缺亮,發(fā)現(xiàn)每個(gè)月都有那么三五天被標(biāo)記上紅叉叉——這代表“那天我發(fā)飆了”翁涤。也就是...
    膽兒大閱讀 1,144評(píng)論 10 25
  • *前端 *軟件主要分為倆種架構(gòu)C/S和B/S. *B/S中的B指的是browsers,是瀏覽器的意思,S值Serv...
    我想要上天閱讀 237評(píng)論 0 1
  • 沒有假如,你就是天堂11.27悟 想什么葵礼,沒什么 怕什么号阿,來什么 舍與得:有舍有得,有得有失 智者知之鸳粉,愚者昧之扔涧,...
    聞思修1965閱讀 312評(píng)論 0 0