さつま芋の勉強日記

投機の勉強記録を中心に発信しています。

MENU

【FX雑談】モンテカルロ法でFXシミュレーション

 

まえがき

こんにちは、さつま芋です。

 

言うまでもないことですが、為替相場は理不尽です。

 

見方を変えると、FXは ほぼ平等に理不尽なんです。

 

先行者利益もないし、情報格差もないし、基本的に優遇のない環境だと思います。

 

今回は確率論的な思考として、システムベッティングを考えてみます。

 

 

モンテカルロ法

モンテカルロ法とは、決まったルールで掛け金を調節するシステムベッティングです。

 

詳しい掛け方は省きますが、「モンテカルロ法 カジノ」で調べたら詳しく出てくると思います。

 

モンテカルロ法の正しい賭け方と計算方法|カジノ攻略法 (casino-winnersclub.com)

 

そのモンテカルロ法を使った場合、どれくらいの掛け金が必要か、どれくらいの収支になるのかをシミュレーションしてみました。

 

損益比1倍(2倍配当)で勝率50%を想定し、初期の掛け金は4円から開始しています。

 

勝ち越すまでを1セットとして1000セット繰り返した結果です。

*************************************
- セット数:  1000 
- 合計ゲーム数:  4879 
- 最大の掛け金:  700 
- 最終収支:  2,368 
- 最低収支:  -985 

 

この結果を見て何を思うでしょうか。

 

 

ドローダウンに耐えられるか

モンテカルロ法の勝敗は、資金力で決まります。

 

資金力さえクリアすれば、テクニカル分析などの経験則は不要です。

 

もちろんテクニカル分析をして勝率を上げれば更に有利です。

 

例えば、勝率が50.1%に(プラス0.1%)上げれば、次のような結果になりました。

*************************************
- セット数:  1000 
- 合計ゲーム数:  4058 
- 最大の掛け金:  318 
- 最終収支:  3,482 
- 最低収支:  -58 

 

もしも実際に利用するならば、ロットコントロールだけでなく、スプレッドやスワップスリッページも考えなければなりません。

 

しかし、手法がルール化されているので再現性は高いはずです。

 

 

プログラム

今回 使ったRのコードを載せておきます。

 

次のサイトを参考にさせてもらいました。

 

【python】カジノを崩壊させたらしいモンテカルロ法をシミュレーションしてみた - Qiita

 

set.seed(1)
options(scipen = 100)

main <- function() {
  # parameter
  SET_NUM <- 1000
  MAGNIFICATION <- 2 # ゲームの配当倍率
  
  # const
  INITIAL_BET_ARRAY <- c(1, 2, 3)
  
  # balance
  BALANCE <- 0
  
  # result
  gameNum <- 0
  maxBet <- 0
  minBalance <- 0
  balanceRecordArray <- c()
  
  for (game in seq_len(SET_NUM)) {
    cat("● ", game, "セット スタート\n")
    betArray <-INITIAL_BET_ARRAY
    while (TRUE) {
      gameNum <- gameNum + 1
      bet <- betArray[1] + betArray[length(betArray)]
      if (bet > maxBet) {
        maxBet <- bet
      }
      BALANCE <- BALANCE - bet
      
      # 勝負開始
      gameResult <- sample(seq_len(MAGNIFICATION), size = 1, prob=c(0.5,0.5))
      if (gameResult == 1) { # win
        BALANCE <- BALANCE + bet * MAGNIFICATION
        betArray <- betArray[-c(1, length(betArray))]
        cat("  ◯ 勝ち +", bet * (MAGNIFICATION-1), " | 収支: ", BALANCE, "\n")
        
      } else { # lose
        if (BALANCE < minBalance) {
          minBalance <- BALANCE
        }
        betArray[length(betArray) + 1] <- bet
        cat("  x 負け -", bet, " | 収支: ", BALANCE, "\n")
      }
      
      # 記録
      balanceRecordArray[length(balanceRecordArray) + 1] <- BALANCE
      
      # セット終了判定
      if (length(betArray) <= 1) {
        cat("----- セット終了 -----\n")
        break
      }
    }
  }
  
  cat("*************************************\n")
  cat("- セット数: ", SET_NUM, "\n")
  cat("- 合計ゲーム数: ", gameNum, "\n")
  cat("- 最大の掛け金: ", format(maxBet, big.mark = ","), "\n")
  cat("- 最終収支: ", format(BALANCE, big.mark = ","), "\n")
  cat("- 最低収支: ", format(minBalance, big.mark = ","), "\n")
  
  balanceRecordArray<-c(-1*balanceRecordArray[1], diff(balanceRecordArray))
  cumulativeBalance<-cumsum(balanceRecordArray)
  
  plot(cumulativeBalance,type="l",col="blue",xlab="ゲーム数",ylab="収支",main="累積収支グラフ")
  abline(h=0,col="red")
  
}

main()

 

 

あとがき

FXでは、チャートパターン(経験論)を語る人は多いのに、システムベッティング(確率論)に触れる人は少ないようです。

 

確率論を支持する私から見れば、初心者に経験論を説くFX解説は危険です。

 

経験が無駄とは考えていませんが、学習順序がアベコベです。

 

掛け方を工夫するだけでも、パーレー法でトレンドを狙ったり、ダランベール法でレンジを狙ったりできると思います。

 

軽く調べただけでも他に色々な賭け方がありました。

 

ギャンブルの賭け方14種|マーチンゲール法やココモ法などの資金管理・賭け方解説 | ブクサカ (buku-saka.com)

 

ロットコントロールは面倒ですが、判断に迷う部分は少ないので、総じて扱いやすい手法だと思います。

 

ただし、ロットコントロールしても運が悪いと破綻するのは、相場の非常に理不尽なところです。

 

以上、さつま芋でした。

 

このエントリーをはてなブックマークに追加

ブログランキング・にほんブログ村へ

 

 

ブログランキング・にほんブログ村へ
にほんブログ村