31 Jul 2015, 06:19

SDNについて調べたまとめ

SDNについてしらべてみましたので、記事にまとめました.

Software Defined Network(SDN)とは

  • Data Planeと Control Planeを分離したネットワーキングアーキテクチャ
    • Data Plane: programmable switch
    • Control Plane: controllers
  • ネットワークの構成、機能、性能を一つの高レベルの ソフトウェアでコントロールすること

SDN登場の背景

3つのテクノロジーによって進化が起こった!

  • Central Network Control
  • Programmable Networking
  • Network Virturization

Central Network Controlの研究(1980~)

大規模な分散するルータを管理するために, 「データ転送(Data Plane)」と「経路制御(Control Plane)」 の機能を分離するという技術、考え方が必要となった.

-> Control Planeと Data Planeの分離の考え方へ.

ネットワークのProgrammable化の登場(1990~)

ネットワーク研究のプロトタイプ作成のために、 容易に機能追加できるための柔軟で拡張性のある仕組みが必要となった.

  • ヘッダ解析
  • アクセスコントロール
  • フォワーディング
  • バッファリング、マーキング…

-> ソフトとハードの両面からアプローチが進む. ソフトで実現するとパフォーマンスが遅いので、 いろんなプロトコルに素早く対応可能なハードウェアが必要となった.

Network仮想化(1990~)

一つの物理インフラの上に論理的なネットワークトポロジを作ること。 このことにより、物理インフラを共有することが可能になった. また、仮想化することでカスタマイズしやすくなった.

-> サービスをインフラストラクチャから分離するという考え方へ.

SDN のメリット

  • ネットワークデバイスの振る舞い(ポリシー)を調整しやすい.
  • 変化に素早く対応できる.
  • ベンダー非依存.マルチベンダを一元管理.
  • ネットワーク機器のコモディティ化.
  • ネットワーク機器のソフトウェア化.

SDNのアーキテクチャ

Control と Data Planeの分離.

  • Control Plane(経路制御) フォワーディングの振る舞いを制御するロジック
  • Data Plane(データ転送) Control Planeのロジックにしたがってデータを転送するもの

両者の分離によって… -> 独立した進化と開発が可能 -> ソフトウェアから高次の制御が可能となる.

  • NorthBound API アプリケーションやオーケストレーションシステムが ネットワークをプログラムするためのインタフェース
    • ベンダー依存がなくなる
    • Python, Rubyなどの簡単な言語が利用できる.
  • SouthBound API
    • ハードを制御する抽象インタファース
                        ---
Controller Applications  |
======================   |
   NorthBound API        | Control Plane
======================   |  
  Controller Platform   ---
======================   |  
   SouthBound API        | Data Plane
======================   |
  OpenFlow Switches      |  
                        ---

OpenFlow

SDNを実現するための代表的なOSS.

  • OpenFlow コントローラ … 経路制御を司る
  • OpenFlow スイッチ … データ転送機能を司る
  • OpenFlow プロトコル … NorthBound API.

OpenStack(Neutron)

  • ネットワークのマルチテナントを実現する.
  • テナントごとにボリシーを適用.

参考リンク

以上の内容は、以下の講座からの抜粋です.

  • coursera: Softwre Defined Networking

https://www.coursera.org/course/sdn1

Software-Defined Network(SDN)とは何か?

5分で絶対に分かるSDN

5分で絶対にわかるOpenFlow

OpenStack Neutronとは何か?

29 Jul 2015, 10:10

FXシストレプログラム AWSでサーバ借りてデビュー

OANDAのREST APIを利用して、 コツコツとFXシストレプログラムをつくってきたのだけれども、 今回ついに、AWS上でデモトレードデビューをした.

ソースコードは公開しています. 誰かの参考になれば…

戦略

以下の売買ルールで勝負した.

仕掛けシグナル

  • 5秒足、25, 75の SMAでクロスしたら売買

仕掛けは、シンプルなロジックで.

手仕舞いシグナル

  • 4回 25, 75の SMA線がクロスしたら手仕舞い
  • 5pip損したら損切り
  • 5pip儲かったら、+1pip or -0.5pipずつ利確の上限を増やしていく. たとえば、5pip儲かったら6piと4.5pippに利確条件を増やす.

動的に利確の条件を増やしていく方法は、 多くのバックテストで、好成績を残した.

他にも、ボリンジャーバンドを利用した手仕舞いや、 線形回帰を利用した手仕舞いを試したのだけれども、 いまいちよい成績がでなかった.

結果

12時間のフォワードテストの結果、-450円!!

今後に向けて

さて、本番環境を試そうとししたところ、 本番口座のパーソナルトークンで通信してもエラーしか帰ってこない.

手順どおりにやってもダメ. サボートに問い合わせてもダメ. なにやってもダメ.

なんと、こんなところでくじけることになろうとは! 今までの努力はなんだったのだろう??

追記

結局、自分のバグだった. チャンチャン.

19 Jul 2015, 23:58

Pythonのユニットテストツール unittestを使ってみたメモ

Pythonのユニットテストツールである unittestをいじって見たのでご紹介.

最も簡単な例

以下に、シンプルなテスト実行手順を書く.

  • unittestライブラリをインポート
  • unittest.TestCaseを継承したクラスを作成
  • test_のプレフィクスをもつメソッドを作成
  • self.assertEqualでテストアサーションを宣言
  • 末尾に unittest.main()を書く

コード: test_hello.py

import unittest

class TestHelloUnitTest(unittest.TestCase):

    def test_add(self):
        actual = 1 + 1
        expected = 2
        self.assertEqual(expected, actual)

if __name__ == '__main__':
    unittest.main()

実行結果

$ python test_hello.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

詳しい説明

アサーション

アサーション関数は以下が用意されている. どれもassertXXXXという形をしているが、Equalさえしっていれば大抵はOK.

  • assertEqual(a, b)
  • assertNotEqual(a, b)
  • assertTrue(x)
  • assertFalse(x)
  • assertIs(a, b)
  • assertIsNot(a, b)
  • assertIsNone(x)
  • assertIsNotNone(x)
  • assertIn(a, b)
  • assertNotIn(a, b)
  • assertIsInstance(a, b)
  • assertNotIsInstance(a, b)

前処理と後処理

各テストの前処理でしたいことがあるときは、setUpメソッドに処理を書く.

各テストの後処理でしたいことがあるときは、tearDownメソッドに処理を書く.

class TestHelloUnitTest(unittest.TestCase):
   def setUp(self):
        pass

   def tearDown(self):
        pass

テストケース、メソッド指定でのテスト

テストケース(クラス)を指定して、実行したいときは、以下ののようにして書く.

$ python -m unittest スクリプト名.テストケース名

メソッドを指定したいときは、以下.

$ python -m unittest スクリプト名.テストケース名.メソッド名

Emacsならメソッド指定でテストできるよ!

Emacs を利用すれば、メソッド単位で簡単テスト実行可能.

実行したいテストケースの上で M-x python-test-function .

以上、Happy Hacking!!

19 Jul 2015, 06:57

夏休みの自由研究 は OANDA APIを利用して FX システムトレード

夏休みの自由研究として、FX システムトレードをしようと画策中. この記事は、そのスナップショット.

やったこと

OANDA API 、とくに oandapyを利用して、 Pythonから 為替取引ができるようにした. oandapyは python3 で動作するようにフォークした

Dukascopyからヒストリカルデータをダウンロードして(これは手動)、 そのデータを利用して、バックテストを実施. バックテストの結果を matplotlibでグラフ化.

損益のグラフ

移動平行線のクロスで売買するグラフ

参考にしたコード

一人ではとうていできないので、以下のコードを参考にした.

MT4との比較

メリット

  • 好きな言語が使える

    OANDA APIは REST APIなので、どんな言語でも使える. 自分は Python!

  • Linux環境で動作

    Linux環境で動作することで、Amazon AWSの EC2上で動作させることができる.

  • Pythonのデータ解析ライブラリがつかえる

    Pythonを利用しているので、Pythonの便利なデータ解析ライブラリを 利用することができます. Numpy, Pandas, Scipy, Matplotlib…

    ta-libなんという、テクニカル指標に特化したライブラリもある.

デメリット

  • バックテストのデータを自分で用意する必要がある.
  • プラットフォームを自分で実装するのが大変.

    MT4プログラミングはMT4というプラットフォームのおかげで、 用意にコーディングやテストができたけれども、 OANDA APIを利用すると、自前ですべてプログラミングしないといけない.

今後の予定

ようやく動作しそうな?ベースができたので、 これから取引のロジックを考えていこうと思う. ここからが本当の自由研究!

以上、Happy Hacking!!

18 Jul 2015, 11:30

Python3で進捗表示するライブラリ progressbar2

アプリをつくりながらPythonを勉強中.

今日は、Queueから一つずつオブジェクトを取り出して処理するときに、 進捗表示ができたらいいなと思い、そういうライブラリを探してみた。

progressbarというライブラリができそうなのだが、python3では動かなかった.

困っていたら、以下を見つけた. Python3で動作することを確認.

インストール

pipでインストール.

[sourcecode language=”bash” title=””]
$ sudo pip install progressbar2
[/sourcecode]

使い方

Exampleページを参考にいくつか試す.

基本の使い方

<div class="outline-text-3" id="text-orgheadline3">
  [sourcecode language=&#8221;python&#8221; title=&#8221;&#8221;]<br /> from progressbar import ProgressBar<br /> import time</p> 

  <p>
    p = ProgressBar(100)
  </p>

  <p>
    for i in range(100):<br /> p.update(i+1)<br /> time.sleep(0.01)<br /> [/sourcecode]
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> 100% (100 of 100) |###############################| Elapsed Time: 0:00:01 ETA: 0:00::0<br /> [/sourcecode]
  </p>
</div>

Queueサイズ分の進捗表示

<div class="outline-text-3" id="text-orgheadline4">
  [sourcecode language=&#8221;python&#8221; title=&#8221;&#8221;]<br /> from progressbar import ProgressBar<br /> import queue</p> 

  <p>
    q = queue.Queue()
  </p>

  <p>
    for i in range(12345):<br /> q.put(i)
  </p>

  <p>
    p = ProgressBar(q.qsize()).start()
  </p>

  <p>
    for i in range(q.qsize()):<br /> q.get()<br /> p.update(i)
  </p>

  <p>
    p.finish()<br /> [/sourcecode]
  </p>

  <p>
    [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221;]<br /> 100% (12345 of 12345) |###########################| Elapsed Time: 0:00:00 Time: 0:00:00<br /> [/sourcecode]
  </p>
</div>

おわりに

自分で車輪の再発明をする前に、 ネットでOSSが転がっていないか探すことが大事だと実感.

ほしいものは、大抵おちてる、それがオープンソースの世界.

以上、Happy Hacking!!

12 Jul 2015, 13:09

Emacsのミニバッファから twitterにメッセージを投稿する小技

Emacsのミニバッファから twitterにメッセージを投稿する小技.

はじめに

最近は、非公開のtwitter個人アカウントに独り言をすることが多い.

Emacsから twittering-modeを利用してつぶやいている.

しかし、たまには?表の公開アカウントでつぶやきたくなるときもある.

そんなとき、Emacsからでなければいけいなということにストレスを 感じたのでミニバッファからツイートする方法を考えた.

ちなみに、Linux環境のための記事です.

コマンドラインからツイートする

ruby の twitter ライブラリを利用してスクリプトを書けば、 コマンドラインからツイートできる.

以下のようなスクリプトを用意.

#!/usr/bin/ruby
require 'twitter'
client = Twitter::REST::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end
client.update ARGV[0]

これを実行可能にして、パスの通ったところにおくとツイートできる.

$ chmod +x twitter
$ twitter "テスト投稿"

Emacsのミニバッファから投稿

本題。以下の関数を定義した。

(defun twit-from-minibuffer (x)
  "Tweet message from minibuffer"
  (interactive "sEnter twitter message: ")
  (let ((tweet-message (concat "twitter " x)))
    (shell-command tweet-message)))
(global-set-key (kbd "C-c C-x t") 'twit-from-minibuffer)

これで、ショートカットからツイートできるようになった.

最後に

Emacsからツイートできないとストレスを感じることが異常かもしれない.

以上、Happy Hacking!!

09 Jul 2015, 13:44

Enterprise IT 系、インフラ系の情報収集サイトをまとめ

Enterprise IT 系、インフラ系の情報収集サイトをまとめました.

自分が登録しているRSSサイトです. エンタープライズ系に特化しているので、 万人向けではないですが、同業他社には役に立つ情報元だと思います.

おすすめ

Publickey

個人サイトだけれども、このサイトが最も興味深い情報源です.

IT Pro クラウド

日経コンピュータによる情報サイト。ここも有力.

Think IT

オープンソースの情報が多め.

とりあえず購読

以下は、どれも似たようなサイトだけど、とりあえず登録しよう

IT media エンタープライズ: クラウドコンピューティング

@IT Server & Storageフォーラム

ASCII.Jp − TECH

マイナビニュース エンタープライズ 次世代インフラ

まとめ

エンジニアなら、最新技術の動向を日々追いつづけていかないと、 すぐに時代に取り残されてしまいます.

技術動向に置いてけぼりにならないために、RSSを毎日購読して情報をチェック!

06 Jul 2015, 13:23

夢の寝室環境システムを自作しました!!

以前、このブログとは別のブログを持っていたのだが、久しぶりに見たら消滅していた。。

どうしても救済したい内容があったので、このブログに記事を転載しておく.

以下、転載. 約3年前のお話なので、今はまったく存在しません…

転載内容: 夢の寝室環境システム

今日は自分の作った現段階での寝室環境システムを紹介します。

就寝編

以下のような流れで眠りにつきます。

  • 光目覚ましをSleepモードで消す
  • アロマディフューザーでラベンダーの香りをスリープモードでかける
  • 究極の眠れるCDを流す
  • 間接照明で青く部屋をライトアップ
  • 30分後に、電気を消す
  • 1時間後に音楽停止して、パソコンをスリープモードにする

光目覚ましをSleepモードで消す

まずは、光目覚ましを使って次第に部屋を暗くしていきます。

アロマディフューザーでラベンダーの香りをスリープモードでかける

心地良い睡眠のためにはアロマは欠かせません。 睡眠タイマー機能付きのアロマディフューザーを使います。 無印のアロマディフューザーがコストパフォーマンスがよいと思います。

ラベンダーが好きなので、ラベンダーの匂いを使います。

究極の眠れるCDを流す

睡眠用の癒しの音楽を聞きながら寝ます。 睡眠用の音楽はいろいろと試しましたが、これが一番好きです。

間接照明で青く部屋をライトアップ

光目覚ましとは別に、間接照明を利用して青く部屋を照らします。 いろんな色に光るLED間接照明を利用します。

間接照明と合わせると、太陽が沈んでいくような雰囲気となり気に入っています。

30分後に電気を消す

ここまでは単体の快眠グッズを利用しているだけで、 システムっぽくないですが、ここからシステムっぽくなります。

リモコン操作できる間接照明を利用して, 指定時刻になったら間接照明を完全に落とします。

リモコンを自由に制御できる機械『iRemocon』を利用します。

間接照明に対して、パソコンで時間を計測していて30分たったところで、 パソコンからiRemoconに間接照明を消すように信号を送り、iRemoconから消します。

1時間後に音楽停止して、パソコンをスリープモードにする

最後に、パソコンをスリープモードにします。 利用するのは、フリーソフトの『WakeMeUp!!』です。

起床編

起床編は、就寝編の逆の手順で目覚めていきます。以下のような流れです。

  • 起床15分前に、エアコンとアロマ起動
  • 光目覚ましで少しずつ明るくなる
  • 起床時間になると、電気がつき、音楽が流れる。

起床15分前に、エアコンとアロマ起動

iRemoconを利用することで、エアコンとアロマを事前に起動しておきます。

アロマディフューザーはリモコン制御できるちょっと高めのやつを使っています。 起床用と就寝用でアロマディフューザーを分けて使ってます。

光目覚ましで少しずつ明るくなる

寝る前に仕掛けた光目覚ましによって、部屋が次第に明るくなっていきます。 起床時間になると、電気がつき、音楽が流れる

パソコンのWakeMeUp!!によって、起床時間になると起床用のプログラムが実行されます。

これによって、部屋の天井灯がつき、Youtubeから音楽が流れます。 音楽は次第にボリュームを上げていって、最後にはボリュームマックスでうるさくなります。

まとめ

自動化したからといって、全く寝坊がなくなったわけではないです。(汗)

心地良い睡眠を得るには、心理的な部分もおおく働いているとおもいます。

睡眠グッズはお金さえ払えば頑張らなくても効果があるという点がいいですね。

メンタル面との合わせ技で頑張っていこうと思います。

以上、Happy Hacking!!

04 Jul 2015, 14:38

Pythonの テクニカル分析ライブラリ ta-libでバックテストしてみる

FXのテクニカル指標を提供してくれるような、 便利なPythonのライブラリはないかなと探していたら、ありました.

TA-LIBとは、経済データに対するテクニカル分析をするための関数がまとまっ たライブラリ. さっそく試す.

インストール

http://mrjbq7.github.io/ta-lib/install.html

tarをダウンロードして、ビルドする方法もあるけど、 easy_install で入れることができる.

easy_install ta-lib

およそ、100以上の関数が用意されている. 各関数の使い方は github参照.

つかってみる

単純移動平均の関数 SMAを利用して、 為替データでバックテストもどきをしてみる.

  • 5日移動平均が25日移動平均を上回ったら(ゴールデンクロス) 買い
  • 5日移動平均が25日移動平均を下回ったら(デッドクロス) 売り

データは、 MT4のヒストリカルデータより、1分足データをエクスポートした.

import numpy as np
import talib as ta

data = np.loadtxt('150703.csv', delimiter=",", usecols=(2, 3, 4, 5))

tanki = ta.SMA(data[:, 3], timeperiod=5)
tyuki = ta.SMA(data[:, 3], timeperiod=25)

total = 100000
units = 1000

for i in range(len(data)-1):
    if ((tanki[i] < tyuki[i]) and (tanki[i+1] > tyuki[i+1])):
        print("Golden Closs!!")
        total = total - 1000*data[i,3]

    elif ((tanki[i] > tyuki[i]) and (tanki[i+1] < tyuki[i+1])):
        print("Dead Closs!!")
        total = total + 1000*data[i,3]

print(total)

所感

Pythonだと、パラメータ(ここでは、移動平均の5と25)の調整がモンテカルロ法で できそう. パラメータの最適化がしやすいという点は metatraderに比べてメリットだ.

しかし、まだまだ、バックテストのしにくさは Metatraderに比べると大きい. 使えるレベルにするには、そうとうの努力が必要そうだ.

03 Jul 2015, 12:39

OANDA APIをつかって Pythonで 為替レートを取得してみた

少し前に mt4をいじってみたが、その先が取っ掛かりがつかめずにいた.

FXは自分は初心者なのだが、FX単体だと、飽きてしまった. 損してでもいいので、統計学とあわせて勉強できないかと道を探していた.

また、mt4のためのMQL言語は、C言語に近い言語で、拡張性がない. できればpythonを利用したいなーと思っていた.

Rest APIのことを調べていたら、Rest APIで 為替情報を取得できるという おもしろいAPIを OANDA 証券が提供しているのを見つけたので、試してみた.

やってみる

今回は、無料で即日利用できるデモ口座を開設して試す.

口座を開設

右上のデモ口座開設をクリックして、手順にしたがって口座開設.

デモ口座にログインして、APIアクセスの管理を選択し、 Personal Access Tokenを発行.

為替レートを取得

APIのドキュメントは以下にある. なんと日本語! 微妙な訳なので自動翻訳?!

Pythonで動かしてみよう. 為替レートを取得するサンプルは以下にある.

access_token, acount_idを自分のもので置き換えて実行.

[tsu-nera]% python2 streaming.py
{"tick":{"instrument":"EUR_USD","time":"2015-07-03T11:55:53.198067Z","bid":1.10999,"ask":1.11004}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:55:52.634607Z","bid":1.25685,"ask":1.25712}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:55:54.816590Z","bid":1.2569,"ask":1.25717}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:55:58.650057Z","bid":1.25691,"ask":1.25716}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:55:58.807926Z","bid":1.25688,"ask":1.25714}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:55:59.070828Z","bid":1.25686,"ask":1.25711}}
{"tick":{"instrument":"EUR_USD","time":"2015-07-03T11:55:59.338964Z","bid":1.10997,"ask":1.11002}}
{"tick":{"instrument":"USD_CAD","time":"2015-07-03T11:56:00.915263Z","bid":1.25685,"ask":1.25711}}

これはすごい…

API Wrapperもある

API Wrapperを利用すれば、rest の知識なしに 操作ができる.

Mastering Python for Financeという本に、 oandapyを利用したトレード方法が書いてある.

oandapyを利用した、為替レート取得.

import oandapy
import time

oanda = oandapy.API(environment="practice", access_token=ACCESS_TOKEN)

while(True):
    time.sleep(1)
    response = oanda.get_prices(instruments="EUR_USD")
    prices = response.get("prices")
    print(prices[0])

おわりに

まずは初めの一歩. 次はバックテストをやってみたいところだ.以下が参考になりそう.

また、このサイトの管理人さんは、OANDAを利用して実際にトレードしているようだ.

Metatrader は 古くからある売買方法だが、 OANDA APIを利用した方法を利用している人はほとんどいないので、 ブルーオーシャンかもしれない. しかし、情報がとても少ないというリスクがある.

この海に飛び込んだらPythonがつかえるというモチベーションの炎が消えて しまわないか心配だ.

Special Thanks