システムトレードの参考記事
背景
AI・人工知能分野が盛り上がりを見せる中で、どういった関わり方ができるかを模索していました。ある勉強会でディープラーニングを応用したシステムトレードの開発に取り組んでいる方の話を聞く機会があり、そこでシステムトレードについて興味を持ちました。今後の趣味開発のため自分用に参考記事をまとめました。
システムトレードの参考記事
深層強化学習でシステムトレードをやる時に役に立ちそうな資料まとめ - ニートの言葉
OANDA REST APIの準備 - FXシステムトレード
fx_systrade/xgboost_trade_oanda.py at master · ryogrid/fx_systrade · GitHub
OANDA APIをつかって Pythonで 為替レートを取得してみた | Futurismo
今後
機械学習についてはまだ実装できるレベルではないため、しばらくは本を読んだりサンプルコードを動かしたり試行錯誤する予定です。トレードシステムについては上記の記事を参考にデモ口座でトレードのやり取りができる最低レベルまでの実装を目標に開発を進める予定です。
シグモイド関数
数学を避けてきた人生の報いを受けながらシグモイド関数について学んでいます。本を読み進める上で以下の記事を参考にしました。
シグモイド関数の参考記事
- Artificial Neural Networks/Activation Functions
- シグモイド関数
- How to calculate a logistic sigmoid function in Python?
- 【2次関数】f (x)の意味
- 【指数・対数関数】0乗,−1乗の意味
シグモイド関数の実装
def sigmoid(x): return 1 / (1 + np.exp(-x))
その他
高校レベルの数学もさっぱりなので、数学記号の読み方や意味が分からないことが多々あります。色々調べた中で進研ゼミの数学のQ&Aページがコンパクトに分かりやすくまとまっていました。
Python3でTensorFlowのMNISTチュートリアルを試す
Python3環境でTensorFlowのMNISTチュートリアルを試しました。 Qiitaに丁寧に解説された記事があがっていたので、そこに掲載されているサンプルコードをコピペ(Python3に合わせて一部修正)で動かしました。
どういった処理を行っているかについては、正直に言ってさっぱりなのですがまずは動作を確認できたという所で一歩進めたかと思います。
# -*- coding: utf-8 -*- from tensorflow.examples.tutorials.mnist import input_data import tensorflow as tf import time start_time = time.time() print("開始時刻: " + str(start_time)) print("--- MNISTデータの読み込み開始 ---") mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) print("--- MNISTデータの読み込み完了 ---") x = tf.placeholder(tf.float32, [None, 784]) W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) y = tf.nn.softmax(tf.matmul(x, W) + b) y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = -tf.reduce_sum(y_*tf.log(y)) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) init = tf.initialize_all_variables() sess = tf.Session() sess.run(init) print("--- 訓練開始 ---") for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys}) print("--- 訓練終了 ---") correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print("精度") print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})) end_time = time.time() print("終了時刻: " + str(end_time)) print("かかった時間: " + str(end_time - start_time))
結果
$ python mnist_for_ml_beginners.py 開始時刻: 1479552572.434575 --- MNISTデータの読み込み開始 --- Extracting MNIST_data/train-images-idx3-ubyte.gz Extracting MNIST_data/train-labels-idx1-ubyte.gz Extracting MNIST_data/t10k-images-idx3-ubyte.gz Extracting MNIST_data/t10k-labels-idx1-ubyte.gz --- MNISTデータの読み込み完了 --- --- 訓練開始 --- --- 訓練終了 --- 精度 0.9085 終了時刻: 1479552576.449984 かかった時間: 4.015408992767334
90%強の精度結果でした。
参考
videojsのサンプルコード
video.jsの動作確認用のサンプルコード。 S3から動画を読み込む際には、CORS設定の編集が必要。
<!DOCTYPE html> <html> <head> <link href="http://vjs.zencdn.net/5.11.9/video-js.css" rel="stylesheet"> <script src="http://vjs.zencdn.net/5.11.9/video.js"></script> <script src="https://npmcdn.com/videojs-contrib-hls@^3.0.0/dist/videojs-contrib-hls.js"></script> </head> <body> <video id="example-video" width="960" height="400" class="video-js vjs-default-skin" controls> <source src="http://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8" type="application/x-mpegURL"> </video> <script> var player = videojs('example-video'); </script> </body> </html>
参考
TwitterボタンをTurbolinksに対応
TwitterボタンをTurbolinksに対応した時のメモ。
TwitterボタンをTurbolinksに対応
twttr_events_bound = false $ -> loadTwitterSDK -> bindTwitterEventHandlers() unless twttr_events_bound bindTwitterEventHandlers = -> $(document).on 'turbolinks:load', renderTweetButtons twttr_events_bound = true renderTweetButtons = -> $('.twitter-share-button').each -> button = $(this) button.attr('data-url', document.location.href) unless button.data('url')? button.attr('data-text', document.title) unless button.data('text')? twttr.widgets.load() loadTwitterSDK = (callback) -> $.getScript("//platform.twitter.com/widgets.js", callback)
Turbolinks Compatibilityに掲載されているコードでは、Turbolinks5の環境では動かなかったので読み込み方法を修正。
変更前
$(document).on 'page:load', renderTweetButtons
変更後
$(document).on 'turbolinks:load', renderTweetButtons
参考
NginxをLet's EncryptでSSL対応
NginxをLet's EncryptでSSL対応した時のメモ。
python2.7をインストール
$ sudo yum install centos-release-SCL $ sudo yum install python27 phthon27-python-tools $ sudo yum install dialog $ sudo su # vi ~/.bashrc
~/.bashrc
source /opt/rh/python27/enable
# source ~/.bashrc
証明書を発行
$ cd /usr/local $ sudo git clone https://github.com/certbot/certbot $ cd certbot/ $ ./certbot-auto --help $ sudo su # ./certbot-auto certonly --webroot -w /usr/share/nginx/html -d example.com -d www.example.com --email mail@example.com
備考
さくらの記事を参考に作業を進めて自分の環境では完了時点でQualys SSL ReportでBの評価だった。そのあとnginxにセキュリティ項目の設定を追加して現在はA+の評価。
参考記事
- Cent OS 6で手軽にPython 2.7を使う方法
- Let's Encrypt の使い方
- Let’s EncryptのSSL証明書で、安全なウェブサイトを公開
- Certbot not creating acme-challenge folder
- Let’s Encrypt で証明書を発行して運用するための nginx の設定
- 光の速さのWEBサーバー(nginx)をlet's encryptでSSL化及びHTTP/2化。ついでにセキュリティ評価をA+にする。
- Guide to Deploying Diffie-Hellman for TLS
- et’s Encrypt+NginxでSSLの評価をA+にしたい!
Googleのガイドラインから気になった部分をメモ
詳細な記事
参考記事:「詳細な記事」機能に表示される記事 - Search Console ヘルプ
schema.org の Article マークアップ
Google では通常、ユーザーにとってより有用な検索結果が表示されるように、ページに記述されているメタデータを可能な限り解釈しようとします。その際、schema.org の Article マークアップ(リンク先は英語)がページに実装されていると大変役立ちます。特に、次の属性が含まれていればなお効果的です。
- headline
- alternativeHeadline
- image(注: この画像はクロールやインデックス登録に対応できる必要があります)
- description
- datePublished
- articleBody
ページ指定と正規化
複数のページで構成されるコンテンツの場合、rel=next や rel=prev を使用した適切なページ指定マークアップを行うことにより、Google のアルゴリズムはそれらの記事の範囲を正しく特定できるようになります。
(中略)
個別のページまたは「すべて表示」ページのいずれかにリンクする rel=canonical を設定します(複数のページで構成されるコンテンツの 1 ページ目にはリンクさせないでください)。詳しくは、ページ指定と正規化をご覧ください。
ロゴ
ウェブマスターは、ウェブサイトに使用するロゴに関するヒントを次の 2 通りの方法で Google に提供することができます
参考記事:Official Google Webmaster Central Blog: Using schema.org markup for organization logos
アフィリエイト プログラム
参考記事:Affiliate programs - Search Console Help
内容の薄いアフィリエイト サイトの例
商品アフィリエイト リンクを含むページで、商品の説明とレビューを元の販売者から直接コピーし、独自のコンテンツや付加価値を加えることなくそのまま掲載しているもの。
良質なアフィリエイト サイト
アフィリエイト プログラムに参加しているサイトが必ずしもすべて内容の薄いアフィリエイト サイトであるわけではありません。たとえば、独自の商品レビュー、評価、商品比較などを行って付加価値を提供している良質なアフィリエイト サイトもあります。アフィリエイト プログラムに参加しているサイトを差別化してランキングを高めるために次のような方法が役立ちます。
差別化の方法
- サイトのごく一部にのみアフィリエイト プログラムのコンテンツを掲載する。
- ユーザーが元の販売者のサイトに直接アクセスせずにこのサイトにアクセスしようとする理由を考える。元の販売者が提供しているコンテンツを転載するだけでなく実質的な付加価値を提供するサイトにします。
- アフィリエイト プログラムを選択する際、サイトの対象ユーザーに適した商品のカテゴリを選択する。サイトのコンテンツに合ったアフィリエイト プログラムを選択することで、サイトの付加価値が高まり、Google の検索結果でのランキングが高くなり、アフィリエイト プログラムから収益を得られる可能性が高くなります。たとえば、アルプスのハイキングに関するサイトには、事務用品ではなくハイキング関連書籍の販売業者との提携が適しています。
- ウェブサイトでユーザーのコミュニティを形成する。熱心な読者の獲得に役立ち、サイトのテーマに関する情報が集まる場を作ることができます。たとえば、ディスカッション フォーラム、ユーザー レビュー、ブログなどでユーザーに独自のコンテンツと付加価値を提供できます。
- 常に最新で関連性の高いコンテンツを提供する。テーマに一貫性のある最新の情報を提供すると、コンテンツを Googlebot がクロールし、ユーザーがクリックする可能性が高まります。