2

最近この質問をしましたが、「to.minutes5()」関数を使用するようにアドバイスされました。ただし、そうすると、次のエラーが発生します。

Error in to.period(x, "minutes", k = 5, name = name, ...) : 
unsupported type

私の元のテキストファイルには、列を区切る日付と時刻があります。

GBPUSD<- read.table("GBPUSD.txt", sep=',')

head(GBPUSD)

  V1           V2     V3     V4     V5     V6      V7    V8               
1 <TICKER> <DTYYYYMMDD> <TIME> <OPEN> <HIGH>  <LOW> <CLOSE> <VOL> 
2   GBPUSD     20010102 230100 1.5021 1.5021 1.5018  1.5018     4   
3   GBPUSD     20010102 230200 1.5019 1.5019 1.5019  1.5019     4     
4   GBPUSD     20010102 230300 1.5018 1.5019 1.5018  1.5019     4     
5   GBPUSD     20010102 230400 1.5019 1.5019 1.5019  1.5019     4     
6   GBPUSD     20010102 230500 1.5017 1.5018 1.5017  1.5018     4   

したがって、私が行った最初のステップは、新しい「TIME」列でpaste()関数を使用してそれらを1つの列にブレンドすることでした。

GBPUSD$Time <-paste(GBPUSD[,2],GBPUSD[,3],sep=",") 

その後、新しくマージされた「TIME」(9列目)を使用してPOSIXctタイムスタンプを作成しました。

time<- as.POSIXct(GBPUSD[,9], format="%Y%m%d,%H%M%S")

次に、終値と時間を使用してxts時系列を作成することに取り掛かりました。

gbp<- xts(GBPUSD[7], time)

ただし、to.minutes5(gbp)を呼び出すと、エラーが発生します。

ループを実行せずに、テキストファイルの1分間の終値を5分間の価格に変換するにはどうすればよいですか?

さらに、1分OHLCを5分OHLCに変換するにはどうすればよいですか?

アップデート:

khoxseyのアドバイスを試してみると、次の行でエラーが発生します。

raw_cable <- read.table(header=FALSE, text=data, col.names=cn, colClasses=cl)
"Error in textConnection(text) : invalid 'text' argument"

これは、最初に表形式のデータフレームをインポートし、最初の行を削除したために発生したと思います。

data<- read.table("GBPUSD.txt", sep=',')
data <- data[-1,] #deleted the initial header to add at a later step, as suggested
4

1 に答える 1

2

すべてのコードを提供しているわけではないので、どこが間違っているのかを正確に判断するのは困難ですが、非常に近いです。データの一部をコピーしてさらにいくつかの観測値を取得し、フォーマットを使用して時間文字列を取得しました。(BTWはのtime関数なRので、変数を別の名前で呼び出すことができます)。

コードの最初のチャンクはオプションです。代表的なデータを含むデータフレームを取得するためのセットアップと、セットアップを呼び出してas.POSIXctインデックスを作成するだけです。

forex_data <- "GBPUSD 20010102 230000 1.5021 1.5021 1.5018 1.5018 4
GBPUSD 20010102 230100 1.5021 1.5021 1.5018 1.5018 4
GBPUSD 20010102 230200 1.5019 1.5019 1.5019 1.5019 4
GBPUSD 20010102 230300 1.5018 1.5019 1.5018 1.5019 4
GBPUSD 20010102 230400 1.5019 1.5019 1.5019 1.5019 4
GBPUSD 20010102 230500 1.5017 1.5018 1.5017 1.5018 4
GBPUSD 20010102 230600 1.5019 1.5019 1.5019 1.5019 4
GBPUSD 20010102 230700 1.5018 1.5019 1.5018 1.5019 4
GBPUSD 20010102 230800 1.5019 1.5019 1.5019 1.5019 4
GBPUSD 20010102 230900 1.5017 1.5018 1.5017 1.5018 4
GBPUSD 20010102 231000 1.5017 1.5018 1.5017 1.5018 4"

cn <- c('TICKER','DTYYYYMMDD','TIME','OPEN','HIGH','LOW','CLOSE','Volume')
cl <- c(rep('character', 3), rep('numeric', 5))
raw_cable <- read.table(header=FALSE, text=forex_data, col.names=cn, colClasses=cl)

dt_tm <-as.POSIXct(paste(raw_cable[,2], raw_cable[,3],sep=","), format="%Y%m%d,%H%M%S")

データを含むdata.frameと適切なインデックスベクトルができたxtsので、価格とボリュームのデータのみを使用してオブジェクトを作成します。ここで、それは最後の5列を意味します。

require(xts)  
cable <- xts(raw_cable[,4:8], order.by=dt_tm)

最後に、整形式のxtsオブジェクトを使用すると、最大5分間のロールアップが非常に簡単になります。to.period他の多くの可能性については、ドキュメントを参照してください。ここで注意すべき重要な点の1つはindexAt、使用する終了分を選択できるパラメーターの設定です。楽しみのために、ドキュメントの他の可能性を試してみてください。

to.minutes5(cable, indexAt='startof', name=NULL)

                      Open   High    Low  Close Volume
2001-01-02 23:00:00 1.5021 1.5021 1.5018 1.5019     20
2001-01-02 23:05:00 1.5017 1.5019 1.5017 1.5018     20
2001-01-02 23:10:00 1.5017 1.5018 1.5017 1.5018      4
于 2012-08-23T04:26:22.733 に答える