主頁 >  其他 > 22年美賽c題-交易策略

22年美賽c題-交易策略

2022-02-26 09:18:45 其他

目錄

題目:

前言

資料預處理:

模型假設

第一問

總體思路

預測模型

評價指標1

評價指標2

評價指標3

層次分析法(AHP)

交易模型

第二問

第三問

模型的不足


題目:

開發一個模型,該模型僅基于當天的價格資料提供最佳的每日交易策略,使用您的模型和策略,在 2021 年 9 月 10 日,最初的 1000 美元投資價值多少?

提供證據證明您的模型提供了最佳策略,

確定策略對交易成本的敏感程度,交易成本如何影響策略和結果?

在最多兩頁的備忘錄中將您的策略、模型和結果傳達給交易者,

前言

前幾天打美賽,我負責題目的資料處理,第一問預測模型和交易模型的建立,編碼,論文,以及第三問的交易成本靈敏度分析部分的編碼,論文,這里給大家分享一下自己的思路,

資料預處理:

根據已有的資料,我們發現有些日期格式并不正確,如2001/09/16,正確格式應該為1/09/16,但我們發現這種不正確的格式并不會影響日期的順序,我們觀察到,位元幣的資料是涵蓋了五年所有的日期的,而金價并非如此,金價在下一個交易日來臨之前價格保持原價,由此,我們對金價表單的日期,做出每一天的金價表格(見”篩選后的資料.xlsx“),方便我們之后每一天做決策,

在具體資料的處理程序中,一開始我打算直接用串列的分割字串功能,以”/“為分割得到幾個字串,將第一個字串轉化成int型,判斷它是不是四位數,如果是的話,就接著判斷他是否大于2009,因為如果大于,我們就要取這個20xx的后兩位,否則取后一位,

但在實際的處理程序中,我發現類似2001/09/16這樣的格式,用python讀取后的字串并非’/'分割的字串,而是類似”2001-09-16“的格式,這可能是因為excel把他當成正常格式的日期來保存了, 為了解決這個問題,我在excel中使用了text()函式將原先的日期格式轉化成字串格式,得到了新的一列,之后就是使用上文所述的方法讀取每一位數字,

在讀取數字之后我們就得到了每個交易日的年,月,日的資料,呼叫python內置的datetime()函式,得到了每一個交易日的真實日期,再直接把相鄰的兩個交易日日期相減,這樣就得到了我們當前金價保持的天數n,我們讓當前日期后n天保持當前金價即可,得出五年中每一天的黃金價格

但在第一次處理后,我發現我的excel中存盤了7000個數,這明顯是不正確的,我推測是有些資料出了問題,有些值重復順延了很多次,之后我使用plot(),繪制了每個交易日的順延日期,發現是在19,29這個地方有大幅跳動,打開excel表格后發現我的推測是正確的,是這塊的值出現了四五千此,洗掉多余的值后,得到1827個數,正好對應了五年的每一天,

雖然我找到了出問題的資料,但資料為什么出問題我還不是很清楚,發現的大佬可以在評論區指點,

下面是代碼模板,我后期有一定除錯,直接跑應該跑不出來,這里理解思路即可

import datetime
import numpy as np
import math
import pandas as pd
import numpy as np
import xlwt
import matplotlib.pyplot as plt


df=pd.read_excel("E://桌面//LBMA-GOLD.xlsm")

book = xlwt.Workbook(encoding='utf-8',style_compression=0)

sheet = book.add_sheet('lbma-gold',cell_overwrite_ok=True)

value,data=[],[]
for i in range(1254):
    data.append(df.values[i][2])
    value.append(df.values[i][1])


#print(str(data[0]).split('/'))
#1253

price=[]
for i in range(125):
    ans=str(data[i]).split('/')
    #print(ans)
    str1='null'
    if len(ans[0])==4:
        if int(ans[0])>2009:
            str1=ans[0][-2:]
        else:
            str1=ans[0][-1:]
            #print(str1)
    else:
        str1=ans[0]
        #print(str1)

    str2=ans[1]
    
    str3=ans[2]

    num1,num2,num3=int("20"+str3),int(str1),int(str2)
    d1 = datetime.datetime(num1,num2,num3)# 第一個日期


    ans=str(data[i+1]).split('/')
    #print(ans)
    str1='null'
    if len(ans[0])==4:
        if int(ans[0])>2009:
            str1=ans[0][-2:]
        else:
            str1=ans[0][-1:]
            #print(str1)
    else:
        str1=ans[0]
        #print(str1)

    str2=ans[1]
    
    str3=ans[2]

    num1,num2,num3=int("20"+str3),int(str1),int(str2)
    d2 = datetime.datetime(num1,num2,num3)


    interval = d2 - d1

    #price.append(interval.days)
    #print(interval.days) 
    for j in range(interval.days):
        price.append(value[i])
for i in range(len(price)):
    sheet.write(i,0,price[i])

savepath = 'E:/桌面/篩選后的資料.xlsx'
book.save(savepath)

模型假設

第一問:

假設1:為了合理的預測出股價未來的走勢之后再進行交易,我們假設觀察者觀測十五天金價和位元幣的的價格變化,再做投資,

假設2:為了防止本金全部虧空,我們假設交易的程序中每次交易的金額不能超過初始金額

第三問:

假設:通過我們第一問的模型求解,我們發現單筆交易金額越接近初始值,最后的收益就會越好,所以投資者傾向于單筆投資額接近于初始金額越好,對于初始金額的確定,由于第三問是分析不同傭金下,對交易結果和策略的影響,所以我們不考慮金子和位元幣的初始值的分配關系,且由第一問可知,開始金額越大整體收益越好,由以上,我們假設位元幣和金子的初始金額為1000,單次交易為1000元,

第一問

總體思路

第一問中我們需要考慮兩個模型,一個是預測模型,一個是交易模型,預測模型預測了未來股票的走勢,判斷了我們交易的買點和賣點,交易模型則明確了我們以何種策略進行交易,

在預測模型中,我們采用層次分析法,設定了三個指標,RSI, MACD,以及灰色預測法對未來趨勢的判定,計算得出當日交易指標的總分,判斷總分sum是否滿足買入賣出標準,不滿足則觀望,滿足則進入交易模型,模擬交易,

我們的交易策略是,如果預測模型預測到商品價格上漲,則買入的值為a元的貨物,對a做靈敏度分析,確定買入多少能實作我們最終利潤的最大化,如果預測模型預測到商品價格大跌,我們賣出全部的存貨,以避免損失,值得注意的一點是,我們在買入時,要將買到的貨物存到一個變數中,且在總資金中減去購買貨物用到的錢,在賣出時,當前的貨物要乘以此時的單價,加上我們現有的現金,

需要考慮的是題目開始要求我們黃金的交易傭金是1%,位元幣是2%,且黃金只有在開盤日交易,位元幣可以每天交易,這點體現在我們交易模型中,是否交易的判斷準則中,

預測模型

評價指標1

MACD:

MACD(Moving Average Convergence and Divergence) 是Geral Appel 于1979年提出的,利用收盤價的短期(常用為12日)指數移動平均線與長期(常用為26日)指數移動平均線之間的聚合與分離狀況,對買進、賣出時機作出研判的技術指標

上面是關于macd的介紹,是要寫在論文當中的,但在我們實際的編碼程序中,我們只要找到macd的演算法,計算出每一天的macd的值,如果macd穿過零點,如果導數為負,則賦權-5,給出強烈的賣出信號,導數為正,則賦權5給出強烈的買入信號,

有關macd的具體演算法,感興趣的同學可以去網上自行搜索

下面是代碼:

import pandas as pd
import numpy as np
import datetime
import time
#獲取資料
df=pd.read_csv('E:/桌面/美賽代碼/macd.csv',encoding='gbk')

#df.columns=['date','code','name','close','high','low','open','preclose',
#'change','change_per','volume','amt']

#df=df[['date','open','high','low','close','volume','amt']]
#print(df.head())
print(df.iloc[0,3])
def get_EMA(df,N):
    for i in range(len(df)):
        if i==0:
            df.iloc[i,12]=df.iloc[i,3]
#            df.ix[i,'ema']=0
        if i>0:
            df.iloc[i,12]=(2*df.iloc[i,3]+(N-1)*df.iloc[i-1,12])/(N+1)
    ema=list(df['ema'])
    return ema
 
def get_MACD(df,short=12,long=26,M=9):
    a=get_EMA(df,short)
    b=get_EMA(df,long)
    df['diff']=pd.Series(a)-pd.Series(b)
    #print(df['diff'])
    for i in range(len(df)):
        if i==0:
            df.iloc[i,14]=df.iloc[i,13]
        if i>0:
            df.iloc[i,14]=((M-1)*df.iloc[i-1,14]+2*df.iloc[i,13])/(M+1)
    df['macd']=2*(df['diff']-df['dea'])
    return df
get_MACD(df,12,26,9)

print(df)
with pd.ExcelWriter('macd_gold.xlsx') as writer:
    df.to_excel(writer, 'df1')

評價指標2

建立RSI指標:

RSI

市場特征

投資操作

80—100

極強

賣出

50—80

觀望

20—50

觀望

0—20

極弱

買入

計算方法:

RS(相對強度)=N日內收盤價漲數和之均值÷N日內收盤價跌數和之均值

RSI(相對強弱指標)=100-100÷(1+RS)

解釋:

RSI的計算公式實際上就是反映了某一階段價格上漲所產生的波動占總的波動的百分比率,百分比越大,強勢越明顯;百分比越小,弱勢越明顯,

(1)相對強弱指數能顯示市場超賣和超買,預期價格將見頂回軟或見底回升等,但RSI只能作為一個警告訊號,并不意味著市勢必然朝這個方向發展,尤其在市場月烈震蕩時,趕賣還有超賣,超買還有超買,這時須參考其他指標綜合分析,不能單獨依賴RSI的訊號而作出買賣決定,

(2)背離走勢的訊號通常者都是事后歷史,而且有背離走勢發生之后,行情并無反轉的現象,有時背離一,二次才真正反轉,因此這方面研判須不斷分析歷史資料以提高經驗,

(3)在牛皮行情時RSl徘徊于40-60之間,雖有時突破阻力線和壓力線,但價位無實際變化,

(4)更適用小時線以上的行情,更利于判斷中長期的趨勢,同時RS拼并不能給出明確說明走勢的幅度,只能作為輔助工具并不適用直接來做交易指導,在KSI中所畫的趨勢線,由于S有預先示警的作用,所以第一次的趨勢線突破并不能提供展的買賣時機,但在突破趨勢線的后續的走勢中所畫趨勢線具有的效用會增強(通常在再次接按近所畫趨勢線時,可以有較強的支撐,阻力作用)

如果rsi判斷買入,我們就給這項賦權為5,如果賣出則賦權-5

代碼:

import numpy as np
import math
import pandas as pd
import numpy as np
import xlwt
import matplotlib.pyplot as plt
#相對強弱指標RSI
#計算公式:
#<1> N日RSI =A/(A+B)×100
#<2> A=N日內收盤漲幅之和的平均 A = (前一日A*(n-1) + 當日漲值)/n
#<3>B=N日內收盤跌幅之和的平均 B = (前一日B*(n-1) + 當日跌值)/n (跌值取正值:如下跌-4.32,跌值=4.32)
#<4> 0<=RSI<=100
# 輸入:
#     close_k: 收盤價list
#     periods:周期
#從第periods+1個周期開始預測
def RSI(close_k,periods):
    length = len(close_k)

    ans = [np.nan]*length
    A = 0
    B = 0

    sum1,sum2=0,0
    for j in range(periods):
        up = 0
        down = 0
        if close_k[j]>=close_k[j-1]:
            up = close_k[j]-close_k[j-1]
            down = 0
        else:
            up=0
            down = close_k[j-1]-close_k[j]
        sum1+=up
        sum2+=down

    A=sum1/periods
    B=sum2/periods
        
    for j in range(periods,length):
        up = 0
        down = 0
        if close_k[j]>=close_k[j-1]:
            up = close_k[j]-close_k[j-1]
            down = 0
        else:
            up=0
            down = close_k[j-1]-close_k[j]
        
        #計算N日內增長的均值,A為增加值的和的均值,B為減少值的和的均值
        A = (A*(periods-1)+up)/periods
        B = (B*(periods-1)+down)/periods
        if A + B!=0:
            ans[j] = 100 * A / (A + B)
    return ans


if __name__=='__main__':
    

    df=pd.read_excel("E://桌面//篩選后的資料.xlsx")

    book = xlwt.Workbook(encoding='utf-8',style_compression=0)

    sheet = book.add_sheet('lbma-gold',cell_overwrite_ok=True)

    data=[]
    for i in range(1825):
        data.append(df.values[i][1])    

    ans=RSI(data,6)
    for i in range(1825):
        sheet.write(i,0,ans[i])

    savepath = 'E:/桌面/rsi_mkpur.xlsx'
    book.save(savepath)
    
    #print(RSI(date,12))
    #print(len(RSI(date1,12)))

評價指標3

預測模型預測未來連續上漲或者下降的天數:

我們使用灰色預測法,以十個樣本點為一組進行訓練,得到兩種貨幣的下一個預測值,得到了未來十天的預測值,注意此時這十天的真實的價格資料我們是已經拿到了的,那么我們就將這十天的資料重新進入灰色預測模型訓練,得到下一個十天周期的預測值,

我們在編程實作灰色預測法進行實驗的時候,需要對預測值進行檢驗,計算出P,C后進行等級判斷:

符合標準后則回傳給我們預測值,

代碼:

import numpy as np
import math
import pandas as pd
import numpy as np
import xlwt
import matplotlib.pyplot as plt #畫圖的庫

def predict(history_data):

    n = len(history_data)
    X0 = np.array(history_data)
    #累加生成
    history_data_agg = [sum(history_data[0:i+1]) for i in range(n)]
    X1 = np.array(history_data_agg)

    #計算資料矩陣B和資料向量Y
    B = np.zeros([n-1,2])
    Y = np.zeros([n-1,1])
    for i in range(0,n-1):
        B[i][0] = -0.5*(X1[i] + X1[i+1])
        B[i][1] = 1
        Y[i][0] = X0[i+1]

    #計算GM(1,1)微分方程的引數a和u
    #A = np.zeros([2,1])
    A = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
    a = A[0][0]
    u = A[1][0]

    #建立灰色預測模型
    XX0 = np.zeros(n)
    XX0[0] = X0[0]
    for i in range(1,n):
        XX0[i] = (X0[0] - u/a)*(1-math.exp(a))*math.exp(-a*(i));


    #模型精度的后驗差檢驗
    e = 0      #求殘差平均值
    for i in range(0,n):
        e += (X0[i] - XX0[i])
    e /= n

    #求歷史資料平均值
    aver = 0;     
    for i in range(0,n):
        aver += X0[i]
    aver /= n

    #求歷史資料方差
    s12 = 0;     
    for i in range(0,n):
        s12 += (X0[i]-aver)**2;
    s12 /= n

    #求殘差方差
    s22 = 0;       
    for i in range(0,n):
        s22 += ((X0[i] - XX0[i]) - e)**2;
    s22 /= n

    #求后驗差比值
    C = s22 / s12   

    #求小誤差概率
    cout = 0
    for i in range(0,n):
        if abs((X0[i] - XX0[i]) - e) < 0.6754*math.sqrt(s12):
            cout = cout+1
        else:
            cout = cout
    P = cout / n

    if (C < 0.5 and P > 0.7):
        #預測精度為一級
        m = 1   #請輸入需要預測的年數
        #print('往后m各年負荷為:')
        f = np.zeros(m)
        for i in range(0,m):
            return (X0[0] - u/a)*(1-math.exp(a))*math.exp(-a*(i+n))
        print(f)
    else:
        print('灰色預測法不適用')

if __name__ == '__main__':
    df=pd.read_excel("E://桌面//美賽代碼//lbma-gold(篩選).xlsx")

    df1=pd.read_excel("E://桌面//美賽代碼//bchain-mkpru(篩選).xlsx")

    data=[]
    for i in range(727):
        data.append(df.values[i][1])

    book = xlwt.Workbook(encoding='utf-8',style_compression=0)

    sheet = book.add_sheet('lbma-gold',cell_overwrite_ok=True)    
    #print(data[726])
    cnt=9
    ans=[]
    history_data=[0]*10
    #print(history_data)

    #過去若干個交易日的資料,從第十個資料開始預測
    for i in range(11,727):
        #更新預測模型的資料
        cnt+=1
        if cnt%10==0:
            temp = data[i-10:i]
            #print(temp)
            for j in range(10):
                history_data[j]=temp[j]
            cnt=0
        #預測資料   
        ans.append(predict(history_data))


    #print(ans)
    for i in range(702):
        sheet.write(i,0,ans[i])
        
    savepath = 'E:/桌面/灰色預測_gold.xlsx'
    book.save(savepath)

    plt.figure()
    
    plt.plot(list(range(len(ans))), ans, color='b')

    plt.plot(list(range(727)), data[:727], color='y')

    plt.show()

經過我們的計算發現,改進后的灰色預測預測模型所得出的預測值與真實值擬合度非常高,如下圖

其實第一問的預測模型僅僅只是使用不斷迭代的灰色預測模型也是可以解決的,只是在第二問中的交易模型中需要改變判斷標準,例如連續上漲或者下降的天數,單次上漲或下降的幅度,但在這里,我只是用它去預測未來時天的漲勢,連續上漲n天則評分為n,下降n天則評分-n,詳情見下面的層次分析法,

層次分析法(AHP)

  1. 構建層次結構模型(論文中不是這樣的,這里是自己畫的):

2.構造判斷矩陣:

我們在這里使用,對三個指標進行分析,由于我們的預測模型擬合度非常高,故我們將其的重要性為最高,其余兩個指標的權重相同,在構建3*3判斷矩陣時將預測模型的的重要性設定為其余二者的3倍,其余都設定為1,

判斷矩陣如下:

經過我們的分析得到如下結果:

RSI

MACD

預測模型

特征向量

權重值

RSI

1

1

0.3333

0.6934

0.2

MACD

1

1

0.3333

0.6934

0.2

灰色預測

3

3

1

2.0801

0.6

特征向量:(0.6934,0.6934,2.0801)的轉置

該判斷矩陣最大特征值為3,CI值為0,RI值為0.525,層次單排序一致性檢驗通過

CR值為0,層次總排序一致性檢驗通過

由圖表可得,RSI,MACD,預測模型的權重分別為0.2,0.2,0.6.

我們先假設一開始投資人黃金和位元幣各分出500元進行投資,對三個指標在(-5,5)內設定不同的打分規則,

RSI:如果RSI>80,則這項為滿分5,如果RSI<20,則這項賦分-5,其余情況為0分

macd:如果為零的話,判斷此時的斜率,斜率大于零,則此項賦值為5,如果斜率小于零則賦值為-5,

灰色預測:我們通過預測未來的十個值進行判斷,未來連續上漲幾次權值就為幾

sum=三個模型的得分相加除以20,用這個值乘以我們每次交易設定的最大值,就是我們買入(大于零)或者賣出(小于零)的值a,

我們先對原始金價和位元幣的資料進行處理,得到這五年中每一天金價和位元幣的rsi,macd,灰色預測模型預測的連續上漲或下跌的值,(見”總數居匯總(AHP)“)

并且計算未來上漲的金額與傭金相比較,如果大于傭金的三倍,則賦值,否則觀望處理,賦值為0,

計算出三個指標的最終得分后,我們使用這個公式計算出ratio:

ratio=(point1*p1+point2*p2+point3*p3)/8

名詞解釋:

1.ratio為價格預測指標,如果tation大于零,則說明有上漲趨勢,小于零則有下降趨勢

2.point1~3為三個指標的分數

3.p1~3為權值

4.”8“我們的模型中分數的最大值即0.2*5+0.2*5+10*0.6

關于這部分的代碼將會在交易模型中給出

交易模型

計算出計算出ratio之后,經過靈敏度檢驗我發現:,當ratio大于0時買入,小于0時賣出,這樣的收益最大,但是這樣一來,我們最終的收益將會非常大,我在解題的時候覺得不時很合理,所以在論文中寫的是這段話:

”對于位元幣,買入賣出邊界為0.3最好,即如果ratio>0.3或者ratio<-0.3,則進行買入,賣出操作,否則不處理,對于金價,經過靈敏度分析,其最優邊界,買入邊界為0.25,賣出邊界為-0.3“

其實作在想想,當扯訓是過于謹慎了,按照位元幣的漲勢來說如果我們可以準確的判斷出買入賣出的點,那么我們確實可以實作極大的收益,而我們的預測模型準確性很高,所以幾百萬的收益也是合乎常理的,

而且在買入時,我還在假設中設定了上限,即不超過初始金額,相信如果把這一限制改成本金的70%,甚至100%,將會得到更加巨大的收益,這點我也寫進了模型的改進與缺點中,

我們在買入操作時,我們一方面要減去我們花的錢,另一方面要重新設定一個變數存盤我們買下的貨物,由于題目中給定的資料為:盎司/美元,枚/美元,故我們采用公式:

sum+=vast/values

計算存盤的貨物,其中vast為我們單次交易的金額

在執行賣出操作時,執行預判到價格下降則全部賣出的策略,使用公式:

earn=sum2*values(1-cost_m)-sum1*(1+cost_m)

其中cost_m為我們的損耗率,earn為我們賺的錢,我們將他加在我們最后的end值上,此輪投資結束,

邊界確定:當我們進行到最后一個交易日時,將所有的資產美元化,得出我們在2021年10月9日的最終收益,同時要注意一點,黃金只有在交易日可以交易,這點反映在我們的代碼中,作為判斷是否買入的條件出現,

接著,我們對vast做靈敏度分析,發現vast約接近初始金額,得到的收益越大,我們也對初始金額做了靈敏度分析,發現對于位元幣和金子來說初始金額越大,最終的收益率越高,

經過我們對初始金額和單次交易量二者的的分析,我們發現投資位元幣的收益要遠遠大于投資黃金,1000美元的初始資金如果全投位元幣的話可以得到147545,而黃金僅僅為3086,通過計算1000美元不同的分配下位元幣和黃金的總收益,我們發現最終的交易策略是1000美元全部用來交易位元幣,單次交易金額為1000元,最后的的收益率為1276454%,雖然這個收益率是極大的,但卻十分符合位元幣價格的趨勢和市場發展,側面體現了預測模型和決策模型的正確性,有關更多正確性的的證明,我們會在第二問中講到,

注:在我實際運行程式時,會發現當單次交易金額大于本金時,程式也能跑通,應該是某個邊界條件設定的失誤,大佬發現的話可以指出來,

代碼

import numpy as np
import math
import pandas as pd
import numpy as np
import xlwt
import matplotlib.pyplot as plt #畫圖的庫

mkpru=pd.read_excel("E://桌面//美賽代碼//總資料匯總.xlsx",sheet_name="gold")

start=1000 #初始投資額
end=start #結束時的投資額

a = 0.3 #每次投資的最大值占總投資額的百分比

cost_m=0.15 #設定傭金

cost_g=[0.002,0.005,0.007,0.01,0.02,0.03,0.05,0.06,0.08,0.09,0.1,0.2,0.3]

p1,p2,p3=0.2,0.2,0.6 #三項指標的權重,順序為macd,rsi,預測模型

sum1=0 #投出去的美元
sum2=0 #手中持有的位元幣
vast=1000
#vast=100 #每次購買的值

col,row,li=[],[],[]

for n in range(len(cost_g)):
    cnt=0 #計算拒絕的次數
    cnt1=0#計算買入的次數
    cnt2=0#計算賣出的次數

    for i in range(1,1813):      
        #計算macd的得分
        if  mkpru.values[i-1][0]<0 and mkpru.values[i][0]>0:
            point1=5
        elif mkpru.values[i-1][0]>0 and mkpru.values[i][0]<0:
            point1=-5
        else:
            point1=0

        #計算rsi的得分
        if mkpru.values[i][1]>80:
            point2=5
        elif mkpru.values[i][1]<20:
            point2=-5
        else:
            point2=0

        #計算灰色預測的得分
        point3=0
        for j in range(10):
            if mkpru.values[i+j][2]<mkpru.values[i+j+1][2]:
                point3+=1
            else:
                break
        
        for j in range(10):
            if mkpru.values[i+j][2]>mkpru.values[i+j+1][2]:
                point3-=1
            else:
                break

        #預測收益,如果收益率大于傭金的三倍,執行交易,否則不執行
        if mkpru.values[i+1][0]/mkpru.values[i][0]-1 < 3*cost_g[n]:
            cnt+=1
            point1,point2,point3=0,0,0
        
        ratio=(point1*p1+point2*p2+point3*p3)/8

        if ratio>0.1 and end-vast>=0 and mkpru.values[i][3]!=mkpru.values[i-1][3]:
            cnt1+=1
            end-=vast
            sum1+=vast
            sum2+=vast/mkpru.values[i][3]

        earn=sum2*mkpru.values[i][3]*(1-cost_m)-sum1*(1+cost_g[n])
        if ratio<-0.3 and earn>=0:
            cnt2+=1
            earn=sum2*mkpru.values[i][3]-sum1*(1+cost_g[n])
            end+=earn


    #假設最后一天會賣出
    earn=sum2*mkpru.values[1813][3]*(1-cost_m)-sum1*(1+cost_g[n])
    end+=earn
    
    print(end," ",cnt," ",cnt1)
    col.append(cnt)
    row.append(end)
    li.append(cnt1)

book = xlwt.Workbook(encoding='utf-8',style_compression=0)

sheet = book.add_sheet('lbma-gold',cell_overwrite_ok=True)  

for i in range(10):
    sheet.write(i,0,row[i])
    sheet.write(i,1,col[i])
    sheet.write(i,2,li[i])

savepath = 'E:/桌面/200.xlsx'
book.save(savepath)

第二問

第二問是我的隊友負責的,通過計算均線,得出黃金和位元幣的布林帶,統計黃金和位元幣不在布林帶的范圍的次數,最后得出位元幣的投資風險比黃金低,是更優質的投資選擇,證明了第一問中全部投資位元幣的策略的正確性,他在此問中沒有用到編程,但我想如果用python會比單純使用excel簡單,

第三問

交易傭金的靈敏度分析

我們分別對位元幣和黃金的交易傭金進行靈敏度分析,設定:

cost_g=cost_m=[0.002,0.005,0.007,0.01,0.02,0.03,0.05,0.06,0.08,0.09,0.1,0.2,0.3]

注:cost_g為黃金的交易傭金占總交易量的百分比,cost_m為位元幣的交易傭金占總交易量的百分比

由第一問可知,無論是黃金還是位元幣,當二者初始金額為1000,單次交易量為1000時,最終收益最大,我們在這一問中不考慮二者初始值的關系,都設定成1000,單筆交易額設定成1000,即通過不同的交易傭金對最優模型的影響來推斷交易成本如何影響策略和結果,

經過計算,見表”交易傭金的靈敏度分析.Xlsm,黃金的最終收益隨著傭金的升高先升高再小幅度回落,最后再升高,觀望的次數增多,買入的次數變化不大;位元幣的收益存在先下降后上升的程序,其觀望次數也隨著傭金的增加而增加,買入次數保持平穩,

我們看到,交易傭金的變化與最終收益的影響并不相關,其原因是我們觀望的次數增加了,隨著傭金的增加,某些買入的時間點被過濾掉,從而在下一個滿足要求的時間點購買了產品,但是這個時間點決策相對于上一個時間點決策的好壞我們無從得知,而我們的買入次數也幾乎不受影響,

模型的不足

模型有兩方面的不足:

1.首先是上文所說的買進時設定了上限,不能讓每次買入花費的金額大于初始投資額,這是一種非常謹慎的投資策略,但是我們的預測模型預測的非常準確,可以很好的判斷出未來的趨勢,所以可以大膽一點,如果取消這個限制,我們最終的收益應該會更棒

2.單次買入金額的確定,我在開始設定單次金額時曾試圖設定動態調價機制,但嘗試了許久,也未能成功,計算出的值虧本了,加上比賽時間有限,就換用簡單的策略,代替了原先策略,好在取得了不錯的收益,有大佬設計了動態調價模型可以在評論區指點,

具體的代碼和資料可以在csdn資源下載,(注:此壓縮包的思路部分為一開始的思路,未作改動,本文為真實做法)

美賽壓縮包

也可以在百度網盤下載

鏈接: https://pan.baidu.com/s/1nfoJt7uf3ZPXgB3eqE5DfQ?pwd=s7gb

提取碼: s7gb 復制這段內容后打開百度網盤手機App,操作更方便哦

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433252.html

標籤:其他

上一篇:資料湖之Hudi(9):使用Spark向Hudi中插入資料

下一篇:Kafka訊息失敗后無限重復消費現象的排查

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more