IntelliJ でFlutter 開発できるようにする
IntelliJ でFlutter開発できる環境をセットアップするまで。
環境
1. Flutter のセットアップ
Flutter SDKをインストール
こちらの手順に従っておけば大丈夫
FlutterをインストールするとDart SDK も自動的についてくる
アプリを作成する
とりあえず公式のサンプル通りに作ってみる。
2. IntelliJ をセットアップする
Preference > Language & Frameworks > Flutter
Flutter SDK path: にFlutter をインストールしたディレクトリのpathを設定する
Preference > Language & Frameworks > Dart
上記のpath + /bin/cache/dart-sdk
がDart SDKのpath。Dart SDK path: の項目に入力する
/{directory path}/flutter/bin/cache/dart-sdk
Run > Edit Configurations... を設定する
+
ボタンからFlutter
を選択し、適当な名前とDart entrypoint を設定する。
公式のサンプルに従っている場合、/{directory path}/my_app/lib/main.dart
でいいはず。
3. 実行してみる
ここまでセットアップすると、ビルド時の項目にSimulatorの項目も追加されているはず。あとは先ほど設定した実行プロファイルを選択して走らせてみよう。
コードを編集したのち保存するか、⚡️アイコンを押すとHot Reload ができる。
Unity: スクリプトから生成したオブジェクトにEventTriggerをアタッチする
Unityで生成されたオブジェクトにEventTriggerをアタッチする方法をメモとして残しておく。
やりたいこと
- スクリプトからGameObjectを生成する
- 生成されたオブジェクトをクリックしたときにイベントを発生させたい。
オブジェクトを生成する
とりあえず立方体オブジェクトを生成してみる。
1. 空のGameObject (BoxGenerator) をシーンに生成
2. コンポーネントに以下のスクリプトを貼り付ける
今回はクラス名をBoxGeneratorとした。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoxGenerator : MonoBehaviour { public GameObject box; // Start is called before the first frame update void Start() { Instantiate(box, new Vector3(0, 0, 0), Quaternion.identity); } // Update is called once per frame void Update() {} }
3. スクリプトのboxにPrefabを参照させる
生成したいオブジェクトを選択する。
シーンを実行すると、ちゃんと生成された。
次はこのオブジェクトにEventTriggerを付与してみる。
EventTriggerを加える
1. EventSystem
を生成する
UI>Event System
からシーンに追加する
これが存在しないと正しくイベントを処理できないので注意!
2. CameraにPhysics Raycaster
コンポーネントを追加する
これによりCameraを通じて、ポインタの位置から直線上にあるオブジェクトを判別できるようになる。
3. 生成するPrefabにColliderを設定する
以下の二点を確認する。
- 何らかのColliderが存在している
- Is Trigger
が有効になっている
これらを付与することによって、先ほど設定したPhysics Raycaster
の判別対象になる。
4. 発生させるイベントのスクリプトを用意する
今回はクリックした場合に何かを起こすスクリプトを付与したいので、以下のような物を用意する。
今回はクラス名をTestEventTriggerとした。
using UnityEngine; using UnityEngine.EventSystems; public class TestEventTrigger : EventTrigger { public override void OnPointerClick(PointerEventData eventData) { Debug.Log("Box is clicked"); } }
注意点としては、
- using UnityEngine.EventSystems
を参照していること
- EventTrigger
を継承したクラスであること
- 起こしたいイベントに対応するメソッドをoverride
すること
他の利用可能なメソッドについてはこちら
5. 生成したオブジェクトにアタッチする
先ほど作ったBoxGeneratorを改造する。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BoxGenerator : MonoBehaviour { public GameObject box; // Start is called before the first frame update void Start() { GameObject boxObj = Instantiate(box, new Vector3(0, 0, 0), Quaternion.identity); boxObj.AddComponent<TestEventTrigger>(); } // Update is called once per frame void Update() { } }
Instantiate
の結果を変数に格納するAddComponent
メソッドから、先ほど作成したTestEventTrigger
を加える
シーンを実行し、オブジェクトをクリックするとちゃんとConsoleにログが吐かれた。
初心者でもプログラミングの力を使えば株式投資で儲けられるのか
TL;DR
目的
つい最近まで株に関する知識はゼロだったのだが、最近興味が出てきたので色々と勉強をしている。
その結果、テクニカル分析という投資判断手法が存在することが分かった。簡単にいうと、チャートの傾向などを元に投資判断を分析するテクニックである。
テクニカル分析の記事などを読むと、「ここがこうなったら買いのサインで、こうなったら売りのサインですよ」という比較的分かりやすい指標がいくつも記されており、何とも簡単に儲かりそうに見えてしまう。。
今回はその中の1つである移動平均線のゴールデンクロスという分析手法に着目し、その分析手法がマジで役立つのかどうかを実験して確かめてみる。
移動平均線のクロス
皆さんも理解してることとは思うが、株価が低い時に買っておき、高い時に売ることができれば差額で儲けることができる。 まず最初に抑えておきたいのが、株価の変動にはトレンドというものが存在していて、何日も上昇し続けたり、反対に何日も下降し続けたりする。
じゃあそのトレンドを把握するためにはどうすればいいの?ということで、よく登場する分析指標の1つに移動平均線(SMA)というものがある。
仕組みはとても簡単で、決められた日数で平均価格を算出し、それを結んだ線のことである。
上のグラフは2019年のERY株価の変動を表している。25日、75日、120日の3本の移動平均線がプロットしてある。
例えば25日移動平均線の場合、各地点から過去25日間の平均値をプロットし続けている、といった具合。
決められた日数で平滑化することによって、株価の変動(トレンド )を捉えるのに役立つ。例えば120日移動平均線が上向きに推移している期間は、「株価が上昇傾向にある」ということができる。
ゴールデンクロスとデッドクロス
ゴールデンクロスの発想は、株価が上昇トレンドへと変換したタイミングで買い、ひとしきり上がって、下降トレンドへ転換したときに売ることができれば、儲かるんじゃないの?ということである。
長期日数の移動平均線と短期日数の移動平均線を比較すると、当然ながら長期日数の方が直近の大きな株価の変動を受けにくい。
ゴールデンクロス
短期トレンドが長期トレンドを下から上に突き抜けたタイミング。株価のトレンドがここ最近で上昇トレンドに転換したことを表す。
デッドクロス
短期トレンドが長期トレンドを上から下に突き抜けたタイミング。株価のトレンドがここ最近で下降トレンドに転換したことを表す。
先程の株価について、例えば短期のトレンドを75日、長期のトレンドを120日としたとき、黄色と黒の矢印で示したタイミングがゴールデンクロス・デッドクロスという訳である。
では、このクロスに全幅の信頼を置き、機械的に判断して売買したら、本当に儲かっているのだろうか・・・?
実験
楽天証券で取り扱っている米国株 3626銘柄 (2021年1月 時点)を対象に、2018年から現在までの株価に対して、ゴールデンクロスとデッドクロスを全て見つける。
そして、買いタイミングでの株価と売りタイミングでの株価の倍率を計算した。以下のような具合である。
買い時点100円、売り時点 120円のとき、倍率は1.2倍
データソースには、pandas-datareaderを使った。(使い方は色々な方がまとめてくれているので、そちらをご参考ください)
Pythonのpandas-datareaderで株価を取得してみる① - Qiita
どの日数で移動平均線をとるかだが、私が使った教科書では「25日を短期、75日を長期」とせよとあったのでひとまずそれを参考にした。
結果
合計取引回数 15160件
1倍未満になった取引 10590件 (約70%)
損失になっている割合が過半数を超えてしまった。
ここで少し結果を眺めてみよう。青い三角は買いタイミングで、赤い三角は売りタイミングを表している。
これは成功しているパターン。目論見通り下降トレンドへ転換するタイミングで売り、上昇トレンドに転換するタイミングでしっかりと乗れていることがわかる。
そして、こちらが失敗しているパターン。このように、長い年月で見た時に下降トレンドとなっているような銘柄ではいい成果が出ていないようだ。
まとめ
テクニカル分析を行う際は、単一の指標を盲信するのではなく別の要素を絡めて判断するべき。
なので、長期トレンドの傾きを考慮したり、クロスする勢いなども合わせて考えると良い成果になりそうな予感はしている。
そして何より、株価チャートだけで判断するのではなく、企業自体の事業・業務内容などを元に絞り込んだ方が良さそうに思う。