ともだちはすくないです

30代既婚男子。子供2人。日経先物トレードとかプログラミングとか英語とか

ひさしぶりのGWの朝

GWもあと2日になりました。ブログを書くのも久しぶりです。2ヶ月ぶりですね。

この2ヶ月は僕にとって人生で最も大きな変化があった期間となりました。大きな変化って何かといいますと転職です。いままで10年近く勤めた金融機関を4月末で退職し、生活の拠点を地元に近い名古屋に移し、5月月初から新しい職場で働いています。僕は33歳なのですが、特別なスキルもあるわけでもないのに、よくこの歳で転職できたなあというふうに思っています。ほんとに運がよかったなと。自分はいわゆる社内SEのキャリアが長いのですが、ちょうどいまIT関係は人手不足の企業が多いようで、無事に第一志望の会社に内定をもらうことができました。転職元の会社から退職金もいただきました。(少ないけど)

トレードはほとんどしていません。4月はオプションの売買を2回やってみただけで利益は3千円でした。5月はGW中に暇だったのでFXを少しやって利益は現在のところ3万円です。ちなみに現在は日経CFDで売りポジションを持っていますが、日経は19730円まで上がってますね。21000超えたらさすがに損切りしますが、そこまでは持つつもりです。というかさっさと損切したほうがよいのか。俺みたいに考えてる人が大量に養分になって上がっていきそうな気もしてるけど。

トレードすると僕は他のことに集中できなくなるのでしばらくお休みするつもりでいます。新しい職場では海外とのやり取りが頻繁にあるようなので英語をまじで勉強しなきゃいけません。頑張ります。自転車も買ったしジムに行きます。しばらく休んでるうちに鈍った身体を元に戻さないと。英語の勉強は必死でします。そしてマストドン構築とPythonの勉強は継続します。

ここから自分の人生の第二章みたいなもんです。僕と家族が少しでも幸せになれるように、無理せず頑張ろうと思います。

pythonで表示した2軸チャート画像を添付ファイルにしてメール送信する。


前回の記事では2つの指標(記事内では米金利と日経)の比較チャートを作成しました。

trade-and-develop.hatenablog.com



そして思ったのです。これ、色んな指標を比較するから、その度にチャート画像を保存するのもめんどくさいし、通勤時間などの隙間時間にスマホでまとめて見たい、と。そう思った僕は昨日の夜も妻とお酒を飲みながら、PCに向かいひたすらに調べまくっていました。なかなか手間取りました、うまく自分のGmail宛てに、チャート画像を添付ファイルとして送信することが出来ましたのでメモしときます。




まず、チャート画像のメール送信とは以下のステップで実現できそうです。


1,チャートを作成する。

2、チャートをPC上に保存する。

3、PC上に保存したファイルを添付してGmail送信する。




1の「チャートを作成する。」は前回の記事で行なったので、今回は2と3をメモします。




2、チャートをPC上に保存する。

これは簡単です。チャートを作成(プロット)した後で以下のコードを追加すればOK。これでターミナルで作業しているフォルダに画像が保存されます。念のためですが以下の「sample.png」は保存されるファイル名です。そのため任意で良いです。

plt.savefig("sample.png")


3、PC上に保存したファイルを添付してGmail送信する。

さて、ついに保存したファイルを添付ファイルとしてGmail送信するところです。まずはチャート画像を保存した後に以下のコードを挿入します。ここから「sendGmailAttach」というモジュールを呼び出すことでメールを送信します。

if __name__ == '__main__':
    to = 'xxxxxxx@gmail.com'  # メール送信先
    sub = 'xxxxxxx' #メールタイトル
    body = ''  # メール本文(今回は画像送信のため、本文なし)

     # nameは送信されたときの添付ファイル名。pathは添付するファイルが現在格納されているパス。(ファイル名も必要)
    attach_file = {'name': 'sample.png', 'path': '/Users/user_name/Desktop/trade/sample.png'} 
    sendGmailAttach(to, sub, body, attach_file)




さて、次にメールを実際に送るプログラムです。

from email.mime.text import MIMEText
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart


class sendGmailAttach:
    username, password = 'xxxxxxx@gmail.com', 'xxxxxxxx'

    def __init__(self, to, sub, body, attach_file):
        host, port = 'smtp.gmail.com', 465
        msg = MIMEMultipart()
        msg['Subject'] = sub
        msg['From'] = self.username
        msg['To'] = to

        # メール本文
        body = MIMEText(body)
        msg.attach(body)

        # 添付ファイルの設定
        attachment = MIMEBase('image', 'png')
        file = open(attach_file['path'], 'rb+')
        attachment.set_payload(file.read())
        file.close()
        encoders.encode_base64(attachment)
        attachment.add_header("Content-Disposition", "attachment", filename=attach_file['name'])
        msg.attach(attachment)

        smtp = smtplib.SMTP_SSL(host, port)
        smtp.ehlo()
        smtp.login(self.username, self.password)
        smtp.mail(self.username)
        smtp.rcpt(to)
        smtp.data(msg.as_string())
        smtp.quit()



ハマった点は以下。

 msg = MIMEMultipart()

これをやってないと以下のエラーで怒られます。

email.errors.MultipartConversionError: Cannot attach additional subparts to non-multipart/*



もうひとつ

encoders.encode_base64(attachment)

これをやってないと以下のエラーで怒られます。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte




ということでプログラムを動かすと無事にチャートが添付ファイルとしてメール送信されておりました。いや、こんな簡単なコード書くのに数時間かかったぜ。。日本語での正確な情報少なかったので誰かの助けになれば!!!以下がGmailから添付ファイルを開いたときのスクショです。

f:id:trade-and-develop:20170312145758p:plain

pythonで2つの指標を比較してみる

こんにちは。転職活動もそろそろ佳境に入ってきた筆者です。おかげさまで転職活動は割りと順調に進んでいます。聞くところによると現在の求人数はリーマンショック前を上回るようです。そりゃ株価がこれだけ高ければ、やはり企業は調子がいいのでしょう。問題はこの好景気がどこまで続くかだけど、こればっかりは分からないね。俺とか転職エージェントの人とか企業の採用担当者みたいな経済の素人でさえも、「近いうちに不況になる」と思ってるから、そんなものはしばらく来ないのかもしれない。こればかりは分かりません。考えても無駄です。それが来た時にどうするかを考えましょう。



さて、本日は複数の指標を一つのグラフで比較してみました。日経とダウとか、日経と為替とか。日経とVIXとか。そんなときに便利ですが調べるのに時間かかったのでメモ。



まず2軸のグラフを作成するコードは以下のとおり。まず一つ目の軸をsubplotとして作り、その一つ目のグラフを「twinx()」することで2つ目の軸を作成する。

fig, ax1 = plt.subplots()
ax1.plot(x1,y1)

ax2 = ax1.twinx()
ax2.plot(x2,y2)



ということで「yahoo finance」から取得した米金利と日経を同じグラフに載せてみました。1990年からの長期チャートです。コード全文は以下。

import pandas_datareader.data as web
import matplotlib.pyplot as plt
import datetime

# 取得する日の範囲を指定する
start = datetime.datetime(1990, 1, 1)
end = datetime.datetime(2017, 3, 10)

# 指標の名前を設定(タイトルとラベルで使用)
a = "TNX"
b = "NIKKEI"

# Yahoo ファイナンスから、 米金利と日経のデータをとってくる。
f = web.DataReader('^TNX', 'yahoo', start, end)
d = web.DataReader('^N225', 'yahoo', start, end)

# データの日付
fs = f.index
ds = d.index

# 一つ目(米金利)のグラフ作成
fig, ax1 = plt.subplots(figsize=(20, 8))
ax1.plot(fs, f['Close'], color='g', label='${0}$'.format(a))
ax1.legend(loc='upper left')

# 2つ目(日経)のグラフ作成
ax2 = ax1.twinx()
ax2.plot(ds, d['Close'], color='r', label='${0}$'.format(b))
ax2.legend(loc='upper right')

plt.title("{0} / {1}".format(a, b))
plt.show()

結果はこちら。

f:id:trade-and-develop:20170311144038p:plain






ちなみにグラフを反転させるときは、反転させたいプロットのところで以下の文を挿入するとOK。日経とVIXを比較するときなんかはVIXを反転させたほうが見やすいと思う。

plt.gca().invert_yaxis() 



こうやっていろいろ遊んでるけど、なかなかシステムトレードのロジックを作るのは難しいなあと感じている今日この頃です。

mysqlに接続できない

こんにちは。久しぶりにシステム関係のブログを書きます。

mysqlにログインできないときってありますよね。僕の場合は久しぶりにmysqlを使おうとするとなぜかログインできません。自分の場合はこうやると使えるようになります。


エラー内容

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


解決:ソケットファイルを作成。

$ sudo touch /tmp/mysql.sock



エラー内容

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)


解決:権限を変えてやる。

$ sudo chown -R _mysql:_mysql /usr/local/var/mysql




スタート

$ sudo mysql.server start

mysql -uroot

2月のトレード実績

こんばんは。最近あまり状態がよくなかった筆者です。今月は割りと調子よくて転職活動もはじめっちゃったりしてたんですが、3日前の日曜日から急に調子悪くなりまして、この3日間ほとんど家から出ておりませんでした。ついでに風呂にも入らず家族ともほとんど会話せずといった状態の悪さでした。いまはやっと回復して近くのスタバでブログを書いております。


さて早いもので2月も終了です。先月、たまたま利益が出たから書いたトレード実績ブログに引き続き、今月もトレード実績ブログを書きたいと思います。これを書くということは、そう利益が出ているということですw

ちなみに先月の実績はこちら。
trade-and-develop.hatenablog.com



さて今月の実績は以下のとおりです。弱小、休職中サラリーマントレーダーとしてはまずまずかと。去年の年始からトレード初めて2ヶ月連続プラスって初めてな気がします。ちなみに累計とは2017年の累計です。

【全体】
累計 +258,338円
今月 +79,754円


(スクショは2017年の累計損益です)

先物OP】
累計 +215,112円
今月 +105,724円

f:id:trade-and-develop:20170228201715p:plain


うーん、先物部門がマイナスになっています。あれ、先月時点で先物はプラス10万円以上あったんだが。。そのかわりオプションで大きな利益が出ています。もう先物やめてオプションだけにしたほうがいいような気がしています。


【FX】
累計 −16,700円
今月 −25,970円

f:id:trade-and-develop:20170228201825p:plain



【CFD】
累計  +59,926円
今月 取引なし

久しぶりにヤバそうなのが来た

どうもこんにちは。現在の会社を休職中で転職活動をしておりpythonを勉強している筆者です。先日、2月の給料が振り込まれましたが普段の8割くらいでした。有給が切れたからかな。こでじゃ3月の給料は入らないのか?まあ働いてないから仕方ないけど。まず傷病手当金の申請しなきゃ。しかし会社の健康保険組合のホームページ見たら、傷病手当金て申請してから支給まで最低でも2ヶ月かかるって。。これのどこが生活保障だよ。終わってるわ。



定期的に来る家庭イヤイヤ期でもあります。こんな時でもまったく自分でお金を稼ごうとしない嫁。。どんだけ人任せなんだよ。。専業主婦って終わってるわ。20代前半で結婚したのはまじで失敗だった。今30代前半の俺らは親がバリバリの専業主婦世代だからしょうがないかもしれないが、これから嫁は稼げるとしてもパートで年100万円。パートって仕事も減っていくだろうから、これからはそれすら厳しかもしれない。そんな女性の生活費を一生負担していくってどんな罰ゲームだよ。。勘弁してくれ。(いまは子どもが小さいから、子育てをあまりやってない俺が稼ぐのは当然だと思ってるが。)



ということで毒を吐きました。久しぶりに悪い感情が襲ってきてます。昨日までは元気だったんだけどな。こんな状態じゃ転職活動うまくいきっこない。はあ、もうやだ。久々にメンヘラって色んなことにすごく苛ついてます。明日になれば元気になるんだろうか。

python pandasの添字「[0:1]」と「iloc[0]」の違いについて

転職活動中ですが、相変わらずpythonのプログラム書いて遊んでます。さて今回は表題のことが気になったので試してみました。両方ともリスト(配列)の1レコード目を持ってくるという意味っぽいですが何が違うのでしょうか。サンプルのテストコードは以下のとおり。ちなみに完全に自分用のメモです。

import pandas.io.sql as psql

#データベース「nikkei」の「nk225days」テーブルから日時順に並び替えて、「年月日、時刻、終値」のデータを取り出す。
conn = mysql.connector.connect(user='root', password='yashiro3', host='localhost', database='nikkei')

sql = """SELECT date,time,start,end FROM nk225days WHERE end  <>  0 AND date > '20120101' order by date asc,time asc ;"""
n225fm = psql.read_sql(sql, conn) 

da0 = n225fm[0:1].date  # 1レコード目の日付
da1 =  n225fm.iloc[0].date

print(n225fm)

print("n225fm[0:1] = {0}".format(da0))
print("")
print("n225fm.iloc[0] = {0}".format(da1))


出力結果はこのとおり。その値だけを取り出したいときは「iloc」を使って指定するんだね。「[0:1]」って指定をすると確かに1レコード目が取り出されるんだけど、インデックス番号やら型情報も取り出すようです。

            date     time  start    end
0     2012-01-04 09:00:00   8535   8540
1     2012-01-04 16:30:00   8525   8505

(省略)

n225fm[0:1] = 0    2012-01-04
Name: date, dtype: object

n225fm.iloc[0] = 2012-01-04