子熊のゾルバ@cryptocurrency

仮想通貨の役立つ情報をお届けします。

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その七 Gekkoを使った自動取引例の紹介

「だ、だれだっ お前はっ!!」「あててみろ ハワイへご招待するぜ」

f:id:zorbathelittlebear:20170920011918p:plain

どうも、宇宙海賊ゾルバです。

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その五 Google Cloud Platformでのサーバー構築の続き - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その六 Gekkoのインストール - 子熊のゾルバ@cryptocurrency


ようやくGekkoのセットアップが終わったので、今回から自動取引に入っていきます。

仮想通貨取引のリスクについて前置き

仮想通貨の取引自動取引には様々なリスクがあります。馬の耳に念仏かもしれませんが、今一度ご確認下さい。

  • 取引で生じた損益は自己責任です。仮想通貨に限らずですね。
  • 私の方で動作確認した内容をご紹介しますが、Gekkoがうまく動作しない可能性もあります。
  • 取引所にお金を預けるため、カウンターパーティーリスクがあります。
  • セキュリティ設定不備が原因で取引所のAPIキーが盗まれる可能性があります。リスクを最小限に抑えるため、以下のような点を正しく設定しましょう。

- ファイアウォールルールで不要なアクセスを防止する。
- nginxの設定を正しく行う。
- APIキーには引き出し(Withdrawal)権限を与えないようにします。

  • 仮想通貨同士の取引も課税対象となるようです。自動取引を行う事で取引の回数も多くなるかもしれません。計算も大変になりますが頑張りましょう。

bitcoiner.link

bitcoiner.link

Webコンソールの概要

それではWebコンソールにアクセスしましょう。
https://あなたのドメイン

htpasswdで設定したユーザー名、パスワードを入力してログインします。
ログイン後、上部のメニューに6つの項目が表示されます。

  • Home
  • Live Gekkos
  • Backtest
  • Local data
  • Config
  • Documentation
Home

f:id:zorbathelittlebear:20171005004539p:plain

特に使う事はありません。Gekkoの紹介ページへのリンクがあるだけです。

Gekko - Open source bitcoin trading bot platform

Live Gekkos

f:id:zorbathelittlebear:20171005005947p:plain

Strategy(取引の条件)に応じて、リアルタイムのチャートデータを元に実際に取引を行う事ができます。
また、Paper Traderではリアルタイムのチャートデータを元に取引のシミュレーションができます。

Backtest

f:id:zorbathelittlebear:20171005010214p:plain

過去のチャートから、自分のStrategy通りに取引を行った場合にどのくらいの損益となっていたかシミュレーションができます。

Local data

f:id:zorbathelittlebear:20171005010232p:plain

過去のチャートデータをインポートする事ができます。

Config

f:id:zorbathelittlebear:20171005010255p:plain

取引所のAPIキーを追加することができます。(APIキーが無いと、取引所での取引ができません。)

Documentation

UIはありません。このリンクになっているだけです。

About Gekko - Gekko

過去の相場データのインポート

実際に取引する前に、Backtestを行いましょう。まずはLocal dataから過去の相場データをインポートします。
スクロールダウンし、Go the the importer!をクリックします。

f:id:zorbathelittlebear:20171006232832p:plain


Exchange(取引所)、Currency(支払う仮想通貨)、Asset(購入する仮想通貨)、From及びTo(インポートする期間)を選択します。

f:id:zorbathelittlebear:20171007002309p:plain

Exchangeはpoloniexとgdaxが選択できます。
poloniexの場合、CurrencyはUSDT, BTC, ETH, XMRが選択可能です。Assetは多数サポートされています。(確認していませんが、ほぼ全てかと)

(gekkoインストールディレクトリ)/exchanges/poloniex.js

    currencies: ['BTC', 'ETH', 'XMR', 'USDT'],
    assets: [
      '1CR', 'ABY', 'AC', 'ACH', 'ADN', 'AEON', 'AERO', 'AIR', 'AMP', 'APH',
      'ARCH', 'AUR', 'AXIS', 'BALLS', 'BANK', 'BBL', 'BBR', 'BCC', 'BCH', 'BCN',
      'BCY', 'BDC', 'BDG', 'BELA', 'BITCNY', 'BITS', 'BITUSD', 'BLK', 'BLOCK',
      'BLU', 'BNS', 'BONES', 'BOST', 'BTC', 'BTCD', 'BTCS', 'BTM', 'BTS',
      'BURN', 'BURST', 'C2', 'CACH', 'CAI', 'CC', 'CCN', 'CGA', 'CHA', 'CINNI',
      'CLAM', 'CNL', 'CNMT', 'CNOTE', 'COMM', 'CON', 'CORG', 'CRYPT', 'CURE',
      'CYC', 'DAO', 'DASH', 'DCR', 'DGB', 'DICE', 'DIEM', 'DIME', 'DIS', 'DNS',
      'DOGE', 'DRKC', 'DRM', 'DSH', 'DVK', 'EAC', 'EBT', 'ECC', 'EFL', 'EMC2',
      'EMO', 'ENC', 'ETC', 'ETH', 'eTOK', 'EXE', 'EXP', 'FAC', 'FCN', 'FCT',
      'FIBRE', 'FLAP', 'FLDC', 'FLO', 'FLT', 'FOX', 'FRAC', 'FRK', 'FRQ',
      'FVZ', 'FZ', 'FZN', 'GAME', 'GAP', 'GDN', 'GEMZ', 'GEO', 'GIAR', 'GLB',
      'GML', 'GNS', 'GNT', 'GOLD', 'GPC', 'GPUC', 'GRC', 'GRCX', 'GRS', 'GUE', 'H2O',
      'HIRO', 'HOT', 'HUC', 'HUGE', 'HVC', 'HYP', 'HZ', 'IFC', 'INDEX', 'IOC',
      'ITC', 'IXC', 'JLH', 'JPC', 'JUG', 'KDC', 'KEY', 'LBC', 'LC', 'LCL',
      'LEAF', 'LGC', 'LOL', 'LOVE', 'LQD', 'LSK', 'LTBC', 'LTC', 'LTCX',
      'MAID', 'MAST', 'MAX', 'MCN', 'MEC', 'METH', 'MIL', 'MIN', 'MINT', 'MMC',
      'MMNXT', 'MMXIV', 'MNTA', 'MON', 'MRC', 'MRS', 'MTS', 'MUN', 'MYR',
      'MZC', 'N5X', 'NAS', 'NAUT', 'NAV', 'NBT', 'NEOS', 'NL', 'NMC', 'NOBL',
      'NOTE', 'NOXT', 'NRS', 'NSR', 'NTX', 'NXT', 'NXTI', 'OMNI', 'OPAL',
      'PAND', 'PASC', 'PAWN', 'PIGGY', 'PINK', 'PLX', 'PMC', 'POT', 'PPC', 'PRC',
      'PRT', 'PTS', 'Q2C', 'QBK', 'QCN', 'QORA', 'QTL', 'RADS', 'RBY', 'RDD', 'REP',
      'RIC', 'RZR', 'SBD', 'SC', 'SDC', 'SHIBE', 'SHOPX', 'SILK', 'SJCX',
      'SLR', 'SMC', 'SOC', 'SPA', 'SQL', 'SRCC', 'SRG', 'SSD', 'STEEM', 'STR',
      'SUM', 'SUN', 'SWARM', 'SXC', 'SYNC', 'SYS', 'TAC', 'TOR', 'TRUST',
      'TWE', 'UIS', 'ULTC', 'UNITY', 'URO', 'USDE', 'USDT', 'UTC', 'UTIL',
      'UVC', 'VIA', 'VOOT', 'VOX', 'VRC', 'VTC', 'WC', 'WDC', 'WIKI', 'WOLF',
      'X13', 'XAI', 'XAP', 'XBC', 'XC', 'XCH', 'XCN', 'XCP', 'XCR', 'XDN',
      'XDP', 'XEM', 'XHC', 'XLB', 'XMG', 'XMR', 'XPB', 'XPM', 'XRP', 'XSI',
      'XST', 'XSV', 'XUSD', 'XVC', 'XXC', 'BCH', 'YACC', 'YANG', 'YC', 'YIN', 'ZEC'
    ],

それではImportをクリックし、poloniexでの過去3ヶ月分のBTC/USDT相場データをインポートします。環境に夜と思いますが、3ヶ月だと大体30分くらいで完了します。

f:id:zorbathelittlebear:20171007002343p:plain

おや、途中でインポートが止まってしまいました…。データをインポートしようとすると、Poloniexがエラーを返す事があるようです。
15分ほど待つと再開されるので、気長に待ちましょう。エラーが頻発しても3ヶ月分のデータを取得するのであれば3時間あれば終わるでしょう。

インポートが終わると、Import doneと表示されます。

Gekkoのバグを修正

Gekkoにバグがあるため、CCIというテクニカル分析の指標が使えません。

CCI Reference Missing · Issue #1139 · askmike/gekko · GitHub

以下のコマンドで修正します。

sudo su -
cp -p /usr/local/bin/gekko/strategies/CCI.js /usr/local/bin/gekko/strategies/CCI.js.default
sed -i -e 's/config.tradingAdvisor.historySize/this.tradingAdvisor.historySize/' /usr/local/bin/gekko/strategies/CCI.js

Backtestでの取引シミュレーション

Backtestに移動し、scan available dataをクリックします。

f:id:zorbathelittlebear:20171015223256p:plain

取り込んだデータが表示されるので、ラジオボタンを選択します。
(私は1年以上のデータを取り込みました。もし特定の期間だけをシミュレーションしたい場合、Adjust rangeをクリックします)

f:id:zorbathelittlebear:20171015223456p:plain

Strategy(売買を行う条件)を設定します。ここでは、とりあえず全部デフォルトのままにしておきます。

f:id:zorbathelittlebear:20171016001909p:plain

画面を下にスクロールし、Backtestをクリックします。

f:id:zorbathelittlebear:20171015223653p:plain

少し待つとシミュレーションの結果が表示されます。チャートの上に多数の点が表示されていますが、緑の点が買った時、赤い点が売った時の意味です。

f:id:zorbathelittlebear:20171015224126p:plain

黙ってホールドしとけば9倍以上になるはずなのに、なんと大損ぶっこいてますね…。-99%なので素寒貧です。
チャートの下にスクロールすると、取引の詳細もこのように表示されます。

f:id:zorbathelittlebear:20171015224449p:plain

では、以下のページを参考にしてみましょう。

Best trading method [POLL] · Issue #610 · askmike/gekko · GitHub

StrategyはCCI、他のパラメーターは以下のスクリーンショットを参考に設定し、Backtestをクリックします。

f:id:zorbathelittlebear:20171016000802p:plain

354%の利益が出ました。大分マシになりましたね。

f:id:zorbathelittlebear:20171016001409p:plain

とはいえ、放っておけば9倍になっているのにこれでは自動取引はまだまだですね。

Strategyの作成

私も色々と試しているのですが、うまい具合のStrategyがまだ出来ていません。次の記事を書くのは、それっぽいのが出来てからにします。
むしろいいのができた方は私に教えて下さい。

Creating a strategy - Gekko

Example Strategies - Gekko

Best trading method [POLL] · Issue #610 · askmike/gekko · GitHub

テクニカル分析の参考リンク

テクニカル分析についての解説があります。私も勉強中です。

テクニカル分析に関するコラム|ビットコインラボ

第1回 数多くあるテクニカル指標を体系的に解説|テクニカル分析ABC |ガイド・投資講座 |セミナー・マーケット情報|株のことならネット証券会社【カブドットコム】

小次郎講師直伝「チャートの極意」|AVATRADE|MT4|CFD|自動売買|

ステップアップガイド ~テクニカル分析などの解説~|岡三ネットトレーダーシリーズ|岡三ネットトレーダー(OKASAN NET TRADER):岡三オンライン証券トレーディングツール



____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その六 Gekkoのインストール

おれぁおせっかい焼きの子熊のゾルバ!皆さんの仮想通貨取引を手伝うぜ!

f:id:zorbathelittlebear:20170920011918p:plain


今日でようやくGekkoのインストールが完了します。もう少しお付き合い下さい。

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その五 Google Cloud Platformでのサーバー構築の続き - 子熊のゾルバ@cryptocurrency


node(nodejs)と関連パッケージのインストール

Gekkoを動かすにはnodejsのバージョン6以上が必要です。前回の記事でapt-getでインストールしたnodejsとnpmのバージョンは古いので、アップグレードします。

$ nodejs -v
v4.2.6

前回の記事を参考に、SSHでアクセスします。
以下のコマンドを入力し、rootで作業します。プロンプトが"$"から"#"に変わったことを確認します。

sudo su -

npmのキャッシュを削除します。

npm cache clean

n packageをインストールします。

npm install n -g

インストールが成功すればこのように表示されます。

# npm install n -g
/usr/local/bin/n -> /usr/local/lib/node_modules/n/bin/n
/usr/local/lib
└── n@2.1.8 

node(nodejs)をインストールします。

n stable

インストールが成功すればこのように表示されます。バージョンはv8.6.0ですね。

# n stable

     install : node-v8.6.0
       mkdir : /usr/local/n/versions/node/8.6.0
       fetch : https://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-x64.tar.gz
######################################################################## 100.0%
   installed : v8.6.0

apt-getでインストールしたnodejsとnpmは削除しておきます。

apt-get purge -y nodejs npm

Gekkoのインストール

お待たせしました。ようやくGekkoをインストールします!

Gekko用のグループ、ユーザーを作成します。(rootで動作させると、アプリケーションの脆弱性によってはシステムの乗っ取りにつながるため)

groupadd gekko
useradd -g gekko --shell /usr/sbin/nologin gekko

Gekko用の作業用ディレクトリを作成します。

cd /home/
mkdir gekko
chown gekko:gekko gekko

/usr/local/bin/ディレクトリの下に移動します。

cd /usr/local/bin/

Gekkoをダウンロードします。

git clone git://github.com/askmike/gekko.git

成功すればこのように表示されます。

# git clone git://github.com/askmike/gekko.git
Cloning into 'gekko'...
remote: Counting objects: 9036, done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 9036 (delta 10), reused 12 (delta 3), pack-reused 9008
Receiving objects: 100% (9036/9036), 2.84 MiB | 0 bytes/s, done.
Resolving deltas: 100% (5844/5844), done.
Checking connectivity... done.

Gekkoのアプリケーションの所有者をgekkoユーザーに変更します。

chown -R gekko:gekko gekko


Gekkoのディレクトリに移動します。

cd gekko

Gekkoに必要なパッケージをインストールします。

npm install --only=production

成功すればこのように表示されます。

# npm install --only=production
npm WARN deprecated crypto@0.0.3: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead
npm WARN deprecated tough-cookie@2.2.2: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130

> bufferutil@1.2.1 install /usr/local/bin/gekko/node_modules/bufferutil
> node-gyp rebuild

make: Entering directory '/usr/local/bin/gekko/node_modules/bufferutil/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/bufferutil/build'

> utf-8-validate@1.2.2 install /usr/local/bin/gekko/node_modules/utf-8-validate
> node-gyp rebuild

make: Entering directory '/usr/local/bin/gekko/node_modules/utf-8-validate/build'
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/utf-8-validate/build'

> websocket@1.0.24 install /usr/local/bin/gekko/node_modules/websocket
> (node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/usr/local/bin/gekko/node_modules/websocket/build'
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
  SOLINK_MODULE(target) Release/obj.target/bufferutil.node
  COPY Release/bufferutil.node
  CXX(target) Release/obj.target/validation/src/validation.o
  SOLINK_MODULE(target) Release/obj.target/validation.node
  COPY Release/validation.node
make: Leaving directory '/usr/local/bin/gekko/node_modules/websocket/build'

> sqlite3@3.1.13 install /usr/local/bin/gekko/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

[sqlite3] Success: "/usr/local/bin/gekko/node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.node" is installed via remote

> relieve@2.2.1 postinstall /usr/local/bin/gekko/node_modules/relieve
> node links.js

npm notice created a lockfile as package-lock.json. You should commit this file.
added 574 packages in 46.167s

Gekkoの設定ファイルを作成します。(設定例のファイルをコピー)

cp -p sample-config.js config.js

Gekkoのもう1つの設定ファイルを編集します。ディレクトリに移動します。

cd web/vue

初期設定のファイルのバックアップを取ります。

mv UIconfig.js UIconfig.js.default

以下のコマンドを全てコピー&ペーストします。この例ではuiのhostにhogehoge.gaを入れていますが、Freenomで取得したドメイン名に置き換えてください。

cat << '__EOF__' > UIconfig.js
// This config is used in both the
// frontend as well as the web server.

// see https://gekko.wizb.it/docs/installation/installing_gekko.html

const CONFIG = {
  headless: true,
  api: {
    host: '127.0.0.1',
    port: 3000,
  },
  ui: {
    ssl: true,
    host: 'hogehoge.ga',
    port: 443,
    path: '/'
  },
  adapter: 'sqlite'
}

if(typeof window === 'undefined')
  module.exports = CONFIG;
else
  window.CONFIG = CONFIG;
__EOF__

起動用の設定ファイルを準備します。以下のコマンドを全てコピー&ペーストします。

cat << '__EOF__' > /etc/systemd/system/gekko.service
[Unit]
Description=Gekko
After=syslog.target network.target

[Service]
Type=simple
User=gekko
Group=gekko
Environment=PATH=/usr/local/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
ExecStart=/usr/local/bin/node /usr/local/bin/gekko/gekko.js --ui
WorkingDirectory=/home/gekko
KillMode=process

[Install]
WantedBy=multi-user.target
__EOF__

Gekkoを起動します。

systemctl start gekko

GekkoがOS起動時に自動的に立ち上がるようにします。

systemctl enable gekko

状態を確認します。

systemctl status gekko

以下のように、loaded (/etc/systemd/system/gekko.service; enabledのようにenabledと表示されていればOS起動時に立ち上がります。
active (running)と表示されていれば現在起動しています。

# systemctl status gekko
● gekko.service - Gekko
   Loaded: loaded (/etc/systemd/system/gekko.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-10-03 14:00:48 UTC; 11s ago
 Main PID: 8718 (node)
    Tasks: 6
   Memory: 21.0M
      CPU: 304ms
   CGroup: /system.slice/gekko.service
           └─8718 /usr/local/bin/node /usr/local/bin/gekko/gekko.js --ui

Oct 03 14:00:48 gekko node[8718]:   $$ | _$$/ $$ |__    $$ |/$$/  $$ |/$$/  $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ |/    |$$    |   $$  $$<   $$  $$<   $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ |$$$$ |$$$$$/    $$$$$  \  $$$$$  \  $$ |  $$ |
Oct 03 14:00:48 gekko node[8718]:   $$ \__$$ |$$ |_____ $$ |$$  \ $$ |$$  \ $$ \__$$ |
Oct 03 14:00:48 gekko node[8718]:   $$    $$/ $$       |$$ | $$  |$$ | $$  |$$    $$/
Oct 03 14:00:48 gekko node[8718]:    $$$$$$/  $$$$$$$$/ $$/   $$/ $$/   $$/  $$$$$$/
Oct 03 14:00:48 gekko node[8718]:         Gekko v0.5.7
Oct 03 14:00:48 gekko node[8718]:         I'm gonna make you rich, Bud Fox.
Oct 03 14:00:49 gekko node[8718]: TAlib is disabled
Oct 03 14:00:49 gekko node[8718]: Serving Gekko UI on https://hogehoge.ga:443/

Gekkoの動作確認

それではではブラウザでGekkoにアクセスしてみましょう。
https://hogehoge.ga/
私の場合、hogehoge.gaですがFreenomで取得したドメイン名に置き換えてください。

nginxが正しく動いていれば認証画面が表示されます。htpasswdコマンドで設定したユーザー名、パスワードを入力します。

f:id:zorbathelittlebear:20171003231705p:plain

Gekkoが正しく動いていれば、以下の画面が表示されます。

f:id:zorbathelittlebear:20171004000047p:plain

おめでとうございます!
慣れていない人は全体的に少し難しかったかもしれません。ご不明な点、うまくいかない点があればお気軽にコメントを頂ければと思います。

うまく動作しない時は

Google Chromeでアクセスすると、このようなエラーが表示されます。

このサイトにアクセスできません hogehoge.gaのサーバーのDNSアドレスが見つかりませんでした。 DNS_PROBE_FINISHED_NXDOMAIN

f:id:zorbathelittlebear:20171004003759p:plain

以下の点を確認します。


MyDNSサーバーへのIPアドレス通知が成功しているかログで確認します。

cat /var/log/mydns.log

以下のように、サーバーから200 OKが応答されている事、正しいユーザー名を使用している事、サーバーの外部IPが応答されている事を確認します。

< HTTP/1.1 200 OK    <=== ココ
< Date: Tue, 03 Oct 2017 15:27:58 GMT
< Server: Apache/2.2.15 (CentOS)
< X-Powered-By: PHP/5.3.3
< Vary: Accept-Encoding,User-Agent
< Content-Length: 608
< Content-Type: text/html; charset=UTF-8
<
<html>
<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc  | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>

</head>
<BODY BGCOLOR="#FFFFFF"
      TEXT="#304040"
      leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydnsXXXXXX</DD>    <=== ココ
<DT>REMOTE ADDRESS:</DT><DD>xxx.xxx.xxx.xxx</DD>    <=== ココ
<DT>ACCESS DAYTIME:</DT><DD>2017/10/03 17:27</DD>
<DT>SERVER ADDRESS:</DT><DD>46.19.34.8</DD>
<BR>

</body>
</html>
* Connection #0 to host www.mydns.jp left intact
このサイトにアクセスできません hogehoge.gaからの応答時間が長すぎます。 ERR_CONNECTION_TIMED_OUT

f:id:zorbathelittlebear:20171004003820p:plain

以下の点を確認します。

このサイトにアクセスできません hogehoge.gaで接続が拒否されました ERR_CONNECTION_REFUSED

f:id:zorbathelittlebear:20171004004128p:plain

nginxが起動しているか確認します。
起動していない場合、設定ファイル(/etc/nginx/sites-available/default)が正しいか確認し、systemctl start nginxで起動します。
もしOS起動時に自動的に起動しない場合、systemctl enable nginxで自動起動を有効にします。

このページは動作していません hogehoge.gaからデータが送信されませんでした。

f:id:zorbathelittlebear:20171004004630p:plain

HTTPでアクセスしていませんか?URLに「https://」を指定してアクセスしている事を確認します。
(セキュリティ上不要なアクセスを防ぐため、nginxでLet's Encrypt以外からのHTTPアクセスはコネクションを切断(RSTを応答)するように設定しています。)

401 Authorization Required

f:id:zorbathelittlebear:20171004005521p:plain

nginxのユーザー認証に失敗しています。パスワードを忘れた時は、以下のファイルを削除します。

rm -f /etc/nginx/.htpasswd

改めて認証設定を作成します。

htpasswd -bc /etc/nginx/.htpasswd USERNAME PASSWORD

nginxに設定を読み込ませます。

systemctl reload nginx
502 Bad Gateway

f:id:zorbathelittlebear:20171004005538p:plain

Gekkoが停止しています。以下のコマンドでGekkoを起動します。

systemctl start gekko
Disconnected

f:id:zorbathelittlebear:20171004005550p:plain

Gekkoの設定が間違っているかもしれません。
改めて本記事で設定したUIconfig.jsが正しいか確認します。

参考サイト

Ubuntuに最新のNode.jsを難なくインストールする - Qiita

Installing Gekko - Gekko

centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する - Qiita


____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その五 Google Cloud Platformでのサーバー構築の続き

俺の名を言ってみろ!!

f:id:zorbathelittlebear:20170920011918p:plain


子熊のゾルバです。
前回に引き続き、Google Cloud Platformでサーバー構築を行っていきます。

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築 - 子熊のゾルバ@cryptocurrency

Google Cloud SDKのインストール

Google Cloud Platformの管理や、VMインスタンスへのSSHアクセスにはGoogle Cloud SDKが必要となります。ここでは、Windowsへのインストール方法について説明します。

こちらのリンクからGoogle Cloud SDKインストーラーをダウンロードします。

Windows 用のクイックスタート  |  Cloud SDK のドキュメント  |  Google Cloud Platform

f:id:zorbathelittlebear:20170926234443p:plain


インストーラーを実行するとインストールウィザードが開始します。Nextをクリックします。

f:id:zorbathelittlebear:20170926234523p:plain


I Agreeをクリックします。

f:id:zorbathelittlebear:20170926234621p:plain


All Usersを選択し、Nextをクリックします。ユーザーアカウント制御のメッセージが表示されるので、はいを選択します。

f:id:zorbathelittlebear:20170926235025p:plain


Nextをクリックします。

f:id:zorbathelittlebear:20170926235309p:plain


Installをクリックします。

f:id:zorbathelittlebear:20170926235335p:plain


緑のバーが右まで到達したらNextをクリックします。

f:id:zorbathelittlebear:20170926235405p:plain


Finishをクリックします。

f:id:zorbathelittlebear:20170927003717p:plain


Google Cloud SDK Shellが起動し、'gcloud init'コマンドが自動的に実行されます。Yを入力しEnterキーを押すと、自動的にブラウザが起動します。

f:id:zorbathelittlebear:20170926235630p:plain


ブラウザでGoogleアカウントへのログインを行います。メールアドレスを入力します。

f:id:zorbathelittlebear:20170926235723p:plain


パスワードを入力します。

f:id:zorbathelittlebear:20170926235844p:plain


許可をクリックします。

f:id:zorbathelittlebear:20170926235917p:plain


以下の画面が表示されたら認証が完了です。ターミナルに戻りましょう。

f:id:zorbathelittlebear:20170927000012p:plain


既に作成済みのプロジェクトに接続するので、1を入力してEnterを押します。

f:id:zorbathelittlebear:20170927000227p:plain


Yを入力してEnterを押します。

f:id:zorbathelittlebear:20170927000436p:plain


デフォルトのゾーンを設定します。VMインスタンスを作成したゾーンの番号を入力し、Enterを押します。(ゾーンを忘れた人は、Google Cloud Platformの管理画面に戻り、Compute Engine > VMインスタンスから、ゾーンを確認します)

f:id:zorbathelittlebear:20170927000650p:plain

f:id:zorbathelittlebear:20170927001336p:plain


特にエラーが無くプロンプトに戻れば、Google Cloud SDKのセットアップは完了です。

f:id:zorbathelittlebear:20170927000835p:plain

Google Cloud SDKからVMインスタンスへのSSH接続

Google Cloud Platformの管理画面から、Compute Engine > VMインスタンスに移動します。プルダウンからgcloudコマンドを表示をクリックします。

f:id:zorbathelittlebear:20170927001449p:plain

*1


コマンドラインをメモします。

f:id:zorbathelittlebear:20170927001714p:plain


Google Cloud SDK Shellに、先程メモしたコマンドを貼り付け、Enterを押します。
例)

gcloud compute --project "moonlit-dynamo-XXXXXX" ssh --zone "us-central1-c" "VMインスタンス名"

f:id:zorbathelittlebear:20170927004936p:plain

*2


初回アクセス時にはSSH認証鍵の生成が行われます、Yをを入力してEnterを押します。

f:id:zorbathelittlebear:20170927005124p:plain


puttyが起動してSSHでのアクセスができるようになります。

f:id:zorbathelittlebear:20170927003055p:plain

*3

もしアクセス出来ない場合、ファイアウォール設定を見直し、現在のIPアドレスがdefault-allow-sshのIP範囲に含まれているか確認します。

パッケージのインストール

インストールされているパッケージを最新にバージョンアップしましょう。

sudo apt-get update && sudo apt-get -y dist-upgrade

必要なパッケージをインストールします。

sudo apt-get -y install git build-essential nginx letsencrypt sqlite nodejs npm apache2-utils fail2ban geoip-bin geoip-database apt-file

kernel等が更新された場合は再起動されないと読み込まれないので、一旦再起動します。

sudo reboot


SSHが切断されるので、OKをクリックします。

f:id:zorbathelittlebear:20170927004235p:plain


自動では再接続してくれないので、Google Cloud SDK Shellからもう一度gcloud computerコマンドを実行します。(カーソルキーの上を押し、Enterを押す)


ログインが終わったら管理者権限(root)で作業します。

sudo su -

プロンプトが"$"から"#"に変わったことを確認します。以下の作業はこの状態でないとうまく行きません。

nginxのセットアップ

では、nginxのサイト設定ディレクトリに移動します。

cd /etc/nginx/sites-available/

初期設定ファイルのバックアップを取っておきます。

mv default default.bak

nginx用の設定ファイルを書き込みます。全部コピー&ペーストして下さい。
server_nameとssl_certificateに設定しているhogehoge.gaというドメイン名は例なので、Freenomで取得したドメイン名に変更します。

cat << '__EOF__' > default
# Deny HTTP access with invalid hostname
server {
    listen 80 default_server;
    server_name _;
    return 444;
}

# Accept HTTP access with valid hostname
server {
    listen 80;
    root /var/www/letsencrypt;
    server_name hogehoge.ga; # Change domain name to yours
    server_tokens off;

    # Accept access to directory used by Let's Encrypt certificate renewal
    location ^~ /.well-known/acme-challenge/ {
        allow all; 
    }

    # Otherwise deny access
    location / {
        return 444;
    }
}

__EOF__

ファイルが正しく書き込めたか確認します。

cat default

Let's Encryptの証明書生成時に使用するディレクトリを作成します。

mkdir /var/www/letsencrypt

Gekkoへのアクセス時に使用するユーザー名、パスワードを指定します。以下のUSERNAME、PASSWORDは好きな文字列でよいですが、ある程度複雑なものを設定します。

htpasswd -bc /etc/nginx/.htpasswd USERNAME PASSWORD

一度nginxの設定が正しいか確認しておきましょう。

nginx -t

設定の書式が合っていれば以下のように表示されます。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

設定を読み込ませるため、一度nginxを再起動します。

systemctl restart nginx

Let's Encryptからの証明書取得

以下の例では、-dオプションでドメイン名にhogehoge.gaを指定していますが、Freenomで取得したドメインに変更してください。-mオプションで指定しているメールアドレス(xxx@example.com)も、使用しているメールアドレスにします。(Gmail等のアドレスでOKです)

letsencrypt certonly --webroot -w /var/www/letsencrypt -d hogehoge.ga --agree-tos -m xxx@example.com -n

成功すると以下のようにCongraturations!と表示されます。

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to xxx@example.com.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/hogehoge.ga/fullchain.pem. Your cert will
   expire on 2017-12-29. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

成功していたら、nginxの設定ファイルにHTTPS用の設定を追記します。
まず設定ファイルのディレクトリに移動します。

cd /etc/nginx/sites-available/

以下のコマンドをすべてコピー&ペーストし、HTTPS用の設定を追記します。
今回は">>"で追記という意味になっている事に注意して下さい。">"だと上書きとなり、今の設定が消えます。
*4

cat << '__EOF__' >> default
# Gekko configuration as upstream service
upstream websocket {
    server localhost:3000;
}

# HTTPS reverse proxy configuration for Gekko
server {
    listen 443 ssl;
    root /var/www/html;
    server_name hogehoge.ga; # Change domain name to yours
    server_tokens off;

    # Set strong encryption
    ssl_protocols TLSv1.1 TLSv1.2;

    # Set Let's encrypt certificate
    ssl_certificate /etc/letsencrypt/live/hogehoge.ga/fullchain.pem; # Change domain name to yours
    ssl_certificate_key /etc/letsencrypt/live/hogehoge.ga/privkey.pem; # Change domain name to yours

    # Add some security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;

    # Gekko configuration 
    # https://gekko.wizb.it/docs/installation/installing_gekko_on_a_server.html
    location / {
            proxy_buffers 8 32k;
            proxy_buffer_size 64k;

            proxy_pass http://websocket;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;

            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";

            proxy_read_timeout 86400s;
            proxy_send_timeout 86400s;

            # Authentication needed
            auth_basic "Restricted Content";
            auth_basic_user_file /etc/nginx/.htpasswd;
    }
}
__EOF__

nginxを再起動し、HTTPSの設定と証明書を読み込ませます。

systemctl restart nginx

もし失敗する場合、トラブルシューティングを参考にしてみて下さい。

crontabの設定

MyDNSへのIPアドレス通知と、Let's Encryptの証明書更新をcronで自動的に行うための設定を行います。

crontab -e

最初にcrontabを起動するときに、どのエディターを使うか質問されます。
デフォルトのnanoを使用する場合、そのままEnterキーを押します。

no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]:

以下のような文字が表示されるので、カーソルキーの下を押し、一番下の行に移動します。

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
<===ココまで移動

以下の文字列をクリップボードにコピーし、ターミナル上で右クリックしてペーストします。
1行目のUSERNAMEとPASSWORDはMyDNSからメールで届いたものを入力します。

*/10 * * * * /usr/bin/curl -v --user USERNAME:PASSWORD https://ipv4.mydns.jp/login.html > /var/log/mydns.log 2>&1
48 20 * * * /usr/bin/letsencrypt renew > /var/log/letsencrypt-renew.log 2>&1 && /bin/systemctl reload nginx > /var/log/systemctl-reload-nginx.log 2>&1 

*5

ペースト後カーソル行の左側が$記号に変化し、貼り付けに失敗したように見えますが、カーソルキーの左を押すとちゃんと表示されるはずです。

*/10 * * * * /usr/bin/curl -v --user USERNAME:PASSWORD http://www.mydns.jp/login.html > /var/log/mydns.log 2>&1
$d-nginx.log 2>&1


Ctrlキー + oで保存します。画面下部に以下のように表示されるので、Enterキーを押して続行します。

File Name to Write: /tmp/crontab.96HcXA/crontab
^G Get Help                 M-D DOS Format              M-A Append                  M-B Backup File
^C Cancel                   M-M Mac Format              M-P Prepend                 ^T To Files

Ctrlキー + xで終了します。プロンプトに戻ります。


cronが正しく設定されたか確認します。貼り付けた文字が表示されていればOKです。

crontab -l

fail2banで不要なアクセスを遮断

nginxでGekkoへのアクセスに認証を設定しています。ここでは、認証が5回失敗したら30分間アクセスを遮断するようにします。

アクセス遮断が発動する条件を設定します。nginxのログに401(認証失敗)が出力された場合に発動するようにします。

cat << '__EOF__' > /etc/fail2ban/filter.d/nginx-401.conf
[Definition]
failregex = ^<HOST> -.* 401
ignoreregex =
__EOF__

アクセス遮断をどのように行うか設定します。
ここでは、maxretry = 5、findtime = 120なので、120秒間の間に5回ログインが失敗したら実行します。
bantime = 1800なので、遮断時間は1800秒(30分)です。

cat << '__EOF__' > /etc/fail2ban/jail.d/nginx-401-jail.conf
[nginx-401]
enabled = true
port    = https
filter  = nginx-401
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 120
bantime = 1800
__EOF__

HTTPに対してのファイアウォールルールは、Let's Encryptからのアクセスを受け入れるため全IPアドレスから許可しています。
Let's Encrypt以外からのしつこいアクセスもついでに禁止してしまいましょう。

HTTPへのアクセスは基本的に444(RSTを応答)がログに残るようにしています

cat << '__EOF__' > /etc/fail2ban/filter.d/nginx-444.conf
[Definition]
failregex = ^<HOST> -.* 444
ignoreregex =
__EOF__

こちらは300秒に2回444が発生したら1週間アクセスを遮断するというルールです。

cat << '__EOF__' > /etc/fail2ban/jail.d/nginx-444-jail.conf
[nginx-444]
enabled = true
port    = http
filter  = nginx-444
logpath = /var/log/nginx/access.log
maxretry = 2
findtime = 300
bantime = 604800
__EOF__

fail2banに設定を読み込ませます。

systemctl reload fail2ban

だいぶ長くなってしまいましたので、今回はここまでにしておきましょう。お疲れ様でした!
CLIでの作業で手順も複雑なので、もしわかりづらければお気軽にコメント下さい。
セットアップ作業の8割位は終了しているので、もう少しお付き合いください。。

トラブルシューティング

もし証明書の取得に失敗する場合、以下のような点を確認します。

  1. 名前解決ができるか
  2. nginxが起動しているか
  3. ファイアウォールの設定が正しいか

①名前解決ができるか
"nslookup ドメイン名"というコマンドで、IPアドレスが解決できるか確認します。以下、hogehoge.gaというドメインの例です。

# nslookup hogehoge.ga
Server:		169.254.169.254
Address:	169.254.169.254#53

Non-authoritative answer:
Name:	hogehoge.ga
Address: xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxxの部分が、Google Cloud Platformの外部IPと一致していれば問題ありません。

もし一致していない場合、FreenomでのChange Nameserversの設定が正しく行われているか確認します。
また、MyDNSでのドメイン設定が正しいか確認します。

その後以下のコマンドを実行し、MyDNSに改めてIPアドレスを通知します。USERNAME:PASSWORDには、MyDNSから届いたメールに記載のものを指定します。

curl -v --user USERNAME:PASSWORD http://www.mydns.jp/login.html

以下、実行結果例です。

# curl -v --user USERNAME:PASSWORD http://www.mydns.jp/login.html
*   Trying 210.197.74.203...
* Connected to www.mydns.jp (210.197.74.203) port 80 (#0)
* Server auth using Basic with user 'USERNAME'
> GET /login.html HTTP/1.1
> Host: www.mydns.jp
> Authorization: Basic XXXXXXXXXXXXXXXXX=
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 OK <=== ココ
< Date: Sun, 01 Oct 2017 11:24:38 GMT
< Server: Apache
< Vary: Accept-Encoding,User-Agent
< Content-Length: 612
< Content-Type: text/html; charset=UTF-8
< 
<html>
<head>
<title>Free Dynamic DNS (DDNS) for Home Server and VPS etc  | MyDNS.JP</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<LINK href="./site.css" rel=stylesheet type=text/css>

</head>
<BODY BGCOLOR="#FFFFFF"
      TEXT="#304040"
      leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"
>
Login and IP address notify OK.<BR>
login_status = 1.<BR>
<BR>
<DT>MASTERID :</DT><DD>mydns776352</DD>
<DT>REMOTE ADDRESS:</DT><DD>xxx.xxx.xxx.xxx</DD> <=== ココ
<DT>ACCESS DAYTIME:</DT><DD>2017/10/01 20:24</DD>
<DT>SERVER ADDRESS:</DT><DD>210.197.74.203</DD>
<BR>

</body>
</html>
* Connection #0 to host www.mydns.jp left intact

チェックするポイントとしては、サーバーから200 OKというレスポンスがあり、REMOTE ADDRESSにGoogle Cloud Platformの外部IPが表示されている事です。もう一度"nslookup ドメイン名"を入力すれば、IPアドレスが表示されるはずです。

②nginxが起動しているか
"systemctl status nginx"コマンドでnginxが起動している(active (running))という表示になっている事を確認します。

# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-09-30 13:05:16 UTC; 21h ago


ファイアウォールの設定が正しいか
ファイアウォールルールを確認し、default-allow-httpのIP範囲が0.0.0.0/0となっている事を確認します。

参考サイト

Installing Gekko - Gekko

Installing Gekko on a server - Gekko


____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

*1:ファイアウォールルールで許可する接続元IPアドレスを自宅のみに設定しているはずなので、ブラウザウィンドウで開くのオプションは使用できません。

*2:gcloud initでデフォルトのプロジェクトやゾーンの設定が完了しているので、「gcloud compute ssh "VMインスタンス名"」だけでもアクセスができます。

*3:Linuxへのログインユーザーが接続方法により異なります。ブラウザからのSSHアクセスの場合にはGoogleアカウント(@より前の部分)、WindowsGoogle Cloud SDKの場合Windowsでログイン中のユーザー名となります。

*4:最初にHTTPSの設定を入れなかったのは、まだHTTPS用の証明書がなく、nginxを起動しようとしてもエラーで起動しなくなるためです。

*5:上の行は、10分毎にMyDNSにIPアドレスの通知を行う設定です。下の行は、毎日20時48分(UTC)に証明書が必要か確認し、必要であれば更新を行います。それぞれ最後の実行結果は/var/log/ディレクトリの下にログを保存するようにしています。

【号外】ジンバブエでBitcoinが7,200$に高騰 実際に取引してみました

ウポポ族の戦士子熊のゾルバです。

f:id:zorbathelittlebear:20170920011918p:plain


ジンバブエビットコインが高騰しているようなので、実際に取引してみました。

cointelegraph.com



早速ジンバブエの取引所BitcoinFundiで口座を開設します。

bitcoinfundi.com


Sign Upしてメールアドレスを登録すればすぐに口座が作れます。SMS認証も他の取引所と一緒ですね。
ただ、二段階認証は最初に表示された二次元バーコードがGoogle Authenticatorで読み込めなかったので、別のコードを表示させてようやく読み込めました。(すいません、スクリーンショット撮り忘れました)

それではBTC Walletに入金します。

f:id:zorbathelittlebear:20170928002203p:plain

入金も他の取引所と変わりません。20分くらいで入金が完了しました。


板を見ると…

f:id:zorbathelittlebear:20170928002334p:plain

現在BTCが5,700ドルなので、それほどの高騰でも無いようです。それに板がすごく薄いので、全然取引が成立しません…。
また、なぜかチャートがありません。これはジンバブエ仕様なのかな?

一応ちょっとBTCを売ってみたので、131USD口座に入っています。追加で0.5BTCを6,300ドルの指値で売ろうと頑張っています。

取引画面の左上にMarketとありますが、取引に使えるフィアット(法定通貨)はUSDとZAR(南アフリカランド)となります。
もしこれでUSDT等のフィアットにペッグする(法定通貨と同等の価値を持つように調整された)仮想通貨が取引に使えれば、

  1. どこかの取引所でBTCを購入
  2. BitcoinFundiにBTCを送る
  3. BitcoinFundiでBTCを売ってUSDTを購入
  4. USDTをBittrexなどの取引所に送る
  5. BittrexでUSDTを売ってBTCを買う
  6. BTCをBitcoinFundiに送る

という無限ループが可能でしたが、それは叶わないようです。それができたら既に沢山の人がやっているでしょうしね。

なお、USDの引き出しは、ジンバブエの銀行に口座を持っていないとできないようです。

f:id:zorbathelittlebear:20170928010536p:plain


ですので、資産を引き出すのは以下の作戦しかありません。

  1. BitcoinFundiでBTCを売ってUSDに換える
  2. 他の取引所と同じくらいの相場になるまでしばらく待つ
  3. BitcoinFundiでUSDをBTCに換える
  4. BitcoinFundiからBTCを送る

ただ、私もジンバブエ通な訳ではないので、今後相場が落ち着くものなのかわかりません。
また、一日あたりの引き出し額制限がどれくらいなのか、調べましたがわかりませんでした。

リスクが高そうなのであまりおすすめできませんが、ギャンブルが好きな方はぜひジンバブエで取引してみて下さい。最悪ゼロになってもネタになるくらいの額にしておきましょう!

2017/9/28追記①
一晩寝たら、6300ドルで指値を入れておいたBTC売りが、0.5BTC全て約定してました。
あまり欲張らずにさっさとBTCに換えてしまおうと思います。

2017/9/28追記②
とりあえず売ってしまったので、取引成績は以下の通りでした。(手数料引いた後の額です。売買手数料は1 - 2%との事です。)

BTC入金額: 0.521
BTC取引後: 0.557
差: +0.036 (+7%)
1BTCを4198ドルとした場合、151ドルの利益

BTC売りの平均約定単価: 6383.3ドル
BTC買いの平均約定単価: 5851.2ドル

ちょっとしたお小遣いくらいにはなりました。
とりあえず少額で出金のテスト中です。1営業日以内に処理されるとの事ですので、送金が完了したらご報告します。

2017/9/30追記
BTCも全額引き出しできました。確認まで半日はかかるようですので、気長に待ちましょう。
引き出し額が0.5522BTCで、手数料は0.0028BTCです。

現在も価格が不安定でスプレッドが大きいので、同様の手法で少しは利益が出るかもしれません。

f:id:zorbathelittlebear:20170930234819p:plain

ただ、手間がそれなりにかかる、価格が読めない、取引量が小さく約定しにくいというリスクがあるので、あまりおすすめできる方法ではありません。

____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築

わしが男塾塾長子熊のゾルバである!
f:id:zorbathelittlebear:20170921233100p:plain


 

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定 - 子熊のゾルバ@cryptocurrency
 

今回からようやくGoogle Cloud Platformでのサーバー構築に入っていきます。

Google Cloud Platformの無料利用について

Google Cloud Platformでは2017年3月から無料枠を拡張し、以下の条件に当てはまるサーバー構築のみ永年無料としています。*1

  • f1-micro インスタンス1台 (米国リージョンのみ)
  • 30 GB の HDD、5 GB のスナップショット
  • 1GB の北米から全リージョン宛て下りネットワーク (1 か月あたり、中国およびオーストラリアを除く)

f1-microというのはCPUやメモリのサイズが小さいVM(仮想マシン)インスタンスの事ですが、Gekkoを動かすには問題ないスペックです。HDDも30GBあれば大丈夫でしょう。

ただし、Googleが無料枠について今後規約改定を行う可能性があります。

Always Free には有効期限はありますか?

サービスには有効期限はありませんが、Google はサービスを変更する権利を有します。これには使用限度の変更や削除が含まれ、30 日前に通知します。

よくある質問  |  無料試用  |  Google Cloud Platform

勝手に課金される事は無いようですが注意しましょう。

なお、Free Trial期間はGoogle Cloud Platformでの仮想通貨マイニングは禁止となっています。マイニングに使おうと考えていた方はご注意下さい。

2. Limitations.   During the Free Trial:

2.2 Customer may not use the Services to engage in mining cryptocurrency;

Supplemental Terms and Conditions For Google Cloud Platform Free Trial  |  Google Cloud Platform Terms  |  Google Cloud Platform

*2


Google Cloud Platformへの登録

それではさっそくこちらから登録しましょう。

GCP の無料階層 - 無料の長期トライアル、いつまでも無料  |  Google Cloud Platform


無料トライアルをクリックします。

f:id:zorbathelittlebear:20170924202848p:plain

 
お持ちのGoogleアカウントでログインします。

f:id:zorbathelittlebear:20170924202940p:plain
 

パスワードを入力します。

f:id:zorbathelittlebear:20170924203015p:plain


利用規約の同意にはいを選択し、同意して続行をクリックします。

f:id:zorbathelittlebear:20170924203655p:plain


住所、名前、電話番号、クレジットカードを入力し、無料トライアルを開始をクリックします。*3

f:id:zorbathelittlebear:20170924203836p:plain


自動的にプロジェクトが作成されるので、数分待ちましょう。

f:id:zorbathelittlebear:20170924203941p:plain


OKをクリックし、無料トライアルを開始します。

f:id:zorbathelittlebear:20170924204057p:plain
 

VMインスタンスの作成

画面左のメニューからCompute Engineを選択し、VMインスタンスをクリックします。

f:id:zorbathelittlebear:20170924204250p:plain


上部の準備していますのメッセージが消えるまで、少しだけ待ちましょう。

f:id:zorbathelittlebear:20170924204354p:plain


作成をクリックします。

f:id:zorbathelittlebear:20170924204418p:plain
 

以下の通り入力します。

  • 名前: 好きな名前を入力します。取得したドメイン名と同じだとわかりやすいです。
  • ゾーン: 無料枠対象のus-eastX-X, us-centralX-X, us-westX-Xから好きなものを選択します。
  • マシンタイプ: 無料枠対象のmicroを選択します。
  • ブートディスク: 変更をクリックします。

f:id:zorbathelittlebear:20170924205310p:plain


Ubuntu 16.04 LTSを選択します。サイズは無料枠の最大である30GBにします。最後に選択ボタンをクリックします。

f:id:zorbathelittlebear:20170924205516p:plain


HTTPトラフィックを許可する、HTTPSトラフィックを許可するにチェックを入れます。管理、ディスク、ネットワーク、SSH認証鍵をクリックします。

f:id:zorbathelittlebear:20170924205800p:plain


起動スクリプトに、以下の文字列をコピー&ペーストします。

#! /bin/bash
curl -v --user USERNAME:PASSWORD https://ipv4.mydns.jp/login.html > /var/log/mydns.log 2>&1

上記のUSERNAME、PASSWORDは、MyDNSからメールで届いたMasterID、Passwordと置き換えて下さい。MyDNSについて、詳しくは前回の記事を見て下さい。

f:id:zorbathelittlebear:20170924210728p:plain


下までスクロールし、作成をクリックします。

f:id:zorbathelittlebear:20170924210918p:plain

 
少し待つとVMが起動します。

f:id:zorbathelittlebear:20170924233417p:plain

ファイアウォールルールの設定

左上のメニュー(横三本線)から、VPCネットワーク、ファイアウォールルールを選択します。

f:id:zorbathelittlebear:20170926010201p:plain


デフォルトでは以下のように、0.0.0.0/0 (インターネット上のすべてのIPアドレス)からのアクセスが許可されています。

f:id:zorbathelittlebear:20170926215630p:plain


インターネット上のサーバーは常に攻撃を受けているため、できるだけ不要なIPアドレスからのアクセスを遮断します。ここでは設定を簡単にするため、自宅のIPアドレスからのみアクセスを許可します。ただし、後の記事で紹介しますが、Let's Encryptによる証明書の更新を行うため、HTTPについては0.0.0.0/0からのアクセスを許可したままとします。

*4

*5


まず、自宅のIPアドレスを確認しましょう。ブラウザから以下のリンクにアクセスします。

www.cman.jp


赤枠で囲った部分に自宅のIPアドレスが表示されます。

f:id:zorbathelittlebear:20170926223800p:plain


ファイアウォールルール設定画面に戻り、default-allow-httpsをクリックします。

f:id:zorbathelittlebear:20170926224038p:plain


編集をクリックします。

f:id:zorbathelittlebear:20170926224148p:plain


ソースIPの範囲に0.0.0.0/0が入っているので、☓ボタンを押して削除します。先程確認した自宅のIPアドレスの最後に"/32"をつけて、Enterを押します。(この例では111.111.111.111/32)。最後に保存をクリックします。

f:id:zorbathelittlebear:20170926225136p:plain


設定が保存されました。左上の矢印でファイアウォールルールの一覧に戻ります。

f:id:zorbathelittlebear:20170926225333p:plain


同様に、default-allow-icmp, default-allow-rdp, default-allow-sshも変更します。default-allow-internalは変更せずにおきましょう。最終的に、default-allow-httpとdefault-allow-internal以外が自宅のIPアドレスになっていればOKです。

f:id:zorbathelittlebear:20170926225948p:plain

なお、自宅のIPアドレスルーターの再起動や、プロバイダのメンテナンス等で変更される場合があります。VMインスタンスにアクセスできないなと思ったら、ちょっと手間ですが自宅のIPアドレスの確認と、ファイアウォールルールの設定し直しを行って下さい。

以上でVMの作成までは完了です。お疲れ様でした!
少し長くなりましたので、今回の記事はここで切らせて頂きます。


____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin
 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で


Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 


 

*1:AWSにも無料枠がありますが、最初の一年だけです。

*2:ファイアウォール設定で中国やオーストラリアからのアクセスをブロックしないと、もしかすると1円程度の課金が発生してしまう可能性があります。セキュリティ上の理由もあるため、不要なアクセスは遮断しましょう。 GCEのf1-microインスタンスを真にタダで使う方法 - Qiita

*3:この例では適当な情報を入力していますが、正しい情報を入力しましょう

*4:後述しますが、HTTPへのアクセスも、nginxの設定で極力不要なアクセスを遮断します。 IP addresses LE is validating from to build firewall rule - Help - Let's Encrypt Community Support

*5:実際には日本以外のIPアドレスからのアクセスを遮断すれば攻撃の9割以上が防止できます。ある程度Linuxの経験がある方は、GCPファイアウォールではなく、geoipでアクセス制限を行ったほうが便利です。(自宅のIPアドレスが変わったりしますし、外出先からもアクセスできるので) Limit your SSH logins using GeoIP » Axllent.org nginx で ngx_http_geoip_module を利用して国別アクセス制御を行う ただ、設定がやや煩雑なのと、SSH接続ができなくなるとシリアルコンソール接続して復旧しなくてはいけなくなったりするので、ここでの解説は割愛します。 シリアル コンソールとのやり取り  |  Compute Engine ドキュメント  |  Google Cloud Platform

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その三 MyDNSでのダイナミックDNS設定

わしゃ子熊のゾルバじゃけえのう。麦じゃ、踏まれて踏まれて強くまっすぐにのびて実をつける麦になるんじゃ。

f:id:zorbathelittlebear:20170920011918p:plain

 

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得 - 子熊のゾルバ@cryptocurrency

 

今回はMyDNSでのダイナミックDNS設定を行います。

 

 

ダイナミックDNSとは

Google Cloud Platformなどのクラウドサービスでは、サーバーを再起動するたびにIPアドレスが変わってしまいます。*1常に同じ名前(この例ではhogehoge.ga)でサーバーにアクセスできるようにするため、ダイナミックDNSを利用します。

ざっくりですが、このような仕組みとなります。

 

f:id:zorbathelittlebear:20170923161454p:plain

MyDNSとは

上記のようなダイナミックDNSサービスを無償提供してくれるサービスプロバイダーです。日本語なので英語に抵抗がある方でも安心です。

今後やる事としては、

  • MyDNSアカウントの取得
  • MyDNSアカウントと前回の記事で取得したドメイン名の紐付け
  • Google Cloud Platformでのサーバーセットアップ後に、MyDNSサーバーへのIPアドレス通知設定

です。(最後の通知設定は後日の記事で)

 

MyDNSでのアカウントの取得とドメインの設定

 それではこちらのURLにアクセスしてアカウントを取得しましょう。日本語なのでわかりやすいですね。

Free Dynamic DNS (DDNS) for Home Server and VPS etc | MyDNS.JP

 

画面右上のJOIN USをクリックします。

f:id:zorbathelittlebear:20170924010743p:plain

 画面をスクロールし、必要な情報を入力した後にCHECKをクリックします。*2

f:id:zorbathelittlebear:20170924011451p:plain

入力した情報が正しい事を確認し、OKをクリックします。

f:id:zorbathelittlebear:20170924012306p:plain

 

登録が完了するとすぐにメールが届きます。MasterID、Passwordを確認します。*3

f:id:zorbathelittlebear:20170924013120p:plain

 

画面左のMaster ID、Passwordを入力し、LOG INをクリックします。

f:id:zorbathelittlebear:20170924013429p:plain

 

画面左のDOMAIN INFOをクリックします。

f:id:zorbathelittlebear:20170924013626p:plain

 

画面をスクロールし、ドメイン情報を入力します。Domain欄には前回の記事でFreenomで取得したドメイン名、Hostname欄には"*"(アスタリスク)を入力します。他は空欄のままでOKです。最後にCHECKボタンをクリックします。

f:id:zorbathelittlebear:20170924014259p:plain

 

入力した情報が正しい事を確認し、OKをクリックします。

f:id:zorbathelittlebear:20170924014652p:plain

 

ドメイン情報を更新しました」というメッセージが表示されればOKです。

f:id:zorbathelittlebear:20170924014854p:plain

 

以上でMyDNSの設定は完了です。お疲れ様でした!

次回からはようやくGoogle Cloud PlatformでGekko用のサーバー構築に入っていきます。サーバーからMyDNSのWebサーバーにアカウント、パスワードを送ることで、MyDNSに設定したドメイン名がサーバーのIPアドレスと紐づくようになります。

 

____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

 

*1:静的外部IPアドレスを設定する事も可能ですが、サーバーが停止している状態では料金が発生します

*2:この例では適当な情報を入力していますが、ドメインの所有者として正しい情報を登録する事が必要です。

*3:もししばらく待ってもメールが届かない人は、迷惑メールに振り分けられていないか確認しましょう。

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得

オッス、オラ子熊のゾルバ!今日もよろしくな!

f:id:zorbathelittlebear:20170921233100p:plain

 

前回の記事はこちら

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明 - 子熊のゾルバ@cryptocurrency

 

 ドメインについて

今回はGekkoを動かすサーバー用にドメインを取得していきます。

Google Cloud Platformというサービス上でLinuxサーバーをセットアップするのですが、そこにアクセスするためのIPアドレスがサーバーを再起動するたびに変わってしまいます。いつも同じホスト名(www.googole.comのような名前)でアクセスするためにドメインを取得しましょう。*1

ドメインについての説明はこちら。

ドメイン名は「インターネット上 の住所表示」 | ドメイン名ってなに? | ドメイン名関連情報 | JPRS

漫画でドメインを説明しています。

https://jprs.jp/related-info/study/ponta.pdf

 

Freenomとは

GoDaddyやお名前.comなどがドメイン取得代行業者として有名ですが、それらは有料のサービスです。Freenomというサービスでは、以下の5つのトップレベルドメインに限り無料でドメインを所有することができます。(.comなどは有料です)

  • .tk
  • .ml
  • .ga
  • .cf
  • .gq

自分用のサーバーを立てるだけであればマイナーなドメインでも十分でしょう。

Freenomでのドメイン登録の方法

まずはこちらにアクセスします。

http://www.freenom.com/ja/index.html

 

ドメイン名として使用したい任意の英数字を入力し、「利用可能状況をチェックします」をクリックします。好きな子の名前を入力してもよいですが、多分後で恥ずかしくなるのでやめておいたほうがよいでしょう。

f:id:zorbathelittlebear:20170922000512p:plain

 

「利用不可」と表示されているドメインは既に他の誰かが取得済みです。「今すぐ入手」と表示されているものからどれかをクリックします。(この例では、hogehoge.gaを選びます。)

f:id:zorbathelittlebear:20170922000818p:plain

右上に「チェックアウト」と表示されるので、そこをクリックします。

f:id:zorbathelittlebear:20170922001026p:plain

 

12ヶ月まで無料なので、Periodには12 Monthsを選び、Continueをクリックします。*2

f:id:zorbathelittlebear:20170922001421p:plain

メンバー登録を行います。左下のEnter Your Email Addressに自分のメールアドレスを登録し、Verify My Email Addressをクリックします。GoogleFacebookのアカウントでログインする事もできます。

f:id:zorbathelittlebear:20170922002653p:plain

届いたメールのリンクをクリックします。

f:id:zorbathelittlebear:20170922003150p:plain

必要な情報を入力します(Company Nameは必須ではありません)。パスワードは使い回しを避け、忘れないようにしましょう!画面下部のI have read and agree to the Terms & Conditionsにチェックを入れ、Complete Orderをクリックします。*3

f:id:zorbathelittlebear:20170922004510p:plain

メンバー登録完了です。Click here to go to your Client Areaをクリックし、管理画面に移動します。

f:id:zorbathelittlebear:20170922004729p:plain

登録したメールアドレス、パスワードを入力し、Loginをクリックします。

f:id:zorbathelittlebear:20170922005026p:plain

画面上のメニューからServicesを選択し、My Domainsをクリックします。

f:id:zorbathelittlebear:20170922005644p:plain

歯車マークのついた、Manage Domainをクリックします。

f:id:zorbathelittlebear:20170922005804p:plain

Management Toolsを選択し、Nameserversをクリックします。

f:id:zorbathelittlebear:20170922005930p:plain

Name Server 1, 2, 3に以下の値を入力し、Change Nameserversをクリックします。*4

  • ns0.mydns.jp
  • ns1.mydns.jp
  • ns2.mydns.jp

f:id:zorbathelittlebear:20170922010223p:plain

 

以上でFreenomの設定は終わりです。お疲れ様でした!

次回はMyDNSを使用してダイナミックDNSの設定を行います。

 

____________________

以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)

日本では以下の3つが主要な仮想通貨取引所となります。

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

 

 

*1:Gekkoを使用するにあたりドメインは必須ではありません。ドメインなんてしゃらくせえ、俺は常にIPアドレス直打ちだぜ!という漢(おとこ)はこの記事を読み飛ばしてください。そうでなければとりあえずドメインを取っておきましょう。

*2:ドメイン更新の通知メールが期限前に届かなかったり、迷惑メールに振り分けられる場合があるようです。更新を忘れないように有効期限の1週間位前に予定表に入れておきましょう。

*3:この例では適当な情報を入力していますが、ドメインの所有者として正しい情報を登録する事が必要です。

*4:後の記事で解説しますが、これらはMyDNSというダイナミックDNSサービスで使用するDNSサーバーです

仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明

はじめまして、子熊のゾルバです。

f:id:zorbathelittlebear:20170920011918p:plain

 

最近仮想通貨の取引を始めました。まだまだ初心者ではありますが、読者の皆様に有益な情報を届けられるように頑張ります。

仮想通貨とは何かだとか、将来性はあるのかとか、今後値上がりするの?という説明は先達が残してくれた情報があるのでここでは説明しません。将来性があると信じているので私も貯金を突っ込んでいます笑

このブログの最初のテーマとしては、仮想通貨の相場データを元に取引を自動化するためのツールをセットアップする手順を説明していきます。

 

 

取引自動化のメリット

今まで仮想通貨や株等の取引を行った経験がある方は、こんな経験があるのではないでしょうか。

  • 仕事や学業など忙しく、取引所のチャートに張り付いてなどいられない
  • 値上がり/値下がりが気になって仕事に集中できない
  • 利益確定、損切りの判断が遅れ、含み損を抱えてしまった
  • チャートを見ていない間に相場が大きく変動してしまった

取引を自動化する事で、事前に決めたルールに従って機械的に取引を行ってくれるので、このようなお悩みをお持ちの方の手助けになれれば幸いです。

 

取引自動化までの流れ

今後書く予定の記事です。Gekkoというツールを動かすのが目標ですが、その下準備が必要です。

  1. 自動取引の概要説明 (本記事)
  2. Freenomでのドメインの取得
  3. MyDNSでのダイナミックDNS設定
  4. Google Cloud Platformでのサーバー構築 (Ubuntu + nginx + Node.js)
  5. Let's Encryptでのサーバー証明書取得
  6. Gekkoのインストール
  7. Gekkoを使った自動取引例の紹介

使用するサービスは全部無料です!私のようなワーキングプアにも嬉しいですね。

できるだけ優しく書いていくつもりですが、ある程度のITの知識と英語力が必要です。もしわからない事があれば、お気軽にコメント欄で質問をお願いします。

Linuxのセットアップに慣れていないと少々骨が折れる作業だと思いますが、それに値する大きな見返りがあります!(多分)

f:id:zorbathelittlebear:20170920010338j:plain

 

取引自動化の概要 

簡単に仮想通貨の取引の流れをご説明します。まず前提条件として、自動取引云々の前に取引所での口座開設と、ビットコインの購入を行う必要があります。

  • 日本の取引所で、日本円でビットコインを購入
  • 仮想通貨を海外の取引所に送金
  • Gekkoという自動取引ツールを使用し、海外の取引所で自動でビットコイン*1 <-> USDTを売買

*2

 

という流れとなります。

まだ仮想通貨取引所の口座を持っていない人は、何はともあれ口座を開設し、少額でよいのでビットコインを購入しましょう。(多くの資金を突っ込むのは、相場をチェックして値段が安くなった時に)

USDTについて、詳しくは以下の記事を参考にして下さい。

 

bitcoinlab.jp

 

前準備(取引所口座の開設)

代表的な取引所をご紹介しますので、全部登録して使い勝手を比較してみる事をおすすめします。 

 

インチェック

初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。  

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

 

bitFlyer

日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。

bitFlyer ビットコインを始めるなら安心・安全な取引所で

 

Zaif

私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。 

 

Poloniex

海外取引所は、Poloniexに口座を開設しましょう。*3

business-infinity.jp

 

口座開設後は、まず二段階認証を有効にしましょう。コイン盗難のリスクを大幅に減らすことができます。

bitcoinlab.jp

 

Gekkoとは

Gekkoとは、オープンソースビットコイン自動取引ツール(ボット)です。

Gekko - Open source bitcoin trading bot platform

 

各種テクニカル分析の指標を元に、APIを通して自動で取引所に売買の命令を出す事ができます。最初から定義されている以下の指標を使う事もできますし、自分でカスタマイズする事も可能です。

Gekkoのセットアップ後はWebUIから売買の条件(Strategy)を作成できます。

f:id:zorbathelittlebear:20170921015037p:plain

 

また、過去の値動きデータをインポートし、自分が定義した売買ルールでどの程度利益が出るかシミュレーションする事もできます(Backtesting)。

f:id:zorbathelittlebear:20170921015207p:plain

この例では相場が良かったこともあり、205.9%の利益が出ています。(よく見ると高値づかみして損をしているところもあるので、まだチューニングの余地がありますね)

自分のStrategyを決めたら、後はそれに従い実際に取引を行ってくれます。

*4

 

長くなりましたので、今回の記事はここで一旦切りたいと思います。

最後に一言、投資は自己責任で!

*1:仮想通貨にもビットコインイーサリアムリップルなどありますが、最も取引高が多い(売買が成立しやすい)という理由で、ここではビットコインを前提にお話します。

*2:USDTとは、常に米ドルと同じ価値を持つようにコントロールされた仮想通貨です。日本円と仮想通貨の交換で利益が出ると課税対象となるため、自動取引では仮想通貨同士での売買を想定しています。ただし、仮想通貨間の売買であっても課税対象とみなす場合があるようで、2017年9月時点では税務署や専門家の見解も割れている状況です。

2017/10/6追記

仮想通貨同士(BTCとUSDT)の売買も課税対象となるようです。手間はかかりますがちゃんと納めましょう。

bitcoiner.link

*3:主要な海外取引所にはPoloniex、Bitfinex、Bittrexなどがありますが、Gekkoでの使い勝手がよいのはPoloniexなので、ここではPoloniexを取り上げます。一番先進的で使い勝手が良いのはBittrex。

*4:他にも取引ボットは色々な種類があり、Haasbotというのが一番人気の様子です。ただし3ヶ月のライセンスが0.06BTCなので、1ヶ月あたり約1万円かかります。Gekkoは無料です。