0

私は quanstrat ブロッターなどの Guy Yollin スライドに取り組んでいます。実行しようとしているコードは次のとおりです。

#According to quantstrat lectures 1-3 von Guy Yollin

library(blotter)
library(FinancialInstrument)
source("chart_Posn.R")

currency("USD")
stock("SPY",currency="USD",multiplier=1)
getSymbols('SPY', from='1998-01-01', to='2011-07-31', adjust=T)
SPY=to.monthly(SPY, indexAt='endof')
SPY$SMA10m <- SMA(Cl(SPY), 10)

####################################
# Initialize portfolio and account #
####################################
#Initialize portfolio and account
b.strategy <- "bFaber" #Is only the name for the portfolio strategy
initPortf(b.strategy,'SPY', initDate='1997-12-31')
initAcct(b.strategy,portfolios=b.strategy, initDate='1997-12-31', initEq=1e6)

#######################
# Formating the chart #
#######################
theme<-chart_theme()
theme$col$up.col<-'lightgreen'
theme$col$up.border<-'lightgreen'
theme$col$dn.col<-'pink'
theme$col$dn.border<-'pink'
chart_Series(SPY,theme=theme,name="SPY")
plot(add_SMA(n=10,col=4,lwd=2))

#################
# Trading logic # (buy when monthly price > 10-month SMA, sell when monthly price < 10-month SMA)
#################
for( i in 1:nrow(SPY) ) {
  CurrentDate <- time(SPY)[i]
  ClosePrice <- as.numeric(Cl(SPY[i,]))
  Posn <- getPosQty(b.strategy, Symbol='SPY', Date=CurrentDate)
  if( !is.na(as.numeric(SPY[i,'SMA10m'])) ) {
    if( Posn == 0 ) { # No position, test to go Long
      if( ClosePrice > as.numeric(SPY[i,'SMA10m']) ) {
        # enter long position
        addTxn(b.strategy, Symbol='SPY', TxnDate=CurrentDate,
               TxnPrice=ClosePrice, TxnQty = 1000 , TxnFees=0) }
    } else { # Have a position, so check exit
      if( ClosePrice < as.numeric(SPY[i,'SMA10m']) ) {
        # exit position
        addTxn(b.strategy, Symbol='SPY', TxnDate=CurrentDate,
               TxnPrice=ClosePrice, TxnQty = -Posn , TxnFees=0) }
    }
  }
  # Calculate P&L and resulting equity with blotter
  updatePortf(b.strategy, Dates = CurrentDate)
  updateAcct(b.strategy, Dates = CurrentDate)
  updateEndEq(b.strategy, Dates = CurrentDate)
} # End dates loop

chart.Posn(b.strategy, Symbol='SPY', Dates='1998::')
plot(add_SMA(n=10,col=4,on=1,lwd=2))

しかし、私はそれを動作させることができません..forループの後に常にこのエラーがあります:

Error in periodicity(table) : 
  can not calculate periodicity of 1 Observation

そして、これらの2行は次のエラーを生成します:

chart.Posn(b.strategy, Symbol='SPY', Dates='1998::')
plot(add_SMA(n=10,col=4,on=1,lwd=2)
> chart.Posn(b.strategy, Symbol='SPY', Dates='1998::')
Error in as.POSIXct.numeric(first(index(Position))) : 
  'origin' must be supplied
> plot(add_SMA(n=10,col=4,on=1,lwd=2))
Warning message:
In mapply(function(name, value) { :
  longer argument not a multiple of length of shorter

私は何を見落としていますか?

4

1 に答える 1

0

まず、次の 2 点に直接回答します。

indicators are not necessary to a strategy, the only hard and fast requirement is that you need at least one rule that will create orders, or at least one rule in the order slot that will create transactions.

the strategy object contains only the specification of the strategy, nothing more, see below.

次に、何が起こっているかを説明します。

quantstrat は、コードの再利用を可能にするために、遅延実行を広範囲に使用します。戦略オブジェクトは、戦略の仕様を格納する場所です。これは、portfolios= 引数を使用して、1 つ以上のポートフォリオ (initPortf() によって作成されたもの) に適用できます。

戦略の仕様は、後でその戦略をどのように適用するかの倉庫にすぎません。applyStrategy(...) を呼び出すまで、何も評価されません。これにより、戦略の仕様を変更することなく、同じ戦略オブジェクトを使用して複数の異なるパラメーター セットをテストしたり、異なるポートフォリオの構築や構成要素に適用したりするなどの便利なプロパティが可能になります。

戦略オブジェクト自体は、applyStrategy によって変更されません。applyStrategy 内で、mktdata と呼ばれる特別な内部オブジェクトが作成されます。これは、戦略仕様に含まれるインジケーター、シグナル、およびルールの実行によって変更されます。

mktdata オブジェクトは、デフォルトで、履歴データを含むオブジェクトを .GlobalEnv またはユーザーが指定したその他の環境から取得して構築されます。ポートフォリオのシンボルごとにこれらのオブジェクトの 1 つが作成され、applyStrategy の関数スコープ内に維持されます。

インジケーターとシグナルが適用される場合、これらの関数の最も一般的なパターンは、mktdata 時系列と同じ長さのベクトル、または mktdata 時系列と同じインデックスを持つ時​​系列オブジェクトを返すことです。このパターンに従うと、これらの列が mktdata オブジェクトに追加され、後でインジケーター、シグナル、およびルール機能を利用できるようになります。インジケータとシグナルは常にパスに依存しないと想定され、ルールはデフォルトでパスに依存します。

sigCrossover や sigThreshold などのシグナル関数の例では、このパターンを利用して、mktdata に存在する列にアクセスして比較します。ルールの例である ruleSignal は、シグナルが特定の値を持つポイントを探し、その情報に基づいて注文を作成します。

外部参照:

quantstrat の使用 (R/Finance 2013)

quantstrat の紹介 (FOSS 取引ブログ)

Rから : Guy Yollin の Quantstrat の例。指標は必要ですか?そして、これらの金融商品には何が保存されていますか?

于 2014-12-09T06:44:13.280 に答える