|
python量化交易編程自學(xué):新手學(xué)量化,歡迎一起交流學(xué)習(xí),共同進(jìn)步 這個(gè)股票回溯是513060,今年跌幅很慘的恒生醫(yī)療ETF,跌幅在60%以上,股票數(shù)據(jù)來(lái)源于同花順客戶(hù)端歷史交易記錄。是按做T的模式設(shè)置的買(mǎi)賣(mài)點(diǎn)。每次1000股,靠做T賺取盈利 設(shè)置的股票買(mǎi)賣(mài)點(diǎn): 買(mǎi)點(diǎn):漲幅小于-0.5%以上 賣(mài)點(diǎn):第二天收盤(pán)價(jià)格漲幅大于2%以上 交易日期:2021-3-29至2022-5-23 Python源碼: '''股票買(mǎi)賣(mài)策略:買(mǎi)入:股票漲幅小于-0.5%時(shí)買(mǎi)入賣(mài)出:查看尾盤(pán)價(jià)格,如果有持股部分漲幅超過(guò)2%時(shí)則賣(mài)出'''import pandas# 股票信息,來(lái)自同花順歷史記錄from pandas import DataFramedata = pandas.DataFrame(pandas.read_excel('../1.xlsx'))# print(data)# 用于記錄持倉(cāng)信息stock_data = pandas.DataFrame(columns=['時(shí)間', '漲幅', '購(gòu)買(mǎi)價(jià)格', '購(gòu)買(mǎi)數(shù)量', '購(gòu)買(mǎi)金額'])# 交易信息trade_data = pandas.DataFrame(columns=['購(gòu)買(mǎi)時(shí)間', '購(gòu)買(mǎi)價(jià)格', '購(gòu)買(mǎi)數(shù)量', '購(gòu)買(mǎi)金額', '賣(mài)出時(shí)間', '賣(mài)出價(jià)格', '賣(mài)出數(shù)量', '賣(mài)出金額', '做T盈利'])def buy_Stock(date: str = None, amount: float = None, price: float = None, num: int = None) -> DataFrame: '''買(mǎi)入股票''' money = round((price * num + price * num * 0.00025), 2) # 買(mǎi)入ETF金額,萬(wàn)2.5手續(xù)費(fèi) add_data = pandas.DataFrame({'時(shí)間': date, '漲幅': amount, '購(gòu)買(mǎi)價(jià)格': price, '購(gòu)買(mǎi)數(shù)量': num, '購(gòu)買(mǎi)金額': money}, index=[1]) # 將買(mǎi)入的數(shù)據(jù)添加到末尾 new_data = stock_data.append(add_data, ignore_index=True) return new_datadef sell_Stock(date=None, date1=None, price=None, price1=None, money=None, num=None, num1=None): '''賣(mài)出股票 date:買(mǎi)入時(shí)間 date1:賣(mài)出時(shí)間 price 購(gòu)買(mǎi)價(jià)格 price1 賣(mài)出價(jià)格 money: 購(gòu)買(mǎi)金額 money1 購(gòu)買(mǎi)金額 num買(mǎi)入數(shù)量 num1 賣(mài)出數(shù)量 ''' money1 = round((price1 * num1 - price1 * num1 * 0.00025), 2) # 賣(mài)出,減去萬(wàn)2.5的手續(xù)費(fèi) # 做T盈利金額 profit = money1 - money add_data = pandas.DataFrame({'購(gòu)買(mǎi)時(shí)間': date, '購(gòu)買(mǎi)價(jià)格': price, '購(gòu)買(mǎi)數(shù)量': num, '購(gòu)買(mǎi)金額': money, '賣(mài)出時(shí)間': date1, '賣(mài)出價(jià)格': price1, '賣(mài)出數(shù)量': num1, '賣(mài)出金額': money1, '做T盈利': profit}, index=[1]) # 將數(shù)據(jù)添加到交易數(shù)據(jù)信息表中 new_data = trade_data.append(add_data, ignore_index=True) # 獲取賣(mài)出的數(shù)據(jù) return new_datadef tactics(): ''' 交易策略:股票漲幅小于-0.05時(shí),買(mǎi)入 持股部分漲幅大于0.02時(shí),賣(mài)出盈利部分的持股 ''' global stock_data global trade_data # 循環(huán)股票數(shù)據(jù) for row in range(data.index.max()): # 當(dāng)股票漲幅小于-0.05時(shí) if data.loc[row, '漲幅'] < -0.005: # 調(diào)用全局變量是需要用關(guān)鍵字global重新再次聲明一次 # 買(mǎi)入股票,并得到持股數(shù)據(jù) stock_data = buy_Stock(date=data.loc[row, '時(shí)間'], amount=data.loc[row, '漲幅'], price=data.loc[row, '收盤(pán)'], num=1000) else: # 循環(huán)查看買(mǎi)入的價(jià)格,如果收盤(pán)價(jià)比買(mǎi)入價(jià)格高百分之2以上,則賣(mài)出部分持股 # 循環(huán)持股數(shù)據(jù),倒序循環(huán) for i in range(len(stock_data) - 1, -1, -1): # 賣(mài)出價(jià)格 = 購(gòu)買(mǎi)價(jià)格+ 購(gòu)買(mǎi)價(jià)格*0.02 round 保留小數(shù)位 sell_pice = stock_data.loc[i, '購(gòu)買(mǎi)價(jià)格'] + stock_data.loc[i, '購(gòu)買(mǎi)價(jià)格'] * 0.02 # 賣(mài)出價(jià)格,大于當(dāng)天收盤(pán)價(jià)格 if sell_pice < data.loc[row, '收盤(pán)']: trade_data = sell_Stock(date=stock_data.loc[i, '時(shí)間'], date1=data.loc[row, '時(shí)間'], price=stock_data.loc[i, '購(gòu)買(mǎi)價(jià)格'], price1=data.loc[row, '收盤(pán)'], money=stock_data.loc[i, '購(gòu)買(mǎi)金額'], num=stock_data.loc[i, '購(gòu)買(mǎi)數(shù)量'], num1=stock_data.loc[i, '購(gòu)買(mǎi)數(shù)量']) stock_data = stock_data.drop(index=i) # 刪除數(shù)據(jù)后需要重建索引 stock_data.index = range(len(stock_data))tactics()# 計(jì)算總和,購(gòu)買(mǎi)金額總和money_sum = stock_data['購(gòu)買(mǎi)金額'].sum()#num_sum = stock_data['購(gòu)買(mǎi)數(shù)量'].sum()stock_data = stock_data.append({'購(gòu)買(mǎi)金額': money_sum, '購(gòu)買(mǎi)數(shù)量': num_sum}, ignore_index=True)print(stock_data)trade_data.loc[trade_data.index.max() + 1, '做T盈利'] = trade_data['做T盈利'].sum()print(trade_data)# 將持股信息保存到Excel表格中stock_data.to_excel('持股數(shù)據(jù).xlsx')trade_data.to_excel('交易股票數(shù)據(jù).xlsx')結(jié)論: 手中持倉(cāng)總額度:40233.04元,持倉(cāng)數(shù)量:50000股 持倉(cāng)市值: 23750元 等于: 2022-5-23收盤(pán)價(jià) 0.475乘以持倉(cāng)數(shù)量50000 持倉(cāng)虧損: 16483.04元 = 40233.04元 - 23750元 做T收益:1766.95元 共賣(mài)出72次 實(shí)際虧損:14716.09元 =16483.04元-1766.95元 虧損率 -36% 做個(gè)假設(shè),假如不算市值虧損的話(huà),只算投入與做T收益,因?yàn)楣墒杏袧q有跌,跌的遲早會(huì)漲回來(lái)的。只是時(shí)間問(wèn)題,這里只算做T收益的比例。它的收益就是: 1766.95元除以 40233.04元 百分之4.3的收益,一年零一個(gè)多月,這個(gè)收益也不是很高 況且賬面價(jià)值是虧損的,99.99%的散戶(hù)可能承受不了這個(gè)數(shù)據(jù) 恒生醫(yī)療ETF單邊下跌,沒(méi)有像樣的反彈,能做T次數(shù)太少。 ![]() 持倉(cāng)表的部分交易數(shù)據(jù) ![]() 交易做T的部分交易數(shù)據(jù) |
|
|
來(lái)自: 追夢(mèng)文庫(kù) > 《量化交易系統(tǒng)》