かずきち。の日記

サーバサイドエンジニアのつぶやき

GASで過去の統計から為替の続騰率を自動計算してみた

やりたいこと

f:id:kazukichi_0914:20210527222545j:plain

為替のチャートを見ていて、「続伸・続落」という言葉はあるけれど
一体「n分足(今回は1分足)」で為替は何回連続で伸びるのかを計算してみた。

1度あれば2度あるが、濃厚なのか?
2度あれば3度あるが、濃厚なのか?
3度あれば4度あるが、濃厚なのか?

を条件付き確率でGoogle Financeから取得するのを目標にコードを書きます。


function getUSDJPY() {
  //1. Webページのソースを取得する。
  var response = UrlFetchApp.fetch("https://info.finance.yahoo.co.jp/fx/detail/?code=USDJPY=FX");
  var html = response.getContentText();
  //2. <dd id="USDJPY_detail_bid">タグの位置を探す。
  var tag = 'USDJPY_detail_bid">';
  var index = html.indexOf(tag);
  usdjpy = '';
  if (index !== -1) {
    //3. ソースの文字列の先頭〜2のタグ位置までを削除。
    var html = html.substring(index + tag.length);
    var index = html.indexOf('</dd>');
    if (index !== -1) {
       //4. </dd>タグの位置を探す。
       html = html.substring(0, index);
       //6. <span class="large">を削除
       html = html.replace('<span class="large">','')
       //7. </span>を削除
       usdjpy = html.replace('</span>','')
    }
  }
 
  Logger.log(usdjpy);
  
  //スプレッドシートに書き込む
  var id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  var ss = SpreadsheetApp.openById(id)
  var sheet = ss.getSheetByName("為替")

  const FValues = sheet.getRange('A:A').getValues();  //A列の値を全て取得
  var lastrow = FValues.filter(String).length;  //空白の要素を除いた長さを取得
  Logger.log(lastrow);
  
  var lastrow2 =lastrow+1;
  Logger.log(lastrow2);

  sheet.getRange("B"+lastrow2).setValue(usdjpy)

  //現在時刻習得
  var date = new Date();
  // 今日の日付を表示
  Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss'));
  var realtime = Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss');
  sheet.getRange("A"+lastrow2).setValue(realtime);

  //指定するセルの範囲(Bの最終行)を取得
  var range2 = sheet.getRange("B"+lastrow);
  //値を取得する
  var value2 = range2.getValue();
 
  //ログに出力
  Logger.log(value2);
  
  //傾き入力
  sheet.getRange("C"+lastrow2).setValue(usdjpy-value2);

  //何連騰かを入力
  if(sheet.getRange("C"+lastrow).getValue() > 0){
    if(sheet.getRange("C"+(lastrow2)).getValue() > 0){
      sheet.getRange("D"+lastrow2).setValue("続騰");
      var continuous = range2.getValue();
      //連投記入
    sheet.getRange("E"+lastrow2).setValue(sheet.getRange("E"+lastrow).getValue() + 1);
    }
  }

    //何連落かを入力
  if(sheet.getRange("C"+lastrow).getValue() < 0){
    if(sheet.getRange("C"+(lastrow2)).getValue() < 0){
      sheet.getRange("D"+lastrow2).setValue("続落");
      //連投記入
      sheet.getRange("E"+lastrow2).setValue(sheet.getRange("E"+lastrow).getValue() + 1);
    }
  }


}

を書いて下準備は完了。


連騰 回数 条件付き確率 続騰率
1以上 51
2以上 24 0.47 0.32
3以上 12 0.50 0.33
4以上 6 0.50 0.33
5以上 3 0.50 0.33
6以上 1 0.33 0.25

3~5連騰が相場ってことがわかりました。