Life is Like a Boat

忘備録や経済、投資、プログラミングに関するメモやtipsなど

砂糖の世界史

今年の目標で毎月5冊本を読み、1つでもいいのでブログに感想を書くという「決意を新た」にしたのですが、それができず5月のGWになってしまいました\(^o^)/

いわゆる積読本としては10冊近くになっており、この休み期間中に読み進めています。

ところで、経営コンサルタント大前研一によると、

「人間が変わる方法は、時間配分を変える、住む場所を変える、付き合う人を変える」の3つしかない

といいます。さらに、

もっとも意味がないのが『決意を新たにすること』(中神 康議. 経営者・従業員・株主がみなで豊かになる 三位一体の経営 (Japanese Edition) (Kindle Locations 3805-3807). Kindle Edition.)

だそうです\(^o^)/

閑話休題、そんなこんなで手に取ったのが 砂糖の世界史 (岩波ジュニア新書) です。

砂糖の世界史 (岩波ジュニア新書)

この本の魅力は、砂糖という多くの人が好むモノ(著者は世界中の誰もが普遍的に好きなモノということで「世界商品」と言っています)から近代史を見てみよう、という視点で書かれていることです。

誰もが好きで甘く、そして純白の砂糖。

16世紀から19世紀にかけて各国の政治家や実業家はいかにして砂糖の生産を握り、その流通ルートを押さえるか知恵を絞りました。(p.7)

生産するため植民地でプランテーションを作ります。プランテーションでの作付け、収穫、砂糖への加工、運搬、その他維持管理にには人手が必要です。労働力として何千万もの人々をアフリカから強制的に連れてきました。特に、

カリブ海の島々では先住民に代わり、アフリカから連れてこられた黒人奴隷が人口の多くを占めるようになりました。(p.16)

というのが、本書での展開のはじまりなのですが、砂糖の生産から消費までの過程を追う事で世界各地の相互の繋がりが見えてくることに気付かされます。

この本をAmazonでポチったきっかけは、知り合いの教員から勧められたからです。学校推薦の夏休み読書本というわけではないですが、小学校高学年からでも読みやすいと感じます。最近、小中高のカリキュラムで「持続可能な開発目標」を児童生徒に考えて発表させる取り組みが進んでいますので、その副読本にもなるのではないかと思います。

個人的には、高校の世界史の授業でこれを読んでいたら、世界史に興味持ってもっといい点とれたかもwと思います。

最後に、私が大いに共感した著者がこの本のあとがきで述べている下りを引用します。

歴史を学ぶということは、年代や事件や人命をたくさん覚え込むことではありません。いま私たちが生きているこの世界がどのようにしてこんにちの姿になってきたのかを、身近なところから考えてみることなのです。(p. 208)

砂糖の世界史 (岩波ジュニア新書)

砂糖の世界史 (岩波ジュニア新書)

What is it like to work for Elon Musk

"What is it like to work for Elon Musk"というタイトルでSpaceXイーロン・マスクと共に働いた元NASA技術者のGarrett Reisman氏がJoe Rogan氏の番組でこう答えています。

  • イーロンの意思決定は、その決定によって人類が火星で持続可能なコロニーを作れる日を早めるか遅くなるかに基づいている
  • イーロンはスティーブ・ジョブズのように人々の生活に劇的なインパクトを与えるというレガシーを残したい。
  • (Reisman氏は)自分は今まで多くの超超優秀な人と仕事をしたが、大抵彼らは一つの事柄に対して超超優秀なものだ。イーロンは我々(SpaceX)のトップ技術者とソフトウェアについて議論しているかと思えば、製造技術者ととても難解な溶接の方法について議論している。イーロンの知識の幅には本当に感銘を受ける。

www.youtube.com

決算後ギャンブルメモ

大抵この時期の決算シーズンは発表社数でみて

  • 1月中旬の小波
  • 1月最終週の木金の中波
  • 2月第一週後半から第二週の大波

という感じなのですが、今週はちょうどその谷間でたまった発表分をぽちぽち見ながら業績の趨勢をみる感じでした。

決算ギャンブルは業績発表前にポジションを持ち、発表後に反対売買する事なのですが、決算発表日の翌日終値で買い、5営業日に売るパターンをした場合を調べてみました。

これは決算後ギャンブルと名付ければ良いかわかりませんが、

の2パターンあると思います。

まず、決算発表日翌営業日に前日終値比でプラスになった銘柄数は354社中140社。そのうち、5営業日後もさらに上昇を続けた銘柄は81あります。これらはポジティブサプライズがモメンタムになって上昇が続いたと解釈されると思います。そのトップ10を抽出してみました。 f:id:nerimplo:20210124134458p:plain

つぎに、決算発表翌営業日が前日比でマイナス、5営業日後の終値でプラスリターンになっている銘柄数は99でした。直後に売られたが日が経つにつれ戻ったパターンです。その上位10を表示しています。 f:id:nerimplo:20210124125922p:plain

うち、リターン別でソートして1位になったJESCOの1時間足をみると、 f:id:nerimplo:20210124130633p:plain

発表翌日のオープンで売られ、その翌日のオープンで下ひげを付けています。自分だったらその翌日の下ひげ近辺で損切りしてそうです。

それぞれのパターンを表にまとめてみました。

t5>t1 t5=<t1
t1+ 81 59
t1- 91 123

t1が決算発表の翌営業日、t5が5営業日後です。決算発表日の翌営業日(t1)の終値が前日比プラス、かつ5営業日終値(t5)がt1を上回っている銘柄数は81です。

2020年を振り返る - 投資編

激動の一年が終わりました。 年間の日本株PFのパフォーマンスを計算したところ、年初来で28.9%増。米株PFは12/30時点で80.2%増となりました。

自分のTwilogを読み返しつつ今年を振り返りたいと思います。

1-2月

思い返せばイラン司令官殺害のニュースなど中東情勢の悪化懸念から始まった2020年。東京オリンピックを控えて年前半のGWにかけては波乱含みの展開、年後半から上向くイメージでいました。

1月5日には武漢新型コロナウイルス患者が発生したと発表(NHKスペシャルによると感染はそれより前に始まっていて、武漢の海鮮市場は初期クラスターの一部だったようです)。

当局は専用病棟を速攻で建てているし、

強権的なロックダウン措置をとる対応が中国発のニュースで流れていました。

とはいえ、この時点で自分は大阪でのMicrosoftのイベントに行っていましたし、正直対岸の火事程度に思っていて、まぁ豚インフルの頃と同じになるやろ、くらいの構えでした。

それでも、プットオプションを保険目的で買ってました。中国ニュースを追っていると武漢では秀吉もびっくりな一夜城で病院建てるくらいの大騒動なのに、株式市場は2月第3週まで、特に日経平均はそれほど影響を受けておらず、このウイルスの脅威は実はそれ程なくて、間違っているのは(心配し過ぎなのは)自分じゃないか、と思うようになりました。そうであれば、ここは少しでも利益乗ってるプットオプション外して様子を見よう、と判断したのが2/20です。後から振り返ってこの判断がいかに愚かだったのか思い知ることになります。 f:id:nerimplo:20201230170641p:plain

歴史的下落の3月

自分は社会人になってからリーマンショックと2011年3月大震災を経験したのですが、その頃は運用額も今より少なく、銘柄数も多くなかったので、今回体感する下落の恐怖は今までで最大でした。 株式PFの下落を少しでも回避するため、信用ポジは徹底的に損切り、少しでも利益が乗っている現物は長期保有候補であってもとにかく売りました。キャッシュポジションはPFの8割近くになりました。

米株ではNYダウのサーキットブレイクという、ものすごいプライスアクションを経験しました。「Frozen III」なんてジョークよく言えたよなと今振り返って思います。

おそらく、想定を超えるプライスアクションを経験した人は笑いしか出てこないんじゃないか。

3月末時点では年初来-35%でした。

金融/財政総動員

3月15日、FRBは臨時の会合を開き、パウエル議長は危機対応を表明。事実上のゼロ金利政策と大量の国債などを買い入れる量的緩和の再開を決定しました。 www3.nhk.or.jp

その後通常の失業保険にさらに600ドル/週を上乗せするなど、政府が国民のポケットに金を突っ込む平時であれば考えられない政策を含むCARES法案が米議会で合意。 www.washingtonpost.com

これらの政策により市中のマネーはM1/M2を見ると判るように急拡大。 f:id:nerimplo:20201230172930j:plainf:id:nerimplo:20201230172941j:plain

経済学史に深く刻まれる出来事でしょう。

急回復の春

4月、5月は大きく回復し、特に5月の月間確定損益は過去最高となりました。 スクリーニングに出てくるバリュエーションを気にせずとにかく平時に普通に戻ればある程度稼げる時価総額大きめの優良企業を現物で買い始めました。 5月に月間で過去最大の確定利益となった要因としては、3月末から4月にかけて建てた信用買いポジの貢献が大きいと自己分析してます。

ヨコヨコの夏/秋

その後7-8月の利確と損切りの夏を過ごし、一進一退の秋になり、10月中旬の新興市場ピークアウトの余波を受けました。 この頃、AI Insideが大きく貢献した一方、決算ギャンブルをしたパソナ空売りポジションが決算発表後に見事に逆サイドに行くS高となり大きな損失となりました。

8月以降は海運セクターのポジションを初めて作りました。郵船と川崎汽です。読み通りどちらの業績も市況の回復を享受し、株価はそれに反応した形となりました。

大統領選後

大統領選から12月にかけて時価総額上位のバリュー/クオリティのカムバックを享受できました。シクリカルの機械や化学セクターにうまく乗れました。特に12月にかけてYH水準で推移できたのは夏頃にポジション作ったレノバです。エネルギー政策関連として注目される事は当初は全く考えてなかったのですが、自前で発電所を建てられる優位性と今後の投資額、売電設備の着実な積み上がりを期待して5-7年のスパンで考えての投資でした。ポジション量も現物としては多めだったので、現物PFのパフォーマンスに大きく貢献しました。ちなみに同株は12月後半で全株利確しました。

振り返ってみると、急落→急回復→ヨコヨコ→上昇とPFとマーケットは大方同じように推移しました。地合いに助けられた1年だったと思います。

来年のビュー

COVID19については現在の第3波をやり過ごす過程でモデルナやファイザーのmRNAワクチン、アストラゼネカの安価なワクチンが世界的に普及していくことでしょう。順調にいけばアメリカは来秋にも集団免疫を獲得することになり、消費や設備投資の回復、失業率の下落、COVID19により生じたスラック解消による賃金増と好調なマクロ経済環境に戻ると予想しています。

来年1-3月は、平時の経済環境でうまくキャッシュを稼げそうな企業の押し目を狙う戦略でいくつもりです。全体的なマーケットの雰囲気を把握するために使っている25日移動平均線を上回る銘柄の割合を見つつ、信用枠ではシクリカルなセクターやテーマ株投資で上手く回していこうと思っています。

大統領選以降のセクター別騰落率

大統領選以降のセクター別騰落率でトップ10を調べてみました。

トップは総合電機。バフェット氏が今年、日本の商社株に初めて投資したと発表した総合商社セクターもランクインしてます。 ちなみに総合電機セクターにはソニー、日立、パナソニックなどが含まれています。 f:id:nerimplo:20201128221504p:plain

比較のために3月から大統領選までの騰落率トップ10はこちらになります。メンツがガラッと変わっているのがわかります。 f:id:nerimplo:20201128222004p:plain

GASからGoogleFormを使ってクイズを作る

仕事でGoogle Formsを使う機会が出てきました。 自分はGoogleのプラットフォームを使って仕事する機会が今までなかったのですが、Google Formsはかなり生産性高くアンケート作成やクイズ作成ができるので便利です。

ただ、大量に質問がある場合、ドラッグアンドドロップで質問を移動したり、選択肢の作成、クイズの場合は答えキーのセットなど手間がかかり面倒臭さが増してきます。マウスでぽちぽちやると気が遠くなりそうです。 そこでGoogleAppsScriptを使い自動生成する方法を調べてみました。

以下、Google Formのクイズを作成するGASスニペットです。ここではsetPoints(10)で1問10点のクイズを作っています。

const QUIZ_FOLDER_ID = 'YOUR_FOLDER_ID'

function myFunction() {
  addFormItems()
}

function addFormItems() {
  
  const formTitle = 'TestQuiz';
  const form = FormApp.create(formTitle).setIsQuiz(true)

  const item = form.addMultipleChoiceItem()
  
  item
  .setTitle('1+4')
  .setChoices([
    item.createChoice('1', false),
    item.createChoice('3', false),
    item.createChoice('5', true),
    item.createChoice('2', false),
  ]).setPoints(10).setRequired(true)
    
   
   const formFile = DriveApp.getFileById(form.getId())
   DriveApp.getFolderById(QUIZ_FOLDER_ID).addFile(formFile)
  
}

スクリプトのエディタから実行し、YOUR_FOLDER_IDのフォルダ下に生成されたクイズを確認すると、きちんと正答にチェックがついています!

f:id:nerimplo:20200909160413p:plain

FormApp.create(formTitle).setIsQuiz(true)をしないと点数つけられるクイズ形式のフォームにできないというのが一番の肝だと思います。

これをセットしてあげないと、Exception: 無効なフォーム データです。テストの設定を有効にしてから、もう一度お試しください。 というググラビリティの低い(苦笑 エラーが出てきます。

f:id:nerimplo:20200909160347p:plain

ローコーディングのAzure Logic Appsを使って画像付きのツイートを投稿する

MicrosoftのAzure Logic Appsを使って画像付きのツイートを投稿する方法のまとめです。

Azure Logic Appsは

タスク、ビジネスプロセス、ワークフローをスケジュール、自動化、オーケストレーションするのに役立つAzureのサービスの一つ。

です。これをローコードでできるという点が肝です。

www.youtube.com

視覚的にロジックを作成でき、特に条件や繰り返しなどは、子供向けプログラミングアプリのスクラッチのような感覚があります。

作ってみよう

Azure Portalから

f:id:nerimplo:20200722100021p:plain

Logic Appsを選びAddをクリック

f:id:nerimplo:20200722100102p:plain

Logic Appの作成フォームが現れます。

f:id:nerimplo:20200722100106p:plain

App名をこのようにします。

f:id:nerimplo:20200722100235p:plain

入力後、CreateボタンをクリックするとLogic Appの作成が始まります。1-2分もかからず完了するはずです。

Logic Apps Designer画面に切り替わるとテンプレートが表示されます。

f:id:nerimplo:20200722103402p:plain

Step1 - Triggerを選ぶ

Start with a common triggerとあります。Triggerは何をきっかけに一連のロジックを走らせたいか、です。

ここではPOSTリクエストを受け取った時にTwitterに投稿としたいので、

When a HTTP request is receivedをTriggerとして選びます。

f:id:nerimplo:20200722104714p:plain

編集画面が表示されるので、まずRequest BodyのJSONスキーマを決めてあげます。 加えるプロパティを画像とテキストとURLにしましょう。

{
    "properties": {
        "text": {
            "type": "string"
        },
        "media_data": {
            "type": "string"
        },
        "url": {
            "type": "string"
        }
    },
    "type": "object"
}

Add new parameterの入力フィールドからMethodを選び POSTを選びます。

これで第一のステップは完了です。

f:id:nerimplo:20200722104717p:plain

Step2 - Post a tweet

New Stepを加えるために、Twitterと検索フィールドに入力し、Post a tweetを選びます。

f:id:nerimplo:20200722104912p:plain

TwitterへのSign inを求められ、連携アプリを認証します。

認証後、このようなパラメターを加られるようになっているはずです。

f:id:nerimplo:20200722105327p:plain

Tweet textとMediaとあります。Tweet textは文字列部分なので、本文とURLにしましょう。

入力フィールドをクリックすると、dynamic contentを選べる画面が出てきます。

bodyとurlが先のステップ(When a HTTP request is received)のJSONスキーマで指定されたものです。POSTする際、JSONに含める値となります。

f:id:nerimplo:20200722134837p:plain

media_dataは今回の場合、画像になります。 画像はPOSTする際、base64にエンコードした文字列とする必要があります。 また、expressionを使って少々加工する必要があります。

base64ToBinary(split(triggerBody()?['media_data'],',')[1])

f:id:nerimplo:20200722110307p:plain

スクリーンショットを参考に、上記のexpressionを丸ごとコピーペーストしてみてください。 expressionの数式を説明すると、JSONのmedia_dataプロパティが

"media_data": "data:image/png;base64,asfdasfasdffasfd...............",

となっているので、最初のカンマ以降の文字列splitで取得、それをbase64ToBinary関数を使ってbase64エンコードの文字列をバイナリにします。

POSTしてみる

早速テストデータをエンドポイントにPOSTしてみます。

エンドポイントのURLは新規で作成したLogic Appを保存した際に発行されます。

f:id:nerimplo:20200722130624p:plain

PostmanやPawを使ってやってみます。curlでもOKです。

f:id:nerimplo:20200722132125p:plain

media_dataは画像をbase64エンコードした文字列です。この辺のサイトを使うかPythonのライブラリを使ってエンコードしてあげればいいです。

www.base64-image.de

ちなみにcurlだと

curl -X "POST" "YOUR_ENDPOINT" \
-H 'Content-Type: application/json; charset=utf-8' \
-d $'{
   "media_data": "data:image/png;base64,asfdasfasdffasfd...............",
   "url": "https://www.google.co.jp/",
   "body": "テスト"
}'

こうなります。

うまくいけば、このように画像と文字付きのツイートが投稿されます。

f:id:nerimplo:20200722135714p:plain

Logic Appsは元となるテンプレートだけでもかなりの種類があります。組み合わせはアイデア次第です。

ちなみに、Office365のPower AutomateはLogic Apps上に作られているので操作性は一緒です。 バージョン管理しているのでチームでのメンテにも向いていると思います。