FX, EURUSD(ユーロドル), 2018/05/18

【メモ】

4時間足の下降トレンドが一旦終了して、大きく戻してからのもう一段の下げ途中だった。

4時間足の短期移動平均線(1時間足の中期移動平均線)への戻しからの戻り売り。

基本的に週持ち越しはしたくない(本日は金曜日)し、既にお酒を飲んでいたこともあり、節目到達で利益確定した。

節目を抜けかけていた(1時間足で見た感じは抜けてる)ので、この後ニューヨーク時間にかけて大きく下がるかもしれないが、利食い千人力ということで。

欲張らずにまた来週。

下手したら、節目を抜けると見せかけて反発し、ダブルボトムを作って上昇という可能性もあるし。

FX, GBPUSD(ポンドドル), 2018/05/15

【メモ】

4時間足の大きな下降トレンド終了からの横ばいが続いていた。

日足の短期移動平均線が追いついてきて、もう一段下げそうな局面になっていた。

1時間足でヘッドアンドショルダーズを形成したところでショート。

レートが大きく戻してきたので、建値決済で逃げてから再エントリーした。

まだ数日レンジが続く可能性もあるので、ポジション2分割で、片方はレンジの底で決済し、もう片方は様子を見て伸ばす予定だった。

しかし、急激な下降が生じたため、急反発で含み益がごっそり無くなるのを恐れて全決済した。

結果的に、レンジの底には到達した(これを書いている時点では、さらに下降するかは不明)。

ちょっと焦って早く決済し過ぎたかもしれない。

結果論かもしれないが、これだけ勢いがつけば一旦レンジの底を試すだろうと思い、落ち着いてもう少し待てば良かった。

なんにせよ、デイトレードとしてはまずまずの利益が出たので良しとしよう。

ユーロドルも売りたかったし、こちらの方がキレイに下げたが、既にポンドドルを全力で売っていたので売れなかった。

FX, EURUSD(ユーロドル), 2018/05/11

【メモ】

4時間足レベルの下降トレンド終了後の戻しを取りに行った。

ダブルボトムのネックラインでさらに小さくダブルボトムからのネックライン抜け。

金曜日の夜なので、早めの利益確定。

結果的にプラスだが、早めに利益確定することを考えると、損切り幅を大きく取りすぎた。これではリスクリワード比率が悪いので気をつける必要がある。

FX, USDJPY(ドル円), 2018/04/03

【メモ】

4時間足の高値切り下げ、安値更新が見えつつある場面で、1時間足の直近安値割れの位置に逆指値の売り注文を入れて就寝。

夜間に注文が通って、1時間足・4時間足の短期移動平均が共に水平から下向きに。

起床したときには、利益を確保した状態で損切が移動していた。

そのあと大きく戻して、含み益をごっそり吐き出して決済。

勝ちだが、小さい利益。

日足が押し目買いのポイントに見え得るのに注意して決済を早めるべきだったかもしれない。

就寝前でチャートを見れないということも考えると、直近の上昇トレンドのブレイクラインに指値注文を入れておけば良かった。

FX, GBPUSD(ポンドドル), 2018/03/21

【メモ】

週足は、上昇中の短期移動平均と水平の節目ラインに支えられて上昇中。

日足の短期移動平均は上昇から一旦下降して水平気味。

4時間足の短期移動平均は上向き。水平の節目ラインに支えられて 安値切り上げが見えつつある状況。

1時間足で、安値切り上げ、高値更新して、短期移動平均が水平から上向きに確定したところでロング。

直後に強い陽線。VPSで動かしている決済用の自作プログラム(EA)が建値の少し上に損切りを移動させる。

さらに大きな上昇を期待していたし、するかもしれないが、頭が節目に引っ掛かったので利益確定。

毎月資金の追加がある場合の複利計算をするプログラム

投資をするときに、初期資金・月利・毎月追加する資金を固定すると、nヶ月後の資金がどうなるか、様々なパターンでシミュレーションするプログラムが欲しかったので書いてみました。

例として、初期資金200万円、月利10%、毎月20万円を追加することにしてシミュレーションすると、3年で1億円を超えました。税金は考慮に入れていないです。

Reactで作ったアプリにFirebase Authenticationでログインを実装

結論から言うと、index.jsでonAuthStateChangedを実行して、コールバックが返ってきてからReactDOM.renderを実行です(詳細は後述)。

はじめはcomponentWillMountでfirebaseのonAuthStateChangedを実行しようと思いました。

調べてみると、そのようにしている情報ばかりが出てきます。

しかし、少し試してみると、問題に気づきました。認証されてコールバックが返ってくるのがReact Componentのライフサイクルが終わってからになってしまうのです。

設計がFluxになっている場合、これは大きな問題になります。

Fluxの場合、Storeが更新されたらViewも更新するという流れなのですが、React Componentのライフサイクルの後に認証情報が返ってきてしまうと、その認証情報でStoreを更新した後に、もう一度React Componentのライフサイクルが始まるということになります。

componentWillMountやcomponentWillReceivePropsでたいした処理をしていないのなら、ちょっと無駄なことをしてるけどまあいいかで済みますが、大きな容量のデータを取得する処理を入れていれば、無駄なデータ転送をした上に、(目で見て分かるレベルで)表示の遅延も起きます。

さらに、認証が通っていないと表示してはいけないページがあった場合にどうしようか悩みます。ちょっと微妙ですが、認証情報がpropsに渡ってこなかったら、一旦render() { return null; }としておいて、認証情報が渡ってきてから表示するという手があります。しかし、認証が通っていなかったらリダイレクトさせたいという場合に困ってしまいます。また、そのページのcomponentWillMountやcomponentWillReceivePropsが認証が通っていなくても実行されてしまうのも良い気がしないですね。

キレイにFluxで設計しきることを諦めて、認証情報とそれに関する処理だけ別で実装することで解決することも可能かもしれませんが、そういうイレギュラーなことをするとバグの元凶になり得ますし、メンテナンス性が悪化してしまいます。

そこで、そもそもReactDOM.renderするのを、認証が通った後にすれば良いという結論に至りました。

firebaseに関しては、

/src/services/firebase.js

import * as firebase from 'firebase';


if (!firebase.apps.length) {
  const config = {
    apiKey: API_KEY,
    authDomain: AUTH_DOMAIN
  };

  firebase.initializeApp(config);
}

const auth = firebase.auth();

export {
  auth
};

こんな感じで準備をしておき、

/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';

import { auth } from './services/firebase';


auth.onAuthStateChanged((authUser) => {
  // ここで
  // store.dispatch(setAuthUser(authUser));
  // のように、storeの認証情報を更新する

  ReactDOM.render((
      // ここにルートとなるcomponentを書く
  ), document.getElementById('root'));
});

とすれば、storeに認証情報が保持されてからReact Componentのライフサイクルが始まるので問題は起きません。

認証が通っていないと表示してはいけないページは、componentWillMountでstoreを参照し、認証情報がなければログインページにリダイレクトすればいいだけです。