Trăn Tick2ret

��������������һ��

Ӧ���ҵ��ר������

��ְ��ҵȺ

���������������CDA

����һ��ȫ�ѧ������~

这里要注意的一点,现在方差和标准差有两种,一种是除以n的(n为样本总数),一种是除以n-1的(样本总数-1)

一个是针对总体而言的,公式中是除以n;

一个是针对样本而言的,公式中是除以n-1,全称为样本标准差. 分母除以n-1;

际生活中的数据基本都是样本,所以都除以n-1;

通过下面这串收益率

valueList = [-0.010185, 0.011844, -0.00852, -0.01888, 0.001009, 0.005242, 0.019054, -0.030944, 0.013519, -0.029266, 0.002225]

可得,这个股票,有95%的可能,收益率区间在-0. 0419~0. 03375之间。

策略比较简单,使用N只股票构建投资组合,计算每只股票的过去LookBack(参数)日的动量,并作标准化处理作为股票权重,持有Holding(参数)日,其中权重允许为负数,即允许做空股票。简要说来就是做过过去表现强势的股票,做空过去表现弱势的股票。

虽然策略比较简单,但整体的测试流程和框架很明了清晰,对类似策略的回测实现具有参考意义,整体的流程框架为:

数据获取(基于付费或者免费的数据源)——》

数据的时间轴对齐以及缺失数据填充——》

子函数编写:特定回顾期的动量计算并作标准化——》

子函数编写:给定回顾期和持有期,组合的夏普比例计算——》

计算不同回顾期和持有期下组合的夏普比例值——》

进行策略参数分布图形展示

一、Python下的实现测试。

(1)主要用到numpy、pandas、matplotlib等几个包

# -*- mã hóa. utf-8 -*-

"""

SimpleMomentumPortfolioTest

Được tạo vào 2015/05/01

@tác giả. LiYang[faruto]

@tập đoàn. FQuantStudio

@tiếp xúc. farutoliyang@foxmail. com

"""

#%% nhập khẩu

nhập numpy dưới dạng np

nhập gấu trúc dưới dạng pd

gấu trúc nhập khẩu. io. dữ liệu dưới dạng web

nhập matplotlib. pylab dưới dạng plt

từ sê-ri nhập gấu trúc, DataFrame

từ bộ sưu tập nhập defaultdict

(2)数据的获取基于pandas包

#%% Lấy dữ liệu

tên = ['AAPL', 'GOOGL', 'MSFT', 'IBM', 'GS', 'MS', 'BAC', 'C']

def get_px[chứng khoán, bắt đầu, kết thúc]

trả lại web. get_data_yahoo[stock, start, end]['Adj Close']

px = DataFrame[{n. get_px[n, '1/1/2005', '1/1/2015'] cho n trong tên}]

px. kịch bản[]

(3)数据的时间轴对齐以及缺失数据填充

#%% kịch bản

px = px. asfreq['B']. fillna [phương thức = 'pad']

tỷ lệ cược = px. pct_change[]

retcum = [1+rets]. cumprod[]-1

co rút. kịch bản[]

通过上图可以看到在此例下,大概回顾期为25-35日,持有期为60日,会获取较高的夏普比率。

总结

本文给出了一个简化的截面动量组合测试,虽然策略比较简单,但整体的测试流程和框架很明了清晰,对类似策略的回测实现具有参考意义,整体的流程框架为:

数据获取(基于付费或者免费的数据源)——》

数据的时间轴对齐以及缺失数据填充——》

子函数编写:特定回顾期的动量计算并作标准化——》

子函数编写:给定回顾期和持有期,组合的夏普比例计算——》

计算不同回顾期和持有期下组合的夏普比例值——》

进行策略参数分布图形展示

在Python下pandas是个数据处理非常不错的一个包,另外在Python下免费的A股数据可以通过tushare 包(作者Jimmy)获取,tushare 包下载地址:TuShare -财经数据接口包。

在MATLAB下,虽然此例的实现测试稍显臃肿,但也不是非常复杂。在MATLAB下免费的A股数据可以通过FQuantToolBox(作者faruto)获取,FQuantToolBox下载地址:FQuantToolBoxHelpOnLine

Tối ưu hóa danh mục đầu tư là một thành phần quan trọng trong Hộp công cụ tài chính của Matlab. Nó cung cấp cho chúng tôi giải pháp sẵn sàng để sử dụng trong việc tìm kiếm trọng số tối ưu của tài sản mà chúng tôi xem xét để giao dịch dựa trên hiệu suất tài sản lịch sử. Từ quan điểm thực tế, chúng ta có thể đưa nó vào chiến lược giao dịch thuật toán của mình và kiểm tra lại khả năng ứng dụng của nó trong các điều kiện ban đầu khác nhau. Đây là một chủ đề của bài viết sắp tới của tôi. Tuy nhiên, trước khi chúng ta có thể ngắm cảnh từ đỉnh núi, chúng ta cần phải leo núi trước

Trong Matlab, danh mục đầu tư được tạo dưới dạng một đối tượng chuyên dụng cùng tên. Nó không đọc dữ liệu chứng khoán thô. Chúng ta cần phải nuôi con thú đó. Hai thành phần chính đáp ứng đầu vào. véc tơ của lợi nhuận tài sản kỳ vọng và ma trận hiệp phương sai. Matlab giúp chúng tôi ước tính những thời điểm này nhưng trước tiên chúng tôi cần cung cấp dữ liệu nội dung ở dạng có thể tiêu hóa được

Trong bài đăng này, chúng ta sẽ xem cách một người có thể nhanh chóng tải xuống dữ liệu chứng khoán từ Internet dựa trên lựa chọn cổ phiếu của chính mình và xử lý trước chúng để giải bài toán tối ưu hóa danh mục đầu tư trong Matlab

Thiết lập ban đầu cho đối tượng danh mục đầu tư

Giả sử rằng tại bất kỳ thời điểm nào bạn cũng có danh sách cổ phiếu muốn mua của riêng mình. Để đơn giản, giả sử rằng danh sách này chứa các cổ phiếu được giao dịch trên NYSE hoặc NASDAQ. Vì bạn đã rất thích thú với trò chơi này, bây giờ bạn gần như đã sẵn sàng để mua những gì bạn đã ghi trong Danh sách mua sắm của mình. lst. Dưới đây là ví dụ về 10 cổ phiếu công nghệ

AAPL   AOL   BIDU   GOOG   HPQ   IBM   INTC   MSFT   NVDA   TXN

Chúng sẽ cấu thành danh mục đầu tư cổ phiếu của bạn. Vấn đề tối ưu hóa danh mục đầu tư đòi hỏi phải nhìn ngược thời gian về không gian lợi nhuận thu được trong giao dịch của mỗi cổ phiếu. Dựa trên chúng, Proxy trả lại và Proxy rủi ro có thể được tìm thấy

Ma trận trả về $R$ của các tham số $[N-1]\times M$ trong đó $N$ là viết tắt của số lượng giá lịch sử [e. g. có nguồn gốc hàng ngày, hoặc hàng tháng, v.v. ] và $M$ cho số lượng cổ phiếu trong danh mục đầu tư của chúng tôi, được Matlab yêu cầu làm đầu vào. Chúng ta sẽ xem nó hoạt động như thế nào trong bài tiếp theo. Hiện tại, hãy chỉ tập trung vào việc tạo ma trận này

Trong bài viết Tạo danh mục đầu tư chứng khoán dựa trên Dữ liệu Google Finance do Quandl cung cấp, tôi đã thảo luận về Quandl. com với tư cách là nhà cung cấp dữ liệu hấp dẫn cho chứng khoán Mỹ. Ở đây, chúng tôi sẽ làm theo giải pháp này bằng cách sử dụng tài nguyên Quandl để lấy chuỗi giá cổ phiếu cho danh sách mua sắm của chúng tôi. Cuối cùng, chúng tôi nhằm mục đích xây dựng một chức năng, ở đây. QuandlForPortfolio, đó là công việc cho chúng tôi

% Pre-Processing of Asset Price Series for Portfolio Optimization in Matlab
%  [c] 2013, QuantAtRisk.com, by Pawel Lachowicz

clear all; close all; clc;

% Input Parameters
n=1*365;
tickers='ShoppingList.lst';
qcodes='QuandlStockCodeListUS.xlsx';

[X,Y,R,AssetList] = QuandlForPortfolio[n,tickers,qcodes];

Chúng tôi gọi chức năng này với ba tham số đầu vào. Cái đầu tiên, $n$, biểu thị một số ngày theo lịch kể từ hôm nay [đếm ngược] mà chúng tôi muốn truy xuất dữ liệu chứng khoán. Thường thì 365 ngày sẽ tương ứng với khoảng 250$-252 ngày giao dịch. Tham số thứ hai là đường dẫn/tên tệp đến danh sách cổ phiếu của chúng tôi [mong muốn được tính đến trong quy trình tối ưu hóa danh mục đầu tư] trong khi đầu vào cuối cùng xác định đường dẫn/tên tệp đến tệp lưu trữ mã cổ phiếu và Mã giá Quandl liên quan [

Cho thú ăn

Hàm QuandlForPortfolio Matlab là phiên bản mở rộng của giải pháp đã thảo luận trước đó. Nó chứa một quy trình sửa lỗi quan trọng đối với dữ liệu được tìm nạp từ các máy chủ Quandl. Đầu tiên, chúng ta hãy xem xét kỹ hơn về chức năng

% Function assists in fetching Google Finance data from the Quandl.com
%  server for a given list of tickers of stocks traded on NYSE or
%  NASDAQ. Data are retrieved for last 'n' days with daily sampling.
%
% INPUT
%   n       : number of calendar days from 'today' [e.g. 365 would
%             correspond to about 252 business days]
%   tickers : a path/file name of a text file listing tickers
%   qcodes  : a path/file name of Excel workbook [.xlsx] containing a list
%              of tickers and Quandl Price Codes in the format of
%              [Ticker,Stock Name,Price Code,Ratios Code,In Market?]
% OUTPUT
%   X0        : [Nx1] column vector with days
%   Y0        : [NxM] matrix with Close Prices for M stocks
%   R0        : [[N-1]xM] matrix of Retruns
%   AssetList : a list of tickers [cell array]
%
% [c] 2013, QuantAtRisk.com, by Pawel Lachowicz

function [X0,Y0,R0,AssetList0] = QuandlForPortfolio[n,tickers,qcodes]
    fileID = fopen[tickers];
    tmp = textscan[fileID, '%s'];
    fclose[fileID];
    AssetList=tmp{1};  % a list as a cell array

    % Read in the list of tickers and internal Quandl codes
    %
    [~,text,~] = xlsread[qcodes];
    quandlc=text[:,1]; % again, as a list in a cell array
    quandlcode=text[:,3]; % corresponding Quandl's Price Code

    date1=datestr[today-n,'yyyy-mm-dd']; % from
    date2=datestr[today,'yyyy-mm-dd'];   % to

    % Fetch the data from Quandl.com
    %
    QData={};
    for i=1:length[AssetList]
        for j=1:length[quandlc]
            if[strcmp[AssetList{i},quandlc{j}]]
                fprintf['%4.0f %s\n',i,quandlc{j}];
                fts=0;
                [fts,headers]=Quandl.get[quandlcode{j},'type','fints', ...
                   'authcode','x',...
                   'start_date',date1,'end_date',date2,'collapse','daily'];
                QData{i}=fts;
            end
        end
    end

    % Post-Processing of Fetched Data
    %
    % create a list of days across all tickers
    TMP=[];
    for i=1:length[QData]
        tmp=fts2mat[QData{i},1];
        tmp=tmp[:,1];
        TMP=[TMP; tmp];
    end
    ut=unique[TMP];
    % use that list to find these days that are not present
    %  among all data sets
    TMP=[];
    for i=1:length[QData]
        tmp=fts2mat[QData{i},1];
        tmp=tmp[:,1];
        TMP=[TMP; setdiff[ut,tmp]];
    end
    ut=unique[TMP];
    % finally, extract Close Prices from FTS object and store them
    %  in Y0 matrix, plus corresponding days in X0
    X0=[];
    Y0=[]; 
    for i=1:length[QData]
        tmp=fts2mat[QData{i},1];
        cp=[];
        for j=1:size[tmp,1]
            [r,~,~]=find[ut==tmp[j,1]];
            if[isempty[r]]
                cp=[cp; tmp[j,5]]; % column 5 corresponds to Close Price
                if[i

Chủ Đề