はい!今やってます!

Work Pertly, Live Idly

【Apiary】WEBベースのAPIプロトタイピングツールを使ってRestAPI開発を効率化する

敬愛するサービスが僕がずっと温めてきたアイデアと同じ機能をリリースしました。 かなり未来のある機能だと思っていたのでショックですが、将来開発力で負けない為にスピードを出せるように技術の方磨いていきたいと思います。


以前RestのサービスをJavaで書いてHerokuにあげて、MySQLにデータ突っ込んでという方法で書いていたのですが、 フロントの要望が固まらぬままAPIを書いていても楽しくないというか、2,3個書いたところで完全に飽きてしまったので、 RestのAPIプロトタイピングツールを調べて導入してみたいと思います。 認証周りまで作り込めるのは期待せずに、Deleteできればラッキーぐらいの気持ちで幾つかツールを探してみました。


API Blueprint - API Documentation with powerful tooling
ちょっとコンセプトが理解できていないのですが、 APIのドキュメントまわりやモデリング言語、WEBプラットフォームの提供等多岐にわたるようです。

中でも特に心奪われたのがApiaryというサービス apiary.io WEBベースでドキュメント化、プロトタイピングが出来る事、 プロトタイピングしたAPIをそのままhttpで呼び出せるのがいい感じです。

これがエディター f:id:yuji_ueda:20150930010310p:plain

これがドキュメンテーション f:id:yuji_ueda:20150930010331p:plain

これがインスペクター f:id:yuji_ueda:20150930010353p:plain ※左上のURLにパスを繋いでを適当にリクエスト投げればコールできます。

jsから呼ぶだけのAPIの為だけにローカルでWebサーバ立ち上げたくないな〜と思っていた矢先だったのでかなり心惹かれました。 期待以上のものが見つかりました。

早速これで設計していきたいと思います。


その他ちらほらプロトタイピングのようなものを発見したので覚え書き程度に。

RAML - RESTful API modeling language
RamlはYamlベースのモデリングランゲージ。 0.8ですが、モデリングしたファイルを仕様書として共有できるのがいいですね。

Swagger | The World's Most Popular Framework for APIs.
Swaggerも似たような形ですが、 ツール周りが整備されているのがいいですね。

後次点で簡単なjsonplaceholder。 こちらはnpmで提供されています。 jsonplaceholder.typicode.com

Macのターミナルを乗り換える

日の目をみない記事の下書きが80を超えました。 このままゴミになってしまうのはもったいないので、しょぼいのも出していきたいと思います。

--

MacBookProがメイン端末となり早3週間、 サーバオペレーションの拙さが笑えない感じになってきたので、 デフォルトのターミナルを変えたいと思います。 特にやりたいのはPoderosaでやってたキーブロードキャストとホストをクラスタリングしてオートログイン

キーブロードキャストができるってのでひとまずiTerm2を選択 teohm.com

やる時はこんな感じ f:id:yuji_ueda:20150929010227p:plain

ホストのクラスタリングはどんな感じかなぁと調べたらAppleScriptで書けば行けそうですね〜
[BKRAFT/Articles] - Automating iTerm2 with Applescript

【大人の自由研究】RestAPIを使ったFX自動取引で不労所得を実現する[FX][PHP][RestAPI]

はじめに

FXは世界中で取引される為替の変動を予測しながら差額で利益を生み出す事が可能な大人の遊びです。
土日を除く平日の24時間マーケットが開き、相場が変動しています。 世の中にはFXで生計を立てるような人もおり、数多くの書籍やテクニカルと呼ばれる指標、過去のデータから導き出された取引手法が存在し連日テレビCMが放送される等人気があります。今回は大人の夏の自由研究と称してFXの自動取引に手を出してみました。

f:id:yuji_ueda:20150821002702j:plain

FXはギャンブルなのか

FXといえばその手軽さやレバレッジという信用取引のような仕組みから、為替の荒波に飲まれて資産を失う人が少なくありません。 10万円の資金を元手に数億円を手にした人や、その逆で用意した数千万円を数日で失った人もいます。
私も怖いというのが第一印象でしたが、スキャルピングと呼ばれるデイトレーディング手法やスイングトレードと呼ばれる短期の売買については比較的ギャンブル性が高いと感じた一方で、 自動取引で取引ロジックを明確にし、そのロジックのみに取引を依存することで個人の裁量を減らす事が出来れば、ギャンブル性を下げる事が出来るのでは無いかと考えました。 長期的に取引を続ける事で、そのロジック自体の効果を検証する事が可能なのも自動取引の魅力です。

FXの自動取引を取り巻く事情

「わざわざWEBのAPIを使って自動取引をする必要は無いのではないか」と思われる方がいるかも知れません。
実際の所、多くの取引会社ではMT4(Meta Trader 4)と呼ばれるツールEA(Expert Adviser)を組み合わせたFXの自動取引の仕組みの導入が可能です。 MT4は様々なテクニカル指標をグラフィカルに表示出来る取引ツールなのですが、更に重要なのがこのEA。 EAというのが自動売買のロジックの部分を担っています。様々なEAがパッケージとして有料/無料で配布され、ポータルサイトではそのパフォーマンスが検証されています。 EAはMQL4というプログラミング言語で書かれますが、RestAPIを使えばプログラミング言語に依存せず取引ロジックを書けるのが特徴です。

OANDAのRestAPI

このOANDAという会社ではRestAPIで取引が出来る仕組みが提供されていました。
秒間リクエスト制限は15で、クライアントアクセスだけならHTTPのリクエストヘッダTokenを渡してアクセスするだけで注文決済等の処理が可能です。 APIの仕様についても上手くドキュメントがまとめられており、サンドボックス環境デモ環境でプログラムを検証出来る点も魅力的です。 www.oanda.jp

API Document

FXの基本について

FXでは口座開設費取引手数料スプレッドスワップ等の費用が掛かります。 各項目の説明についてはその他に譲りますが、他にもレバレッジ等の基本項目については抑えておくべきでしょう。
OANDAは口座開設費/取引手数料無料、スプレッドがUSD/JPY0.4銭と業界最狭水準、約定能力が高い(成り行きならスリッページが発生しない)という点で取引会社としても比較的優れていると言えます。

今回実現したいロジック

こちらのYoutubeの動画がわかりやすいですが、

www.youtube.com

FXの取引では基本的な短期と中期の移動平均線の交わり、いわゆるゴールデンクロス/デッドクロスから売りと買いを決定し、注文するという取引手法を実現したいと思います。 基本的な処理は下記の通り

  1. マーケットが開いている事を確認する(API:/prices)
  2. 移動平均線を取得する(API:/candles)
  3. 注文/決済を実行する(API:/accounts)

環境/構成

今回DigitalOceanのVPSを1インスタンス借りて、PHPのプログラムをcrontabから実行するという方法で動かしています。 f:id:yuji_ueda:20150821001825p:plain

APIリクエスト部分

マーケットが空いている事を確認する部分のプログラムサンプル

define("API_URL", "https://api-fxpractice.oanda.com/v1");
define("INSTRUMENT", "USD_JPY");
define("PERSONAL_ACCESS_TOKEN", "(ここにはパーソナルアクセストークンを設定して下さい)");

function isMarketOpen(){

    $market_open_flag = 1;

    $api_string = "prices";
    $params["instruments"] = INSTRUMENT;
    $data = callApi($api_string, $params, "GET");

    if(array_key_exists("status", $data["prices"][0])){
        if($data["prices"][0]["status"] == "halted"){
            $market_open_flag = 0;
        }
    }
    return $market_open_flag;
}

function callApi($api_string, $params, $curl_method){

    $curl = curl_init();
    $query = http_build_query($params);

    $token = PERSONAL_ACCESS_TOKEN;
    $auth_header = [
    'Authorization: Bearer '.$token,
    ];
    curl_setopt($curl, CURLOPT_HTTPHEADER, $auth_header);

    switch($curl_method){
        case "GET":
            doGetSetting($curl, $api_string, $query);
            break;
        case "POST":
            doPostSetting($curl, $api_string, $query);
            break;
        case "DELETE":
            doDeleteSetting($curl, $api_string);
            break;
    }

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);// 実行結果を文字列として取得
    $res = curl_exec($curl);
    $response_header = curl_getinfo($curl);
    curl_close($curl);// コネクションを切断
    $code = $response_header["http_code"];
    if ($code >= 400) { // もしエラーなら
        exit();
    }
    return $data = json_decode($res, true); // APIの実行結果を$dataに格納
}

function doGetSetting($curl, $api_string, $query){
    curl_setopt($curl, CURLOPT_URL, API_URL."/$api_string?".$query);  
}

function doPostSetting($curl, $api_string, $query){
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_URL, API_URL."/$api_string");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $query);   
}

function doDeleteSetting($curl, $api_string){
    curl_setopt($curl, CURLOPT_URL, API_URL."/$api_string");
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
}

結果

OANDAのRestAPIを使う事で為替の動向に応じた注文を入れる事が出来ました。 1,2週間デモ口座で動かしてみた感想ですが、移動平均線のみに頼ったロジックでは上手く儲けを出すことが出来ませんでした。
好きなプログラミング言語で書けるという以外にもサーバ上で定期的に動かす事が出来るのでラップトップを常時稼働させておく必要が無いというのもメリットでした。 cronだと1分おきの値動きしか追えないという問題があるので、環境をもう少し考えた方がいいかなというのも感想です。