本文是直接分享一個交易策略的寫法
會分享這個是因為 這份的寫法考慮到了
"資金配置"和"交易成本"  這是比較貼近實際操作的!!
新手小白 未來也會多加琢磨 較貼近現實的交易方式
就先由這篇來開始吧~
 


交易買賣的邏輯是這樣的
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 要怎麼取

arrow
arrow

    Markjong001 發表在 痞客邦 留言(0) 人氣()