今日の取引を反省
はじめに
ほぼ毎日デイトレをしていて、その時その時で反省をしているものの、うまく利益に結び付けられていないです。 (今日も悪い取引をしてしまった。。😢)
なので、ここにしっかりと反省と対策を行い、来週に備えていこうと思います。
内省
買いタイミングが悪いのは悪い。
じゃーいいタイミングで買おうとしてもそんない簡単ではない。
もう少し深掘りしてみます。
現行投資
KabuCalculatorを使って、リターン、上昇率を見て、明日、上がる銘柄を見つけます。 さらに、自分のローカルで、株価の上限、下限を計算して、底で買うということを行なっています。
現行投資の問題点
底で買おうとしてしまうがために、当日下降トレンドの株だけ約定してしまう。
私の投資は上がる株を買って、そのまま上がって利確することを選んでいるのに、 底で買おうとしすぎて、下降トレンドのものを買っている。
つまり上昇トレンドを想定して計算しているにも関わらず、その想定とは違う銘柄を選んでいるということかなと思います。
ではどうするか
前日に上昇トレンドの株のみに投資対象を絞る。
当日の寄り付きで上によった場合にのみ発注を出す。
対策の課題点
上昇トレンドのエントリーが難しいのが対策案の課題になると思います。
株価のレンジの上限を意識しつつ(高掴み)、押し目買いを狙いに行きたいと思います。
最後に
来週の自分へ
前日に上昇トレンドの株を選ぶんだよ
寄り付きで上じゃなかったら無理やり発注するのはやめなさい
押し目買いができるかわからないけど、上限を意識して、利益でそうなら買ってみよ
さー、もう一度、頑張ってみましょ
国内株式を統計指標で抽出できるサービスをリリースしました
はじめに
フィヨルドブートキャンプ最終プラクティスの自作サービス、KabuCalculatorをリリースしました。 統計指標に基づく、国内株式の抽出比較ツールになります。
以降ではサービスの紹介やこれからやりたいことを書いていこうと思います。
目次
自己紹介
makiichikawaです。FJORD BOOT CAMP (フィヨルドブートキャンプ)に2019年12月から在籍しており、WEBアプリケーションを独力で作成するための勉強をしてきました。 現職システムエンジニア(基幹システム)ではあるものの、レガシーシステムを開発していたため、WEBアプリケーション開発はどうやっていいか分かりませんでした。
いろいろとあって2年3ヵ月という時間がかかりましたが、仕事をやりながら(頭がパンクして途中休職してしまいましたが)、WEBアプリケーションを開発するスキルを身につけられたと思います。
KabuCalculatorの紹介
KabuCalculatorとは
株価の過去データを基に計算した上昇・下降率、リターン、リスクという統計指標を提供し、これらの指標でソート、抽出、比較をすることができます。
各指標について
短期(5日間)、中期(25日間)、長期(75日間)に分けて、上昇・下降率、リターン、リスクを計算しています。
上昇率・下降率
上昇率・下降率は価格の偏差値1と考えると解釈しやすいです。偏差値は50を基準として、高ければ70、低いと30と考えると思います。 上昇率・下降率の場合は0%を基準として、最も高いと50%、最も低いと-50%となります。 例えば、50%の株であれば高値づかみを警戒したりします。
リターン
株価の収益率平均2のことです。
リターンが大きい株というのは買って売っていたら、大きな収益が入っていた株ということになります。
一昨日、昨日、今日と株価がそれぞれ100、120、140だった株Aと100、110、120だった株Bでは前者の株Aの方がリターンが大きいということになります。
長期リターン < 中期リターン < 短期リターン
のような関係が成り立つ株であれば最近株価が上がってきていると判断できます。
リスク
リスクは価格変動の激しさを表します。 一昨日、昨日、今日と株価がそれぞれ100、101、99だった株Aと100、150、120だった株Bでは後者株Bの方がリスクが大きいということになります。 リスクが高いほど、大きく損する可能性もある反面、大きく得する可能性もあります。
使い方
基本的な使い方
抽出
銘柄コード(4桁)、現在の株価、各種統計指標で抽出できます。例えば、資金が25万だった場合は、現在価格の上限に2500(購入最低株数は100を想定)を入力すると、2500円以下の銘柄だけ抽出できます。
ソート
最も重視している、指標があるのであれば、それをソートにかけることもできます。例えば今後株価があがるシグナルとして短期リターンと考えるのであれば、その指標でソートしてみます。
グラフ
重視している指標がふたつある場合はグラフ化してみて、ふたつの指標の値を同時に確認してみて株を決めることもできます。例えば、最近勢いある(短期リターンが大きい)が高値づかみにならない(上昇率としては大きすぎない)株を探す場合、リターンと上昇率・下降率でグラフ化すると、いい塩梅の株が見つかるかもれません。
私の使い方
私が本格的に個別株を始めてまだ1年も経っていません。 個別株投資の目下の目標は投資手法を確立することです。
1年弱ではありますが、短期や中期でいろいろ投資のやり方を試してみて、今のところのKabuCalculatorを使った投資のやり方を紹介したいと思います。 KabuCalculatorの使い方のイメージアップつながり、ユーザ様の投資手法にKabuCalculatorを活用されればとてもうれしいです。
- 投資スタイル
短期で利確、損切をします。1日長くて2日しか保有しません。 よって、重視しているは短期指標になります。 夜にデータを確認して、明日の市場に備えます。
KabuCalculatorで抽出
資金の上限で取引可能な株で絞り込む
短期、中期、長期のリターンが0以上の株に絞り込む
リターンがマイナスということは投資したら、収益がでなかったということなので、とりあえず0以上で指定。長期リターン0以上はあまりいい株が見つからない場合は指定しないことがある。
KabuCalculatorでグラフ化
短期リターンと短期上昇率のバランスをみる
最近勢いがあってあまり上がりすぎてない株を探す。上昇率が30%近くになるとすこし高すぎるなーという感じ。短期リターンは大きいものを選びたいけど、大きものは上昇率がおおきくなる。良い塩梅の株を5、6個に見つける。
証券会社の株価チャート
最後に株式チャートを確認し、上がりそうなチャートの形かを確認する
- 直近の売上高
- 短期、中期、長期のボリンシャーにおける株価の位置
- 短期、中期、長期の移動平均線に対する株価の位置
- モーメンタム、RSI
このサービスが解決できること
株式投資の基本は安く買って高く売ることだと思います。 安い(高い)を統計学的に数値で表すことで、簡単に株式同士比較することができます。 3500超の銘柄を短期、中期、長期のチャートで確認することできません。 KabuCalculatorを使えば、(短期、中期、長期的に)安い株をすぐに見つけることができます。
どんな人につかってもらいたいか
一番のユーザが私なので、これを答えるのはとても難しいです。 また個別株を始めて思ったのですが、インデックスファンドなど長期で保有する資産よりはるかに投資が大変です。 買うタイミングと売りタイミングをちゃんと決めないといけないからです。 (それをお手伝いするのがKabuCalculatorだとも思っています)
- 個別株に興味がある人
勝手な偏見かもしれませんが、個別株をやるぞ!という方は投資が好き、お金が好きな人かなと思います。 インデックスファンドは労力かけずにとりあえずという感じがありますが、個別株はいろいろと分析して仮説を立てて投資する。仮説が間違っていたら、原因を探って対策をしていきます。 個別株大変だけど、やってみたいなと思っている人への助けになればうれしいです。
- 科学的に投資したいと思っている人
株式投資にはファンダメンタル分析とテクニカル分析とふたつあると思います。 KabuCalculatorはテクニカル分析寄りのツールです。 また、KabuCalculatorが提供している指標は金融工学や数理ファイナンスという学問を基にしています。 テクニカル分析の指標がなんか科学的?統計学的じゃないなーと思っている人はぜひぜひ使ってみてください!
なぜ作ったのか
株式投資を始めようとしたら、買いタイミングがよく分からず、テクニカル分析の手法も自分としては納得できなかったからです。
大学、大学院で数理ファイナンスをしていたこともあり、株価が正規分布に従う前提の投資3をしたいという思いがずっとありました。
有名な投資家に株価が正規分布に従うなんてあほらしいという方もいますし、 正規分布で複雑な市場を表していないといわれればそうだと思います。
ただ指標だったり、目安には使えると信じています。
技術要素
Nginx
Docker
CI
GitHub Actions
苦労したこと
Pythonで計算処理を書いたことが一番大変でした。 株価を取得するAPIがRubyのライブラリでは存在しなかったことと、計算ライブラリがPythonがとても充実していたので、Pythonでつくることにしました。
Pythonは会社でお遊びのデータ分析をやったときに使った程度だったので、オブジェクト指向のプログラムを書くことと、テストを書くことに苦労しました。
楽しかったこと
いままでの人生で培った知識を総動員できて、自分の作品と呼べるものができたことがもっとも楽しかったことです 。
- 業務知識
大学院で勉強したファイナンスの知識
- 計算処理
会社で別言語ではあるが複雑な計算処理を実装した経験
- WEBアプリケーション
フィヨルドで学んだ、黒い画面から始まり、vimも、もちろんGitも、WEBサーバもRailsもVue.jsも全部役に立った! Getting Realについては、とても勉強もなり、一人で開発しても、いいサービスが作ることができるという勇気をもらった!
- Docker、EC2
尊敬する会社の先輩から、キャリアに悩んでる私を見かねて、個人開発ができるように教えてくれた知識
今後にむけて
KabuCalculator
1日の値幅を予想する機能
いざ買うときに高値で買ってしまわず、落ち着いて取引ができるようにしたい
業種別に色分けしてグラフにプロット
どの業種が今勢いがあるかは選ぶ上では重要
別サービス
KabuCalculatorのインデックスファンド版を作りたい。 株式だけでなく債券、リート、コモディティも対象とする。
最後に
フィヨルドブートキャンプの皆様、WEBアプリケーションを作るために必要なこと、たくさん教えていただきありがとうございます。
@rihoさん、KabuCalculatorを作りたいと自信ないまま相談したとき、背中を押していただきありがとうございます。 自分ならではの作品ができたと思います。
毎日コツコツ勉強やれたこと、自作サービスを作れたのは、フィヨルドのおかげです。 膨大ですが体系的な知識を学べるカリキュラムとモチベーションを損なわないようにいろいろと働きかけをしてくださったからだと思います。 本当にありがとうございました!
Vuetifyのフォームコンポーネントでバリデーションを行う
前提
- vue@2.6.14
- vuetify 2.6.2
どうやって実装した?
VuetifyのフォームコンポーネントにあるRulesプロパティを使った。 Rulesプロパティはルールの規則が格納された配列を指定した。 この指定したルールをもとにバリデーションを行ってくれる仕組みになっている。
コード例
実際に書いてみたコード。
HTML
<template lang="pug"> v-container.ma-0.pa-0 v-row( justify='center' align='center' ) v-col(cols='12' xs='12' sm='5') v-text-field( hint='下限' dense v-on:input="emitLowerValue" v-bind:id="idName + '-lower-value'" :rules="rules" ) (省略) </template>
伝えたい部分は:rules="rules"
の部分。
フォームコンポーネントのプロパティ:rules
にルールの配列rules
を格納。
ルールの配列はScriptの部分で定義していく。
Script
computed: { rules: function() { const rules = [] const rule = v => !v || !isNaN(v) || `数値のみ有効` rules.push(rule) if (this.idName.match(/price|sigmahat/)) { const rule = v => !v || !(Math.sign(v) === -1) || `正の数のみ有効` rules.push(rule) } if (this.idName.match(/probability/)) { const rule = v => !v || !(Math.abs(v) > 50) || `-50~50のみ有効` rules.push(rule) } return rules } },
computed(算出プロパティ)にルールの配列を返す関数を定義することで フォームから入力された値が変わるたびに、バリデーションを行う仕組みになっている。
ruleは関数として定義して、引数v
は入力値である。
伝えたい部分はv => !v || !isNaN(v) || '数値のみ有効'
の部分。
条件1 || 条件2 || 文言
のような形でルールを定義する。
条件1を満たさず、さらに条件2も満たさない場合はバリデーションエラーとしてフォーム上に文言を注意喚起するという感じ。
(||
はまたはなのでtrue
が出現しない限り評価されるという規則を使っているよう。)
入力値がnullではなく、数値でもない場合は、数値を入力するように注意喚起するルールの例になる。
参照情報
Vuetify公式リファレンス(フォームコンポーネント)
あとは、$v
とか$touch
などわからない変数はvue.jsの公式リファレンスを読んでなんとか理解していった感じです。
MySQLのDockerコンテナを立ち上げ、GitHub Actions上で自動テストを行う
はじめに
ここ1,2ヶ月個人開発に励んでいます。 その中でGitHub Actions上で、MySQLのコンテナになかなか接続できなかったため、ここに整理したいと思います。 GitHub Actionsでdocker-compose.ymlを使ってコンテナを立ち上げて、自動テストを考えている方の参考になれば幸いです。 (DockerコンテナはGitHub Actionsのserviceは使っておらず、docker-compose.ymlでコンテナの立ち上げを行なっています)
docker-compse.yml(CI用)
PythonのコンテナからMySQLのコンテナを接続してます。
version: "3" services: python: build: context: . dockerfile: ./python/Dockerfile depends_on: mysql: condition: service_healthy links: - mysql environment: - DB_HOST - DB_PORT - DB_DATABASE - DB_USERNAME - DB_PASSWORD tty: true mysql: build: context: . dockerfile: ./mysql/Dockerfile ports: - 3306:3306 environment: - MYSQL_DATABASE - MYSQL_ROOT_PASSWORD healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "mysql"] timeout: 20s retries: 10
ポイント① healthcheck
depends_on: mysql: condition: service_healthy
Pythonのコンテナはhealthcheckを行なった後に立ち上げを行います。 depends_onについてはこちらを参考にしました。
healthcheck: test: ["CMD", "mysqladmin" ,"ping", "-h", "mysql"] timeout: 20s retries: 10
MySQLコンテナで行うhealthcheckを定義します。 mysqladminはサーバの稼働状況を確認するコマンドになります。
ここを書いとかないと、エラー (2003) 「'server' の MySQL サーバーに接続できませんが出てしまいます。 このエラーはホスト名(IPAdress)が認識できないわけではなく、MySQLの立ち上げが間に合わず、接続が拒否がされているためのエラーです。
ポイント② --linkオプション
まずGitHub Actions上では、こちらのリファレンスを見ると、bridgeネットワークを使わなければなりません。
docker network inspect ネットワーク名
を実行しましたが、認識されていなかったので、おそらく新規で独自のnetworkを作れないんだと思います。
なので、デフォルトのbridgeネットワークを使うのですが、bridgeネットワークはコンテナ名ではなくIPアドレスを指定して、コンテナの接続を行います。 何が問題かというとコンテナが立ち上がる度にIPアドレスはかわってしまうため、環境変数としてIPアドレスを指定できないことです。 (GitHub Actionsのserviceを使ってMySQLを立ち上げれば、固定のアドレスになるためそちらを使ってもいいかもしれません)
その問題を解決するために--links
オプションを使います。
links: - mysql # - 接続したいコンテナ名:参照名 # コンテナ名と参照名が一緒であれば参照名は記載不要
これでホスト名にmysqlを指定すると接続されます。
.github/workflows/test.yml
name: Test on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: docker-compose up env: MYSQL_DATABASE: **** MYSQL_ROOT_PASSWORD: **** DB_HOST: mysql DB_PORT: 3306 DB_DATABASE: **** DB_USERNAME: **** DB_PASSWORD: **** run: | docker-compose up -d --remove-orphans - name: Run Tests run: | docker exec -i kabucalculator_python_1 bash -c "cd test && python -m unittest"
docker-compose up のステップ
env
でdocker-compse.ymlへ渡す環境変数を設定してます。
ホスト名はmysqlです。
env: MYSQL_DATABASE: **** MYSQL_ROOT_PASSWORD: **** DB_HOST: mysql DB_PORT: 3306 DB_DATABASE: **** DB_USERNAME: **** DB_PASSWORD: ****
Run Test
Pythonのコンテナに入って、テストコマンドを実行しています。
さいごに
GitHub Actionsの自動テストでdocker-composeを使う記事はそんなに多くなかったので、 もし同じようなことを考えている方の参考になれば幸いです。
AWSにWordPressを立ててSSL化
はじめに
私の実家は自営業で機械屋さんみたいなことをしているのですが、 70才超えている父がホームページ作りたいということで作ってみました。
(もうそろそろ引退かなと思っていたけど、まだ気力があるから、販売だけ頑張りたいらしい、すごいね。。脱帽)
今のうちにできる親孝行とWEBエンジニアになる勉強になると思い、挑戦!!
技術要素
- Docker
- Nginx
- Let's Encrypt
AWSのインスタンスを作成したり、ElasticIPを作ったり、はたくさんいいサイトがあるので、確認してみて下さい。 この記事はとても参考になりました。
ディレクトリ構成
web_site -- docker-compose.yml |-nginx --- nginx.conf # このファイルに証明書の設定やらポートの設定やらを記載する | --- certs # このフォルダに証明書を置く
docker-compose.yml の作成
Nginx, WordPress, MySQLのコンテナを立ち上げるための、docker-compose.yml 以下の記事を参考にしながら作成しました。
SSL通信するため、nginxのポート番号は443に変更しています。
version: "3" services: wp-db: image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - storage-mysql:/var/lib/mysql ports: - "3306:3306" environment: MYSQL_DATABASE: ${DB_NAME} MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS} MYSQL_USER: ${DB_USER_NAME} MYSQL_PASSWORD: ${DB_USER_PASS} TZ: "Asia/Tokyo" env_file: - ./.env wp: image: wordpress:php7.3-fpm volumes: - ./wp:/var/www/html expose: - "9000" environment: WORDPRESS_DB_HOST: wp-db WORDPRESS_DB_USER: ${DB_USER_NAME} WORDPRESS_DB_PASSWORD: ${DB_USER_PASS} WORDPRESS_DB_NAME: ${DB_NAME} WORDPRESS_TABLE_PREFIX: basis links: - wp-db wp-nginx: image: nginx:1.17 ports: # - "80:80" - "443:443" volumes: - ./nginx/certs:/etc/nginx/ssl - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./wp:/var/www/html links: - wp volumes: storage-mysql:
Let's Encryptで証明書作成
https-portal, mkcertも試してみましたが、SSL化するなら、Let's Encryptかなと思います。
docker-compose.yml上に追記するだけで、https-portalが立ち上がり、自動で証明書の発行更新を行ってくれるのですが、 証明書の有効期限が長いということで、証明書エラーが起こります。 証明書の期限は最近の情勢的には短くなる傾向にあるようだったので、諦めました。
- mkcert
インストールしたら一瞬で証明書を発行してくれます。ただ自己証明書なので、これもブラウザで証明書エラーが起きます。
無料で証明書エラーが起きない、Let's Encrypt一択ですね(他にもあったら教えて下さい!) certbotをインストールして、standaloneで証明書発行。
# nginxのコンテナは停止させた後に証明書発行 sudo certbot certonly --standalone -t # certsフォルダに移動 mv /etc/letsencrypt/archive/[your_domain]/fullchain.pem ./nginx/fullchain.pem mv /etc/letsencrypt/archive/[your_domain]/privkey.pem ./nginx/privkey.pem # 読み込みの権限付加 chmod 755 ./nginx/fullchain.pem chmod 755 ./nginx/privkey.pem
nginx.confを作成し、証明書を読みこませる
events { worker_connections 1024; } http { include /etc/nginx/mime.types; charset UTF-8; server { listen 443 ssl; server_name your_domain; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; root /var/www/html; index index.php; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(\.+)$; fastcgi_pass wp:9000; # wordpressコンテナを指定する fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } }
証明書を読み込んでいるのは、以下の部分です。
ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem;
certsフォルダ配下じゃないの?と思う方もいるかもしれませんが、 docker-compose.ymlでホストにあるcertsフォルダとnginxコンテナ内にのsslフォルダをマウント(同期)させています。
volumes: - ./nginx/certs:/etc/nginx/ssl - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./wp:/var/www/html
保守性(証明書を次更新すること)を考えると、ホスト側に置くのが良いと考えました。
完成品
これが完成したホームページです。
まだこれから写真追記したり、言葉付け加えたりします! googleで検索しても、出てこないよ〜なんとかします。。
所感
Dockerの本を読みたい。 いい本あったら教えて下さい〜
自作キーキャップに挑戦!!~型取り編~
フィヨルドブートキャンプの方々のツイートなどがきっかけで、自作キーボード(lily58)を作り、それに合うキーキャップをいろいろと探していました。
海外から取り寄せようと思ったのですが、どうも送料が気になり、自分で作ることにしました。
まず、参考にさせていただいたのが、以下の記事です。
おゆまる、シリコンなど様々なキーキャップの自作方法が掲載されています。
次に参考にしたのが以下の動画です。
キーキャップの型取りをするときはレゴブロックを使う方法もあるのですが、こちらの動画はアクリル板を使っています。
今回はこちらの動画を参考に作成しました。
(私も早くこんなきれいなキーキャップ作れるようになりたい。。)
それでは、型取り編ということで作業内容紹介していきます。
用意したもの
ホームセンター
- アクリル板
- アクリルカッター
- 穴あけビット
- 接着剤(シリコン用)
セリア
- 樹脂粘土
- ラッチェットドライバー
- 接着剤(アクリル板用)
アマゾン
- シリコン
作業時の注意点
硬化前のシリコンを触る場合は手袋を着用したほうがいいです。
(素手を作業してしまったのですが、手が荒れました。。)
また、シリコン硬化中に体によくないものが出るようなので換気をお忘れなく。。
型取り枠の作成
器用ではないので。。。方眼紙に直方体の展開図を作成する。
シリコン型取り
分かりにくくすみません。
左側は底にキーキャップを接着させ、シリコンを流し込んでいます。
詳しくは上のリンク先の動画を見ていただければと思います。
右側は下に粘土を敷いて(レジンでアートするための空間を確保する)、シリコンを流し込みました。
ただ、粘土とシリコンの境目でシリコンが固まらず失敗しました。
(おそらく、樹脂粘土ではなく油粘土でやらないといけないようです、後日挑戦します)
粘土なしでシリコンを入れて固まったもので以降は進めます。
こちらがシリコン型の完成品になります。
キーキャップ作成のための細工
シリコンは通常の接着剤ではひっつかない。。
シリコン用のものをホームセンターへ買いに行きました。
レジン液を注いで、キーキャップを作成するのですが、その際の細工をしました。
ラチェットドライバーに穴あけ用のビスを指して、手でくるくるさせながら開けました。
やっと型の完成です~
下の型にレジンを流して上の型で蓋をして使います。
さー明日からレジンを流してみるぞ~
ちなみに、予算ははるかに送料を上回っているので、キーキャップをお得に手に入れたい方は、自作はおすすめできません。。。
カフェネストさん
大阪谷町にあるショートケーキの美味しいカフェネストさんが1月末をもって営業終了となるようです。😢
いちごのショートケーキが一番好き、ベーグルもコーヒーも美味しい。
#大阪カフェ#谷六カフェ#カフェネスト#いちごショート 🎅🤶1月31日をもって終了だよ、まだまだ行く🏃♂️🏃♀️
もう、あの味が食べることができないと思うと、とても残念です。 次はどこでやられるのかな。