2016-09-30 16 views
0

午後!私はRから始め、データフレーム、パッケージなどについて学びます。ここでたくさんのメッセージを読んでいますが、答えを見つけることができませんでした。R&TTRパッケージを使用するSMA

私は、次のフィールドを持っているRでアクセスしてるのテーブルを持っている: [シンボル]、[日付]、[閉じる] [開く]、[高]、[低]、[音量]

そして、私は終値でのSMAを計算しています:私は出力を見てみると

sqlQuery <- "Select * from [dbo].[Stock_Data]" 
conn <- odbcDriverConnect(connectionString) 
dfSMA <- sqlQuery(conn, sqlQuery) 
sma20 <- SMA(dfSMA$Close, n = 20) 
dfSMA["SMA20"] <- sma20 

、それはシンボルが何であるかについて考慮せずにSMAを計算しているように見えます。私は計算を複製しようとしていないが、日付/記号に関係なく、行を20行移動するだけであると思われる。

どのように計算を特定のシンボルに制限できますか? 何か助けていただければ幸いです。正しい方向を指すだけです。

ありがとうございます。

答えて

0

再現可能な例を提供すると、はるかに多くの回答が得られます。まずは、あなたのデータを複製してみましょう:

library(quantmod) 
symbols <- c("GS", "MS") 
getSymbols(symbols) 
# Create example data: 
dGS <- data.frame("Symbol" = "GS", "Date" = index(GS), coredata(OHLCV(GS))) 
names(dGS) <- str_replace(names(dGS), "GS\\.", "") 
dMS <- data.frame("Symbol" = "MS", "Date" = index(MS), coredata(OHLCV(MS))) 
names(dMS) <- str_replace(names(dMS), "MS\\.", "") 
dfSMA <- rbind(dGS, dMS) 

> head(dfSMA) 
    Symbol  Date Open High Low Close Volume Adjusted 
1  GS 2007-01-03 200.60 203.32 197.82 200.72 6494900 178.6391 
2  GS 2007-01-04 200.22 200.67 198.07 198.85 6460200 176.9748 
3  GS 2007-01-05 198.43 200.00 197.90 199.05 5892900 177.1528 
4  GS 2007-01-08 199.05 203.95 198.10 203.73 7851000 181.3180 
5  GS 2007-01-09 203.54 204.90 202.00 204.08 7147100 181.6295 
6  GS 2007-01-10 203.40 208.44 201.50 208.11 8025700 185.2161 

あなたが何をしたいかは、あなたの長いデータオブジェクトのサブセットを、その後、孤立して各シンボルにテクニカル指標を適用しています。ここでは、あなたが望む結果を達成するための手引きをしています。

あなたはlistを使用してこれを行うと、あなたはあなたの例で行うようにしませdata.frameに、各シンボルのためxtsデータオブジェクトに指標を構築することができ(あなたはdata.frameの列にTTR機能を適用することができますが、それ醜いです - xtsオブジェクトを使った作業ははるかに理想的です)。これはあなたがそれを行う方法のテンプレートです。最終出力はl.dataで直感的に操作できます。それぞれのシンボルを1つのdata.frameのすべてのシンボルと組み合わせるのではなく、別の「コンテナ」(リストの要素)に保管してください。

make_xts_from_long_df <- function(x) { 

    # Subset the symbol you desire 
    res <- dfSMA[dfSMA$Symbol == x, ] 
    #Create xts, then allow easy merge of technical indicators 
    x_res <- xts(OHLCV(res), order.by = res$Date) 
    merge(x_res, SMA(Cl(x_res), n = 20)) 
} 

l.data <- setNames(lapply(symbols, make_xts_from_long_df), symbols) 
+0

ありがとうございます - 私はこれを離れて遊びます。あなたの助けに感謝します。 –

関連する問題