本文是直接分享一個交易策略的寫法
會分享這個是因為 這份的寫法考慮到了
"資金配置"和"交易成本" 這是比較貼近實際操作的!!
新手小白 未來也會多加琢磨 較貼近現實的交易方式
就先由這篇來開始吧~
交易買賣的邏輯是這樣的
0.先確認手中沒有持股 (這是一買一賣的操作)
1.每天都觀察前5天的股價 (天指的是有交易的日子)
2.若前5天的趨勢是 漲跌跌跌 則買進 (漲跌指得是和前一天的股價相比)
3.買進後第3天就賣出
4.回到第0步
另外 這邊要注意的是
我們是模擬實際操作的時候
你手上的現金
所以會加很多邏輯來判斷
如果沒錢了~當然就直接破產囉!! (專業一點說法是爆倉)
code如下
import pandas as pd
import numpy as np
## 變數有三個
## cash 一開始的資產(現金)
def tred(cash, BuyRate , stkclose):
commission = 5; #手續費我是設為5
####以下為起始值的設定
Nstock = 0 # 持有張數
KeepDay = 0 # 持有天數
capital =[] # 每天的資產序列
#### 以上為起始值設定完畢
#### 以下開始交易
for ind in np.arange(6 , len(stkclose)-1):
## 賣出策略為買進後三天賣出
## 在for loop 裡
## 先看看 Nstock (持有張數) 是否大於零
if Nstock >0 :
KeepDay += 1 #增加持有天數
if Nstock >0 and KeepDay ==3 : #持有天數為三天 所以進行賣出
cash += stkclose[ind] * Nstock #賣出 拿回現金
cash -= commission #再扣掉手續費
KeepDay = 0 ; Nstock = 0 #賣出後重置持有天數和持有股數
###考慮 爆倉的問題
if cash <=0:
capital.append(0);print('爆倉了')
break
## 買進策略為
## 1.手上沒股票 Nstock ==0
## 2.看最近前 5天交易 的漲跌 第 1天 漲 然後 2,3,4 跌 看到這樣就買進
## 3.例如: 前五天[60,73,72,71,70] => 今天就買
if ind > 6:
last5 = stkclose[ ind-4 : ind+1 ]; #抓近前五天
else:
last5=[0,0,0,0,0]
if Nstock==0 and len(last5)==5 \ #Nstock 為 0 沒持有股票才買
and last5[1] > last5[0] \ #檢查買入條件 漲跌跌跌
and last5[2] <= last5[1] \
and last5[3] <= last5[2] \
and last5[4] <= last5[3] :
cash -= commission # 買進前先扣手續費
buycash = cash * BuyRate # buycash 是投入的資金
cash -= buycash
Nstock += buycash / stkclose[ind] # Nstock 持有張數就是 投入的資金/收盤價了
###考慮 爆倉的問題
if Nstock < 1: #買不起股票
capital.append(0);print('爆倉了')
break
###爆倉 直接跳出 for loop
KeepDay=0
capital.append(cash + (Nstock * stkclose[ind]) ) # 資產是手上的現金+股票價值
# 回傳 每天的資產序列
return capital
好啦~怕文章會太長
今天就純分享這個策略及交易的code 和 解說
大家可以隨意試試
新手小白之後會再談談 要怎麼做模擬回測 和 Rate 要怎麼取
留言列表