『壹』 第1章 為什麼將Python用於金融
python是一門高級的編程語言,廣泛應用在各種領域之中,同時也是人工智慧領域首選的語言。
為什麼將python用於金融?因為Python的語法很容易實現金融演算法和數學計算,可以將數學語句轉化成python代碼,沒有任何語言能像Python這樣適用於數學。
『貳』 hdf5和mysql比較怎麼樣
奧圖碼HDF537ST總結如下:
優點:
1、投影很清晰,1080P以上的片源都有很不錯的效果,使用電視盒子播放的效果也很不錯;
2、使用方便,不用很復雜的調整,多個活動支點調節非常實用;
3、短焦省心,投150寸畫面輕松搞定;
4、相對來說,價格實惠,性價比可以。
缺點:
1、防塵蓋沒有內嵌一體式方便;
附拉窗簾和不拉窗簾的效果照片。
『叄』 Quant 應該學習哪些 Python 知識
1. 如果還需要Deep Learning方面的東西的話,可以考慮Theano或者Keras。這兩個東西可能會用在分析新聞數據方面。不過不是很推薦使用這類方法去做量化模型,因為計算量實在是太大,成本很高。
2. 交易框架方面,除了vn.py,還推薦PyAlgoTrade框架,github上可以搜到。私以為這個框架比vn.py牛逼太多了,畢竟是一個在金融IT領域混跡近20年的老妖的作品,架構設計不是一般的優秀。
3. 國內的話,ricequant是個不錯的選擇,雖然使用的是Java,但是團隊我見過,都是做金融IT出身的,基本上都有7、8年以上經驗,底層功底非常扎實,做事情都很靠譜。現在他們也在考慮把SDK擴展到Python這邊。
4. 國內的行情和交易介面,使用的是自己的協議(比如CTP介面使用的是FTD協議),而不是國際上廣泛使用的FIX協議,並且都不開源。如果需要連接行情,還需要考慮將介面SDK為python封裝一下。(修改:評論中有人提到很多券商也開放了FIX介面,不過似乎是在內網使用)
5. 有人談到資料庫了,這里我也說一下,對於高頻tick級別的數據,其量級可以達到每天TB級別,普通的關系資料庫是扛不住的。如果試圖使用傳統的關系資料庫,比如Oracle之類的可以省省了。對付這種級別的數據,採用文件系統+內存索引會更好。不過這種場景,一般也就是機構裡面能碰到了,個人quant可以不用考慮。
『肆』 如何在Python中用LSTM網路進行時間序列預測
時間序列模型
時間序列預測分析就是利用過去一段時間內某事件時間的特徵來預測未來一段時間內該事件的特徵。這是一類相對比較復雜的預測建模問題,和回歸分析模型的預測不同,時間序列模型是依賴於事件發生的先後順序的,同樣大小的值改變順序後輸入模型產生的結果是不同的。
舉個栗子:根據過去兩年某股票的每天的股價數據推測之後一周的股價變化;根據過去2年某店鋪每周想消費人數預測下周來店消費的人數等等
RNN 和 LSTM 模型
時間序列模型最常用最強大的的工具就是遞歸神經網路(recurrent neural network, RNN)。相比與普通神經網路的各計算結果之間相互獨立的特點,RNN的每一次隱含層的計算結果都與當前輸入以及上一次的隱含層結果相關。通過這種方法,RNN的計算結果便具備了記憶之前幾次結果的特點。
典型的RNN網路結構如下:
4. 模型訓練和結果預測
將上述數據集按4:1的比例隨機拆分為訓練集和驗證集,這是為了防止過度擬合。訓練模型。然後將數據的X列作為參數導入模型便可得到預測值,與實際的Y值相比便可得到該模型的優劣。
實現代碼
時間間隔序列格式化成所需的訓練集格式
import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back): """ :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """ dataX, dataY = [], [] for i in range(len(dataset) - look_back): dataX.append(dataset[i:i+look_back]) dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)df = pd.read_csv("path-to-your-time-interval-file") dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length這里的輸入數據來源是csv文件,如果輸入數據是來自資料庫的話可以參考這里
LSTM網路結構搭建
import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork(): def __init__(self, **kwargs): """ :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """ self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY): """ :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """ print "Training model is LSTM network!" input_dim = trainX[1].shape[1] output_dim = trainY.shape[1] # one-hot label # print predefined parameters of current model: model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting model.add(LSTM(output_dim=self.output_dim, input_dim=input_dim, activation=self.activation_lstm, dropout_U=self.drop_out, return_sequences=True)) for i in range(self.lstm_layer-2): model.add(LSTM(output_dim=self.output_dim, input_dim=self.output_dim, activation=self.activation_lstm, dropout_U=self.drop_out, return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer model.add(LSTM(output_dim=self.output_dim, input_dim=self.output_dim, activation=self.activation_lstm, dropout_U=self.drop_out)) for i in range(self.dense_layer-1): model.add(Dense(output_dim=self.output_dim, activation=self.activation_last)) model.add(Dense(output_dim=output_dim, input_dim=self.output_dim, activation=self.activation_last)) # configure the learning process model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file model_json = model.to_json() with open(model_path, "w") as json_file: json_file.write(model_json) # store model weights to hdf5 file if model_weight_path: if os.path.exists(model_weight_path): os.remove(model_weight_path) model.save_weights(model_weight_path) # eg: model_weight.h5 return model這里寫的只涉及LSTM網路的結構搭建,至於如何把數據處理規范化成網路所需的結構以及把模型預測結果與實際值比較統計的可視化,就需要根據實際情況做調整了。
『伍』 求助,Matlab的hdf5read這個命令的具體用法
helphdf5read
.
hdf5readisnotrecommended.UseH5READinstead.
.Ifthe
nameofthedatasetisknown,thenhdf5readwillsearchthefile
forthedata.Otherwise,useHDF5INFOtoobtainastructure
.Thefieldsofthestructure
containedinthefile.
.Theseoptionsare
describedindetailbelow.
DATA=hdf5read(FILENAME,DATASETNAME)returnsinthevariableDATA
.
DATA=hdf5read(FILENAME,LOCATION,ATTRIBUTENAME)returnsinthe
.Location
canbeeitheradatasetoragroup.
DATA=hdf5read(HINFO)
.HINFOisa
(seeexample).
[DATA,ATTR]=hdf5read(...,'ReadAttributes',BOOL)returnsthe
.Bydefault,BOOLis
false.
[...]=hdf5read(...,'V71Dimensions',BOOL)specifieswhetherto
changethemajorityofdatasets.IfBOOListrue,thefirsttwo
.Thisbehaviormaynot
,
(MATLAB7.1
[R14SP3]andearlier).WhenBOOLisfalse(thedefault),thedata
thefile.
dimensioninthefile.
.Itisstronglyrecommended
thatyouusethelow-,compound,
orvariablelengthdatasets.Toreadasubsetofadataset,youmust
usethelow-levelinterface.
Example:
%.
info=hdf5info('example.h5');
dset=hdf5read(info.GroupHierarchy.Groups(2).Datasets(1));
Pleasereadthefilehdf5right.txtformoreinformation.
Seealsoh5read,h5readatt,hdf5,H5D.read.
hdf5read的參考頁