1

私 (R とプログラミングのまったくの初心者) は、金融の論文のために R を使用して分析を行う必要があります:( 目的は、GBM を使用してデータ (株価) をシミュレートし、結果 2 取引戦略を実行することです。GBM 内検証可能な "r" と "sigma" (それぞれに 3 つの異なる値、したがって 9 つの組み合わせ) で "遊ぶ" 必要があります。各組み合わせは、期間 T=10、N=250 で 10000 回シミュレートする必要があります。これらすべてのシミュレーション 2 つの取引戦略を適用する必要があります - MACD と RSI (TTR パッケージ内) 今、私はコードを書く際の問題に直面しています :(

#Geometrical Brownian Motion
Sim <- GBM(x, r, sigma, T, N)
x <-100
r <-0
sigma <-1
T <- 10
N <- 250

#Additional info for RSI-strategy
retSim <- ROC(Sim)
SimRSI <- RSI(Sim, 14,)
SimRSI[is.na(SimRSI)] <- 0

#Create a vector for the results of the inner loop
portfolio <- rep(0:N)
portfolio[1] <- 100

runs <- 10000

#Creating vectors for final results of portfolio and simulation after 10000 runs (only the last value of each of the 10000 simulations and portfolio results of the strategy required)
resultsSimGBM <- rep(0:runs)
resultsRSIr1sig1 <- rep(0:runs)

#orders
buyRSI<-portfolio[i-1]*exp(retSim[i])
holdRSI<-portfolio[i-1]

#Simulation
portfolio[1]<-100
i <- 1
j <- 1

#Second loop
for(j in 0:runs){

  #Simulation GBM

  x <-100
  r <-0
  sigma <-1
  T <- 10
  N <- 250
  Sim <- GBM(x, r, sigma, T, N)
  retSim <- ROC(Sim)
  SimRSI <- RSI(Sim, 14,)
  SimRSI[is.na(SimRSI)] <- 0
  portfolio[1] <- 100

  #First loop
  for(i in 2:length(Sim)){

    #Apply RSI on GBM
    buyRSI<-portfolio[i-1]*exp(retSim[i])
    holdRSI<-portfolio[i-1]

    if(SimRSI[i-1]<50 && SimRSI[i]>50){portfolio[i]=buyRSI}
    if(SimRSI[i-1]>50 && SimRSI[i]<50){portfolio[i]=holdRSI}
    if(SimRSI[i-1]<50 && SimRSI[i]<50){portfolio[i]=holdRSI}
    if(SimRSI[i-1]>50 && SimRSI[i]>50){portfolio[i]=buyRSI}
    i <- i+1
  }
  resultsRSI[j] <- portfolio[N]
  resultsSimGBM[j] <- Sim[N]
  j <- j+1
}

とにかく、これは私が今まで持っているもので、うまくいくようです。ただし、最初の (内側の) ループには、次のように見えた 2 番目の戦略 (これまでは選択されていました) も含める必要があります。

#MACD strategy
portfolioMACD[1]<-100
i <- 1
j <- 1

for(j in 0:runs){
  Sim <- BMSim
  retSim <- ROC(Sim)
  SimMACD <- MACD(Sim, 12, 26, 9, myType="EMA")
  DataSimMACD <- data.frame(SimMACD)
  DataSimMACD$macd[is.na(DataSimMACD$macd)] <- 0
  DataSimMACD$signal[is.na(DataSimMACD$signal)] <- 0

for(i in 2:length(Sim)){
  buyMACD<-portfolioMACD[i-1]*exp(retSim[i])
  sellMACD<-portfolioMACD[i-1]
  holdMACD<-portfolioMACD[i-1]*exp(retSim[i])
  if(DataSimMACD$macd[i-1]<DataSimMACD$signal[i-1] && DataSimMACD$macd[i]>DataSimMACD$signal[i]){portfolioMACD[i]=buyMACD}
  if(DataSimMACD$macd[i-1]>DataSimMACD$signal[i-1] && DataSimMACD$macd[i]<DataSimMACD$signal[i]){portfolioMACD[i]=sellMACD}
  if(DataSimMACD$macd[i-1]>DataSimMACD$signal[i-1] && DataSimMACD$macd[i]>DataSimMACD$signal[i]){portfolioMACD[i]=holdMACD}
  if(DataSimMACD$macd[i-1]<DataSimMACD$signal[i-1] && DataSimMACD$macd[i]<DataSimMACD$signal[i]){portfolioMACD[i]=sellMACD}
  if(DataSimMACD$macd[i]==DataSimMACD$signal[i]){portfolioMACD[i]=sellMACD}
  if(DataSimMACD$macd[i-1]==DataSimMACD$signal[i-1] && DataSimMACD$macd[i]!=DataSimMACD$signal[i]){portfolioMACD[i]=buyMACD}
  i <- i+1
}
  resultsMACD[j] <- portfolioMACD[length(Sim)]
  j <- j+1
}

基本的に : 1-1 つのブラウン運動は 2500 の要素で構成されている必要があり、両方の取引戦略を個別に適用する必要があります 2-この手順全体を、変数 r とシグマの 9 つの組み合わせ (r1sigma1、r1sigma2 , r1sigma3,.....,r3sigma3) (これはまだコードに含めていません - これらの 2 つのループをすべて構築する方法がわかりません...) :( 3-最終結果は 10000x27 の行列になるはずです10000 行 (実行の量) と 27 列 (9x GBM、RSI、MACD) で、各シミュレーションの 2500 番目 (終了値) のみで埋められます (ポイント 1 から) --> どうすればよいですか?

SOS!あなたの誰かがこの混乱を手伝ってくれませんか?私は完全に迷っており、それは私の卒業論文です-.-

すべてのヘルプは高く評価され、深く感謝されます!

事前に感謝し、長い投稿を申し訳ありません.

アナ、ベルリンから乾杯:)

編集と別の単純化された例

    library(sde)

    #Vectors for results
    Returns <- rep(0:N)
    LogReturns <- rep(0:N)
    Simulation <- rep(0:N)
    ResultsSimulation <- rep(0:runs)
    ResultsReturns <- rep(0:runs)
    ResultsLog <- rep(0:runs)

    runs=50   #how ofthen the Simulation of GBM should be repeated
    i <- 1
    j <- 1

    #second loop
    for(j in 2:runs){
      Simulation <- GBM(x, r, sigma, T, N)
      x=100
      r=0
      sigma=1
      T=1
      N=20

    #first loop
      for(i in 2:length(BM)){
        Returns <- ROC(Simulation)
        LogReturns[i+1] <- log(Simulation[i+1]/Simulation[i])

        i <- i+1
      }
      ResultsSimulation[j]<-Simulation[N]
      ResultsReturns[j]<-Returns[N]
      ResultsLog[j]<-LogReturns[N]

      j <- j+1
    }

ResultsMatrix <- as.matrix(data.frame(ResultsSimulation, ResultsReturns, ResultsLog))

この例の構造は基本的に私が持っているものです。その周りに、3 つの異なる「r」値と「シグマ」値 (GBM 関数内の変数) に対して同じシミュレーションと計算を行う 2 つのループをさらに構築する必要があります。結果 (各シミュレーションの最終値と最初のループからの計算) は、個別のベクトルまたはそれらで構成される行列に保存する必要があります --> したがって、長さ 50 の 27 ベスター (変数 r とシグマの組み合わせごとに 3 つの結果) ) たとえば、sigma=0.1 の場合。0.3; 0.6 および r=0.03; 0,05; 0,08

これらすべてのループを構築し、それに応じてデータを保存する方法は?

質問して申し訳ありませんが、私は本当に迷っています:(

乾杯、前もって感謝します!少なくとも読むために;)

4

1 に答える 1