海龜交易系統(tǒng)R代碼_第1頁
海龜交易系統(tǒng)R代碼_第2頁
海龜交易系統(tǒng)R代碼_第3頁
海龜交易系統(tǒng)R代碼_第4頁
海龜交易系統(tǒng)R代碼_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、河北穩(wěn)升軟件科技有限公司 量化云網站海龜交易系統(tǒng)R代碼著名的商品投機家理查德·丹尼斯想弄清楚偉大的交易員是天生造就的還是后天培養(yǎng)的。為此,在1983年他招募了13個人,教授給他們期貨交易的基本概念,以及他自己的交易方法和原則。 “學員們被稱為海龜(丹尼斯先生說這項計劃開始時他剛剛從亞洲回來,他解釋了自己向別人說過的話,我們正在成長為交易員,就象在新加坡他們正在成長為海龜一樣)?!焙}敵蔀榻灰资飞献钪膶嶒?,因為在隨后的四年中海龜們取得了年均復利80%的收益。 丹尼斯證明用一套簡單的系統(tǒng)和法則,可以使僅有很少或根本沒有交易經驗的人成為優(yōu)秀的交易員。 當時,海龜們認為應對理查德

2、3;丹尼斯負責,商定甚至在他們議定的10年保密協(xié)定于1993年終止后也不泄露這些法則。但是,有個別海龜在網站上出售海龜交易法則而謀取錢財。兩個原版海龜科蒂斯·費思和阿瑟·馬多克,為了阻止個別海龜對知識產權的偷竊和出售海龜交易法則而賺錢的行為,決定在網站上將海龜交易法則免費公之于眾。我們現(xiàn)在能看到的海龜交易法則,既是由此所得。海龜交易系統(tǒng)是一個完整的交易系統(tǒng),它包括:市場買賣什么頭寸規(guī)模買賣多少入市何時買賣止損何時退出虧損的頭寸離市何時退出贏利的頭寸策略如何買賣R代碼(來自Blotter包)如下:# - 海龜系統(tǒng)  #1 # 載入所需的庫require(q

3、uantmod)require(TTR)require(blotter) # 清理R環(huán)境,如果該demo程序之前運行過try(rm("account.turtles","portfolio.turtles",pos=.blotter),silent=TRUE)try(rm("portfolio","account","N",             

4、0;  "symbol","symbols","ClosePrice","CurrentDate",                "equity","Units","maxUnits","size","Stop","equity",

5、60;               "TxnPrice","initDate","initEq","Posn","verbose"),silent=TRUE)  # 設定初始值initDate="2008-01-01"initEq=100000print("Initializing portfolio and

6、 account structure")# 構建一個帶三只股票的小型組合symbols = c("XLF", "XLP", "XLE")#, "XLY", "XLV", "XLI", "XLB", "XLK", "XLU")currency("USD")for(symbol in symbols)    stock(symbol, currency=&quo

7、t;USD",multiplier=1) #創(chuàng)建函數(shù)保存過程值updateStrat <- function(Portfolio, Symbol, TxnDate,        PosUnitsQty, UnitSize, StopPrice, TxnPrice, TxnN) # 作者 Peter Carl             # 描述:   &

8、#160;   # 添加交易事務相關數(shù)據(jù)到STRATEGY時間序列             # 輸入:       # TxnDate: 以ISO 8106格式的交易日期,例如:'2008-09-01'       # PosUnitsQty: 總交易數(shù)量(股數(shù))     

9、  # StopPrice: 交易完成價格       # TxnPrice: 最后交易價格       # TxnN: 為最后交易結算N             # 輸出:       # 沒有輸出。在本地命名空間修改STRATEGY    

10、60;        # 函數(shù):       # 保存交易事務與計算,返回投資組合       pname=Portfolio       NewTxn = xts(t(c(PosUnitsQty, UnitSize, StopPrice, TxnPrice, TxnN), order.by=as.POSIXct(TxnDate) 

11、60;     colnames(NewTxn) = c('Pos.Units', 'Unit.Size', 'Stop.Price', 'Txn.Price', 'Txn.N')       Portfolio<-getPortfolio(Portfolio)       PortfolioSymbol$strat <- rbind(Portf

12、olioSymbol$strat, NewTxn)       assign( paste("portfolio",pname,sep='.'), Portfolio, envir=.blotter ) getSymbols(symbols, index.class="POSIXct", from=initDate, source="yahoo")# getSymbols缺省為Date索引。在此我們將其改為用POSIXct。# getSymbols(

13、symbols, index.class=c("POSIXt","POSIXct"), from=initDate, source="yahoo") # 創(chuàng)建一個投資組合對象和一個賬戶對象portfolio = "turtles"initPortf(name=portfolio,symbols, initDate=initDate)account = "turtles"initAcct(name=account,portfolios="turtles", initD

14、ate=initDate, initEq=initEq) # 該表保存與策略有關的交易事務相關信息# 將其存放到portfolio對象Portfolio<-getPortfolio(portfolio)for(symbol in symbols)  Portfoliosymbol$strat <- xts( as.matrix(t(c(0,0,0,0,0), order.by=as.POSIXct(initDate) )  colnames(Portfoliosymbol$strat) <- c('Pos.Units', '

15、;Unit.Size', 'Stop.Price', 'Txn.Price', 'Txn.N')# 現(xiàn)在再將其放回所屬處assign( "portfolio.turtles", Portfolio , envir=.blotter )rm("Portfolio") # 構建指標print("Setting up indicators")for(symbol in symbols)    # 系統(tǒng) 1    #&

16、#160;   # 如果最后的突破導致一個獲利交易,就忽略那么20-天突破    #    # 這些值也用于系統(tǒng)2的離場    x=get(symbol)    # 入市 (& System 2 exits)    x$Min20 <- runMin(x,grep('Low',colnames(x), 20)    x$Max20 <- runMax(x,gre

17、p('High',colnames(x),20)     # 離場    x$Min10 <- runMin(x,grep('Low',colnames(x), 10)    x$Max10 <- runMax(x,grep('High',colnames(x),10)     # 系統(tǒng) 2    #    # 總是取55-天突破

18、0;    # 入市    x$Min55 <- runMin(x,grep('Low',colnames(x), 55)    x$Max55 <- runMax(x,grep('High',colnames(x),55)     # 倉位規(guī)模參數(shù)c('High','Low','Close')    x$N <- ATR(x,c(2,3,

19、4), n=20, maType=EMA, wilder=TRUE),'atr'    assign(symbol,x)# 投資組合參數(shù)size = 0.01maxUnits = 4Units=0verbose=TRUE  # 創(chuàng)建交易for( i in 57:NROW(x) ) # 假設所有日期相同  CurrentDate=time(x)i  #print(CurrentDate)  equity = getEndEq(account, CurrentDate)   for(

20、symbol in symbols)    x=get(symbol)    ClosePrice = as.numeric(Cl(xi,)     Posn = getPosQty(Portfolio=portfolio, Symbol=symbol, Date=CurrentDate)    s = tail(getPortfolio(portfolio)symbol$strat,1)      

21、60; Units = as.numeric(s,'Pos.Units')    TxnPrice = as.numeric(s,'Txn.Price')    N = as.numeric(s,'Txn.N')    Stop = as.numeric(s,'Stop.Price')       UnitSize = as.numeric(trunc(size * equity)/

22、(xi-1,'N'*ClosePrice)     # 入市(假設以收盤價填入,因此考慮了滑價)    if( Posn = 0 )       # 初始化多頭倉位      if( as.numeric(Hi(xi-1,) > as.numeric(xi-2,'Max55') )         addTxn(Port

23、folio=portfolio, Symbol=symbol,                TxnDate=CurrentDate, TxnPrice=ClosePrice,                TxnQty = UnitSize , TxnFees=0, verbose=verbose

24、)        N = as.numeric(xi-1,'N')        updateStrat(Portfolio=portfolio, Symbol=symbol,                TxnDate = CurrentDate, PosUnitsQty = 1,

25、0;               UnitSize = UnitSize, StopPrice = (ClosePrice-2*N),                TxnPrice = ClosePrice, TxnN = N)      else 

26、;     # 初始化空頭倉位      if( as.numeric(Lo(xi-1,)  < as.numeric(xi-2,'Min55') )         addTxn(Portfolio=portfolio, Symbol=symbol,             

27、   TxnDate=CurrentDate, TxnPrice=ClosePrice,                TxnQty = -UnitSize , TxnFees=0, verbose=verbose)        N = as.numeric(xi-1,'N')     &#

28、160;  updateStrat(Portfolio=portfolio, Symbol = symbol,                TxnDate = CurrentDate, PosUnitsQty = Units, UnitSize = UnitSize,              &

29、#160; StopPrice = (ClosePrice +2*N), TxnPrice = ClosePrice, TxnN = N)          else    # 離場和止損    if( ( Posn > 0 && ( as.numeric(Lo(xi-1,)  <  as.numeric(xi-2,'Min20') | Lo(xi-1,)  < Stop )

30、) |        ( Posn < 0 && ( as.numeric(Hi(xi-1,) > as.numeric(xi-2,'Max20') | Hi(xi-1,) > Stop ) ) )         addTxn(Portfolio=portfolio, Symbol=symbol, TxnDate=CurrentDate,     

31、0;          TxnPrice=ClosePrice, TxnQty = -Posn , TxnFees=0, verbose=verbose)        N = as.numeric(xi-1,'N')        updateStrat(Portfolio = portfolio, Symbol = symbol, 

32、60;              TxnDate = CurrentDate, PosUnitsQty = 0, UnitSize = UnitSize,                StopPrice = NA, TxnPrice = ClosePrice, TxnN = N)   

33、else    # 加到多頭倉位       if( Posn > 0  && Units < maxUnits && Hi(xi-1,) > ( TxnPrice + N * 0.5 ) )          addTxn(Portfolio=portfolio, Symbol=symbol, TxnDate=CurrentDate,  

34、0;           TxnPrice=ClosePrice, TxnQty = UnitSize , TxnFees=0, verbose=verbose)         N = as.numeric(xi-1,'N')         updateStrat(Portfolio = portfolio, Symb

35、ol = symbol, TxnDate = CurrentDate,              PosUnitsQty = Units+1, UnitSize = UnitSize,              StopPrice = (ClosePrice-2*N), TxnPrice = ClosePrice, TxnN = N)&#

36、160;   else    # 加到空頭倉位       if( Posn < 0 && Units < maxUnits && Lo(xi-1,)  < ( TxnPrice - N * 0.5 ) )          addTxn(Portfolio=portfolio, Symbol=symbol, TxnDate=CurrentDate

37、,              TxnPrice=Cl(xi,), TxnQty = -UnitSize , TxnFees=0, verbose=verbose)         N = as.numeric(xi-1,'N')         updateStrat(Portfolio=po

38、rtfolio, Symbol=symbol, TxnDate = CurrentDate,              PosUnitsQty = Units+1, UnitSize = UnitSize, StopPrice = (ClosePrice+2*N),              TxnPrice = ClosePrice, TxnN = N)    #else

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論