エンジニアリングとお金の話

都内で働くエンジニアの日記です。

【投資】ベトナム株に投資してみようと思う

今年は8月のチャイナショックでビビってしまい株式投資から距離をおいていた。ノーポジションは精神的に楽なのだがそろそろ刺激を求めて相場に戻ろうと思う。

最初は日本株を検討していたが、何も材料が無い現在の状況では進んで買いたいと思う銘柄を見つける事が出来なかった。どうしようかなと悩んでいた時に、twitterでwww9945さんがベトナム株を購入している事を知り興味半分で調べてみる事にした。

ベトナム株はSBI証券で346銘柄購入する事が出来る。全ての銘柄を確認してみたが日本株と比べると圧倒的に割安な銘柄多かった。また、TPPが発動された際に一番恩恵を受けるのがベトナムらしい。この間見たテレビで中国からの工場移転が進んでいると言う話も聞くので今後伸びて行くのでは無いかと思う。

ただ、購入材料となるのがチャートと財務諸表しか無いのが難しい。財務諸表もジェットコースターみたいな物が多く、前年から100%売上げが上がったり下がったりと正直意味分からんといった感じである。一旦、30銘柄ぐらいに的を絞り購入対象を決めるようにしていきたい。

【感想】学ぶ意味について

この記事を読んでいてすごく考えさせられた。

そんなにプライベートを犠牲にして大丈夫

自分もエンジニアの端くれとして毎日技術書を読んだり、プログラムを書いたりとスキルアップに励んでいる。ただ、この記事に書かれている様に自分のプライベートを犠牲にしながら学んでいるというのが現状だ。24時間という時間の中で仕事を行いながら、新しい知識を習得するというのは非常に骨が折れる作業である。

何故プライベートを犠牲にしてまで学ぶのかというとエンジニアとしていつまでも活躍し続けたいという思いが大きい。ただ、新しい技術が生まれる度に古い技術が淘汰され自分が投資した時間がムダな物となっていくのはやはり辛い。新しい技術が出てきて今まで出来なかった事が簡単に出来る様になる事は素晴らしい事であるが、毎回知識の習得を求めれる事については終わりの無い戦いに挑んでいる様な気がしてならない。

ダーウィンの進化論みたく、変化に最もよく適応出来るのが優秀なエンジニアに求めれるスキルだと思う。ただ、人は必ず老いていくものである。また、結婚や子供が生まれる等により仕事が人生に占める割合も変化していく物であると考える。

自分も30半ばに差し掛かり残りの人生を仕事とプライベート共に充実させる為にどの様にしていくか考えて必要があるなと感じる。惰性的に学ぶのでは無く自分が目指す姿を実現する為に学ぶという事を意識していきたい。

【技術】Rails TutorialをやってDjangoでいいやと思った

WEBで何かを作る際はpythonを使用している事もありフレームワークDjangoかFlaskを選択している。ただ、WEBアプリケーションといえばRuby on Railsという感じもある為、試しに触ってみる事にした。

Railsについては何も知らない為、参考書にはhttp://railstutorial.jp/を使用する事にした。Rails TutorialはRailsを使用する為の環境構築からGitやテスト駆動開発を用いた開発手法のやり方までとRailsを使用する際のベストプラークスが書かれた資料である。無料でこれだけのものが提供されているのは非常にありがたい。

Rails Tutorialは全部で11章で構成されている為全部通すと結構なボリュームとなる。自分は一週間程度掛かかった。一通り通してみて感じた感想は↓な感じである。

rails generateを使用する事にcontrollerやmodelを自動生成出来るので楽

・ディレクトリ階層もすっきりしていてわかりやすい

・ルーティングも自動的に設定してくれる

ActiveRecord便利

とWEBアプリを作成するのであれば確かに最高なフレームワークだと思った。

ただ、なんだかなーと思ったのはRspecである。Rails Tutorialはテスト駆動開発を用いている為、とりあえずテストを書いてアプリを実装するという流れで構成されている。テストを書く際はRspecというGemを使用しているのだが独自のDSLで書かれている事もあり、正直よく分からなかった。Rails Tutorialも半分ぐらいがテストの書き方についての記述となっており、Railsの機能だけを理解したい自分としてはちょっと冗長かなと感じた。あと、Asset Pipelineも便利な機能なのかもしれないけど無駄に複雑にしている気がしてならかなった。

で、結論としてはRailsで出来る事はDjangoでも出来るのでやっぱpythonでいいやという事に結論に達した。pythonに慣れた自分としはメソッドの終わりにendを書かないといけないのが地味に辛かったりしたのも理由の一つかもしれない。。

あと、Rails Tutorialを通して初めてHerokuやSassを触ってみたがすごく便利という事が分かった。これは活用していきたい。

【投資】実力に応じた投資をするということ

昨日、日経平均が-597円下げて取引を終えた。今年2番目の下げ幅だったらしい。98%の銘柄が下げたとの事なのでほぼ全面安といえる。

自分は前回の7月9日〜10日に株主優待銘柄の一部のみ残しほぼ現金で確保していた為、-15万円程度のマイナスで済んだが全力買いをしていたらとんでもない事になっていたと思う。相場に自信が持てない時は何もしないのが一番だなと感じた。

ちなみに、7月9日の下落時は保有している銘柄が-300万円分程値下がりし危険を感じた為ほぼ投げ売りに近い感じで売却を進めた。今見返したら7月9日〜10日の間で58銘柄も売却していた。ポートフォリオから銘柄を選んでは、成り行きで売却するという作業を淡々としていた記憶が蘇ってきた。

f:id:hatakazu93:20150822135537p:plain

売却後の値動きについてだが、その後大きくリバウンドしほぼ値を戻していた。その際は正直すごく悔しかったが今は静観するのがベストだと自分に言い聞かせて参加を見送る事にした。

f:id:hatakazu93:20150822141338p:plain

この事から言えるのは、一度暴落した後もある程度はリバウンドするという事である。ただ根本的な原因(この時は中国の暴落がきっかけ)が解消しない限りはいずれ暴落に巻き込まれるという事である。前回の下げよりも今回の下げの方が窓を開けて下げている分投げ売りに近い形になっている事が想定される。

f:id:hatakazu93:20150822144339p:plain

金曜日NYダウが-530ドルで引けた事もあり、月曜日も売りで始まるのでは無いかと考える。どこまでこの下げが続くかという事だが、前回安値の1万9000円を割るかどうかに掛かっていると思う。1万9000円を割ったら最悪1万8000円ぐらいまでは下がる事を意識しておいた方がいいかもしれない。底なし沼の感じになりつつあるので手出しをしない方が得策と考える。

多分上級者の人であれば、リバウンドを取りに行ったり、空売りで責めたりと色々と手を打つ事が出来ると思うが自分はまだその域まで行っていない。その為、決して無理をせずに自分が勝てると思った相場のみエントリーするように心がけて行きたい。

【技術】ローカル通知とリモート通知を勘違いしていた件

昨日、parseのプッシュ通知で動作確認が出来たので早速ジオフェンスアプリと組み合わせてみる事にした。自分がやりたいのはジオフェンスの内側に入った際に画面に通知を出す機能でありネットで調べれば直ぐにサンプルが出てくるだろうと思っていた。

とりあえず、「parse プッシュ通知 送信」でググってみたけどアプリ側からプッシュ通知を起動する方法が分からなかった。色々な単語で30分程調べていると、どうもプッシュ通知はリモート通知とローカル通知の2種類に分かれており、parseみたいにサーバから通知が届くのがリモート通知で自分の端末だけで完結するのがローカル通知とのこと。自分がやりたいジオフェンスと組み合わせた通知はローカル通知で実装する必要があるということがやっと分かった。ちなみにAppleのプログラミングガイドにもちゃんとその旨が書かれており、やっぱ調べてから取り掛からないとダメだなと思った。

ちなみに、色々調べていたらこのブログに自分がやりかった事が記載されていた。なお、ios8からLocation Notification という機能が新しく追加されて位置ベースの通知機能を構築するのが凄く簡単になったらしい。ジオフェンス+通知機能で構築する必要があるものだと思っていたので衝撃だった。思い込みで開発しちゃダメだなと反省した一日だった。

【技術】parseのプッシュ通知機能を使用してみた

以前作成したジオフェンスのサンプルアプリにpush通知機能を追加したいと思い色々調べてみた。その結果、parseのpush通知機能を使用する事にした。

プッシュ通知機能を使用する為には、parseに登録を行う為の証明書ファイルと端末にインストールする為のプロビジョニングファイルの作成が必要である。作成の手順は↓で行った。

  1. キーチェーンアクセスで証明書請求ファイル(CRS)を作成
  2. Dev CenterのIdentifiersでApp IDを作成し証明書ファイル(CER)を作成する
    (Explicit App IDで作成しPush Notificationsにチェックを入れる。Development SSL Certificateに1で作成した証明書請求ファイルをアップロードし証明書ファイルを作成)
  3. 証明書ファイル(CER)をダウンロード。ダブルクリックしキーチェーンアクセスに登録する
  4. キーチェーンアクセスよりファイル書き出しを行い.p12ファイルを作成する
    (この際にパスワードの設定を求められるが何も設定しない)
  5. Provisioning Profilesを作成しダウンロードし、xcodeに登録
    (TARGETS→Info→Custom iOS Target Properties→Bundle identifierに2で作成したBundle IDを設定)
    (TARGETS→Build Settings→Code Signing→Provisioning Profileに3で登録したProvisioning Profileを設定)
  6. parseにてアプリを作成しSettings→Push→Select your certificateにて4で作成した.p12ファイルを登録する

後はQuick Startに記載されているコードを記述すればpush通知機能をテストする事が可能となる。
登録の手順自体は覚えてしまえば何て事ないのだが、意味を調べながら行ったので丸一日掛かってしまった。他のmbassもpush通知機能を提供しているの試してみる様にしたい。

【技術】投資シュミレーションツールが出来た

以前より作成していた投資シュミレーションツールが完成した。思っていたよりも規模が大きくなってしまい時間が掛かってしまった。

作成したモジュールは全部で6つとなったそれぞれの役割は↓な感じである。

  • MoneyManage.py(購入資金管理用)
  • Stock.py(株式購入判定情報取得用)
  • Trade.py(株式購入判定用)
  • dateTools.py(日付取得用)
  • stockCode.py(証券コード取得用)
  • stockPrice.py(証券価格取得用)

https://github.com/hatakazu/financeTools

処理内容はTrade.pyで対象期間分処理を繰り返し、その際に購入判定処理と売却判定処理を実施し条件に合致したら処理を実施するという内容である。今回は初期資金500万円で2015年1月1日〜8月1日までで処理を実施する事とした。なお、売買条件は株価が10日間の標準偏差より下がった場合に購入し、その後株価10%値上がりか、10%値下がりした際に売却を行う。Trade.pyの内容はこんな感じである。

#-*- coding:utf8 -*-
from Stock import Stock
from MoneyManage import MoneyManage
from dateutil.relativedelta import *
from dateutil.rrule import *
from datetime import datetime
import dateTools

class Trade():
    def __init__(self,funds):
        self.money = MoneyManage(funds)
        self.stock = Stock()

    #購入判定処理    
    def buyDecision(self,code,day):
        #始値を取得
        startPrice=self.stock.currentStartPrice(code,day)
        #終値を取得
        endPrice=self.stock.currentEndPrice(code,day)
        #標準偏差(10日間)を取得
        std=self.stock.singleStd(code,day,10)

        #始値から標準偏差を引いた分より終値が下回った場合購入
        if (startPrice-std) > endPrice: 
            buyDay = dateTools.dateNext(day)
            buyCount = 100
            buyPrice = self.stock.currentStartPrice(code,buyDay)
            self.money.buy(buyDay,code,buyPrice,buyCount,1)

    #売却判定処理    
    def sellDecision(self,day):
        #保有銘柄分処理を実施
        for key,value in self.money.stockHold().items():
            #現在株価を取得
            currentStockPrice = self.stock.currentStartPrice(key[1],day)

            #株価が購入時より10%値上がりした際に売却
            if int(value[0])*int(value[1])*1.1 < int(currentStockPrice) * int(value[1]):
                self.money.sell(key[0],key[1],currentStockPrice)
            #株価が購入時より10%値下がりした際に売却
            elif int(value[0])*int(value[1]) * 0.9 > int(currentStockPrice) * int(value[1]):
                self.money.sell(key[0],key[1],currentStockPrice)

def main():
    #初期資金(500万円)を登録
    trade=Trade(5000000)
    #対象期間分処理を実施
    for day in dateTools.dateRangeWeekday(20150101,20150801):
        #トヨタ(7203)にてトレードを実施
        #購入判定処理
        trade.buyDecision(7203,day)
        #売却判定処理
        trade.sellDecision(day)
    print trade.money.show()

if __name__ == '__main__':
    main()

処理結果

***************************
money       :435500      #現金保有額
stockPrice :3970500       #株式保有額
totalPrice  :4406000      #総額
***************************

結果としては、現在の売買条件では60万程マイナスになる事が分かった。簡単に投資シュミレーションが出来るのは凄く便利である。勝てる条件を検討し今後の投資に役立てて行きたい。