AWS(lambda+apigateway)でLinebot作成→完了

目標

流行り?のLinebotを作る

bot内容はオウム返しBOT。送信したメッセージと同じメッセージを返すだけ。

 
最大のハマリポイント(個人的な)

API Gatewayのステージ変数を設定しないと403エラーになってしまっていた。

 

docs.aws.amazon.com

ここにあるように、prodステージ(任意)のステージ変数を設定します。

url にhoge/postとかを設定する。(意味はよくわかっていない...)

 

その他注意点
  • 2016年10月頃にline側の認証形式が変わっている。ACCESS_TOKENのみ。 ⇒ぐぐって記事を見る際に注意が必要
  • POSTメソッドを作成すること
  • ChromeAdvanced REST clientという拡張機能を使うとPOSTとかテストしやすい。

 

その他、追記します...

ネタ

とても久しぶりの投稿になってしまいました。

 

【目指すもの】

・外に目をむける

・スキル向上

 

大きく分けるとこの2本です。もう少しブレークダウンさせましょう。

① 外に目を向ける

・世の中の動向を把握できている

・外部(会社外,業種不問)とのつながりをもつ

・投資で儲かる

 

② スキル向上

・実装経験を積む

・成果物による達成感・楽しさを追う

・最新技術等について自分の考えをもつ(触れないとわからないことも)

 

基本的には、①のために②があるもしくは逆となっていることや、現状とあるべき姿のギャップを埋めていくものになっているように管理していく。

①②に関して具体的にしていく候補・ネタを考えて適宜実施していきたい。

【ネタ候補】

  • 情報収集の習慣(新聞・テレビ・雑誌・アプリ。。。継続性と成果が課題)
  • とりあえず投資をしていく
  • アプリ・LINEBOT作成
  • ラズベリーパイでなんかをつくる
  • Githubアカウントを充実させる

 

アプリ・LINEBOTネタ

・ニュースとかを収集する系

ぐるなびとか駅すぱあとAPIと連携した

・セミナーへ参加(定期的)

・株・為替の自動売買

・株診断アプリ

・バスケ関係のアプリ

・物忘れ防止系

クラウドとか機械学習を使うことを目的にしちゃう

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行ほどで書くことができた。

 

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