読者です 読者をやめる 読者になる 読者になる

AWS自動売買システム EC2編

自宅にあるMac等で24時間稼働を目指してもいいのですが、流行りのクラウドでのシステム稼働を目指してみる。

 

EC2にかかる料金は、インターネットからのイン(つまりEC2へのダウンロード)には料金が掛からず、インターネットへのアウトに従量課金される仕組みになっている。

 

  • python3系のインストール
  • mysqlのインストール

主に、この二点をしなければならないのですが、後者のmysqlインストール苦戦。。。

(ちなみに、EC2はredhat)

 

結果的に、

MySQLのインストール - [Linux [Red Hatなど]/サーバー] ぺんたん info

にあるパッケージをインストールしていったことと、

MySQLのインストール - [Linux [Red Hatなど]/サーバー] ぺんたん info

にあるEC2でのパスワード設定が必要だった。(ec2-userのパスワード変更)

また、ハマっているときに調べてたくさんでてきた

/var/log/mysql/mysql.sock

みたいなやつをtouchしていて、これを消したらうまく行った。

# /etc/init.d/mysqld restart

 

TA-LIbのインストールに苦労したときに役に立ったサイト

pyalgotrade.blogspot.jp

 

おまけ

MySQLの初期設定

/var/log/mysqld.log

にインストール時にパスワード発行されているので、それをコピー

#mysql -u root -p

でそのパワードを入力する。

  mysql set password for root@localhost=password('root');

でパスワードを変更(大文字小文字数字特殊文字がないと怒られる)

その後、

  mysql> create user 'kuma'@'localhost' identified by 'bear';

とかでユーザーを作っておく。

[権限について]

SHOW GRANTS FOR hoge@localhost;

で権限の確認ができる。これが適切に設定できていないと、データの操作やテーブルの作成などができない。

create database moge;

でデータベースを作成し、そのデータベースに対して権限をつける。

GRANT CREATE ON *.* TO 'kodai'@'localhost'

GRANT SELECT, INSERT, UPDATE, DELETE, DROP ON `moge`.* TO 'hoge'@'localhost';

としておけば、十分なはず。

 

おまけのおまけ

CREATE TABLE db_name.tbl_name(col_name1 data_type1, col_name2 data_type2, ...);

でテーブルの作成(use db;しておくといいかも)

AWS自動売買システム【売買指示について】

今回は売買の指示について考えていきたいと思います。

その前にまずは、現状を整理。

【現状(できていること)】

・定期的(15分毎とか)なレート監視

・取得した値をmysqlのデータに追加

・取得した後、テクニカル指標を算出

ゴールデンクロスとかを検知

 

【今後必要そうなこと・懸念】

貯めるデータが増えていく一方である
→定期的に消す
・売買シグナルとしてふさわしいものが不明
 →ベンチマーク必須
AWSに移行した際に、通信料がどんなものか
 →試してみる

 

【できたらよさそうなこと(プラスα的)】

 

  • UIで情報を表示
  • 深層学習の導入
  • lamda(AWS)を使用
  • なんといっても儲けること

 

といった感じでしょうか。今後必要そうなことに書いたことはほぼ間違いなく必要なのでそちらからやってもいいのでしょうか。やっていくにつれ、色々見えていくので楽しいことは楽しいです。

 

さて、本題に戻って売買指示についてです。

とりあえず、実装をしていこうという方針で、デモ口座での売買実施をゴールにしようと思います。つまり、成績を考慮しなければ全て自動で売買を行うので自動売買システムは完成します。(モチベーションの上がるポイント。ココ大事。)

ひとまず、サインとしては、

移動平均線のゴールデンクロスによるロング(買)

にしようと思います。(15分足,short=5,mid=13,long=50でそれぞれの向きも考慮可)

続いて、その買ったものをいつ売るか。とりあえず思いつく候補

・買った時点で(値で)、売る値を決めて注文を出す(簡単?)

・買った一定時間後に、売る(この場合の売値は成行?)

デッドクロスで売る。(シグナルとして微妙?)

 (必ずG-D-G-Dと並ぶことを想定していて、向きの考慮が難しい?)

グランビルの法則実装(むずそうとしか言えない。。。)

 

今回は、ゴールデンクロスで買いデッドクロスで売る1番?わかりやすい方法を採用。

 

AWS自動売買システム

現在、作成中です。

 

APIやDB、python、htmlなどを使えば多くのことが実現可能であるということは見えてきたと思います。

その一方で、

『なにをしたいのか』

『どういうものを作りたいのか』

というところが曖昧で、何をしようか止まってしまいます。要件や仕様が決まっていないといったところでしょうか。

 

今回の「AWS自動売買システム」を作る目的というのは、平たく言うと

ITスキルの向上

というのもが大きくはありますが、何を作っても向上はする気がしました。

APIクラウド,DB,Webアプリケーション,pythonJavaPHP機械学習・・・など絡めようと思えば非常に幅広い要素を包括できると思います(この点で凄くオススメです。さらに世界経済、為替等の知識もつくかも)

現実的に、こんなことできないかなということについてはある程度実現できる環境(≠スキル)はあると思います。

ここで、

  • これができる(例:〇〇というAPIやpkgがある)から『〇〇ということをしたい』
  • 『〇〇がしたい』から実現できそうなAPIとかはないか

と、どちらのアプローチで取り掛かるかで進め方とかできるものが異なると実感した。

 

【あるべき姿】【何がほしいか】【ニーズは何か】

というところから今後の方針を決めていきたい。

例えば、

等、考えながら進めていきたいと思う。とはいえ進捗とか成果がほしいので迷うところ笑

#シーズから商品作ったりとかも、潜在的ニーズを掘り起こすとかすごいことだと思うので、否定しているわけではありません。

 

AWS自動売買システム 解析編

解析編です

 

TA-Libとかnumpyを使えば、移動平均線とかMACDとかのテクニカル指標を扱うことが可能であることは分かった。

ta-lib.org

 

また、移動平均線の値を配列で取得できる。

直前の2つの曲線の位置関係と、現在の位置関係が逆転するかどうかをみることでゴールデンクロスデッドクロスを見ることは可能である。

 

問題点は、以下の通り

  • リアルタイムでゴールデンクロスを検知する方法(ベンチマークではなく、取引用)
  • 毎回DBからレートを引っ張って解析する
  • または解析結果をDB等に格納しておく
  • ある程度古いデータを消すべきか

等を詰めていかなければいけない。移動平均線とかを感覚的にはグラフ化したい気はするが、ゴールデンクロスするかどうかとは無関係である気はする。

 

なので、直前のテクニカル指標の値等だけを記憶しておいて新たに取得したものと比較すればいいかと。しかし、新しい値を算出するためには過去の一定期間のデータが必要なのでDBアクセスとかはどちみち必須。

直近の○○件とかをSQLで引っ張って解析とかできたらそんな感じが良いのかな・・・

 

#進捗

f:id:carry5824:20170104115750p:plain

という感じで移動平均線の作成まではできているので、データが貯まればベンチマークテストとかはできそう。(pythonで作成)

っていう成果物が少しはないとやるきでないのでね。

為替レートの取得

あけましておめでとうございます。

 

為替レートの取得について。現時点でのまとめ(今後改良していくかもしれませんが)

 

  • oanda証券のAPIwrapperクラスを使用
  • 15分おきに為替レートの取得 (crontab -eで記述)
  • pythonの関数で実行通貨ペアを引数とすることで追加等しやすく
  • 取得したデータをmysqlに格納

 

ソースコードは、載せませんがこんな感じに。最終的にpythonで40行ほどで書くことができた。

 

次回、為替レートの解析について!!!!!!!!!!!!

AWSで自動売買(macでmysql)

データを取得したらDBへ格納していきたいと思います。

為替レートのデータ取得方法は、試行錯誤中なのとOANDA証券のAPIをつかっているので、今は、割愛します。

将来的には、AWSのRDSとかを使いたいと考えていますが、現状ではローカル環境で試したいのでMacmysqlを使うところから。

qiita.com

homebrewが入っているので、このサイトを参考にしたら簡単にインストール完了。

MySQLのコンソールを便利にするための5つのTips – sawara.me

とかが参考になりました。

 

「使ったコマンド例」

ユーザー一覧の表示 : >SELECT Host, User FROM mysql.user;

ユーザーのパスワード変更 : >

データベース一覧の表示 :>show databases

テーブル一覧の表示 : >SHOW TABLES FROM [~~~]

Python3

pythonmysql接続するためには、ライブラリとかが必要。

MySQLを操作する | Make.

ここにあるように、MySQLdbをpipでインストールしようとしたが、python3には対応していなくてインストールできない模様。

Python3でMySQLに接続する環境をLinuxで整える

にあるようにして、

pip install mysql-connector

mysql-connectorをインストール。

[使い方]

import mysql.connector

connect = mysql.connector.connect(user='~~', password='~~', host='~~', database='~~', charset='utf8')
cursor = connect.cursor()

cursor.execute(" query文  ")

とか。。。

AWS上での構成(案)

AWS上で、自動売買システムを構築するとした際に、構成を考える必要がある。

とりあえず、アイデアを整理するためにも書いてみた。ここからリファクタリング、改良していきたい。

 

f:id:carry5824:20161211184100p:plain

・おそらくVPNは張らない。

・RDSは、mysqlを使用予定。(EC2上にmysqlをインストールするのもひとつ)

・データ取得インスタンスと解析インスタンスと発注インスタンスとか分ける?

・GoogleCloudでデータ解析するとか

・webで情報を見えるようにするとか(OANDAとの兼ね合いは考慮必須)

これから考慮したり、変えていく感じ。

 

アイコン等は、ここからもってきた。

AWS シンプルアイコン - AWS アーキテクチャーセンター | AWS