仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その七 Gekkoを使った自動取引例の紹介
「だ、だれだっ お前はっ!!」「あててみろ ハワイへご招待するぜ」
どうも、宇宙海賊ゾルバです。
前回の記事はこちら
ようやくGekkoのセットアップが終わったので、今回から自動取引に入っていきます。
- 仮想通貨取引のリスクについて前置き
- Webコンソールの概要
- 過去の相場データのインポート
- Gekkoのバグを修正
- Backtestでの取引シミュレーション
- Strategyの作成
- テクニカル分析の参考リンク
仮想通貨取引のリスクについて前置き
仮想通貨の取引自動取引には様々なリスクがあります。馬の耳に念仏かもしれませんが、今一度ご確認下さい。
- 取引で生じた損益は自己責任です。仮想通貨に限らずですね。
- 私の方で動作確認した内容をご紹介しますが、Gekkoがうまく動作しない可能性もあります。
- 取引所にお金を預けるため、カウンターパーティーリスクがあります。
- セキュリティ設定不備が原因で取引所のAPIキーが盗まれる可能性があります。リスクを最小限に抑えるため、以下のような点を正しく設定しましょう。
- ファイアウォールルールで不要なアクセスを防止する。
- nginxの設定を正しく行う。
- APIキーには引き出し(Withdrawal)権限を与えないようにします。
- 仮想通貨同士の取引も課税対象となるようです。自動取引を行う事で取引の回数も多くなるかもしれません。計算も大変になりますが頑張りましょう。
Webコンソールの概要
それではWebコンソールにアクセスしましょう。
https://あなたのドメイン名
htpasswdで設定したユーザー名、パスワードを入力してログインします。
ログイン後、上部のメニューに6つの項目が表示されます。
- Home
- Live Gekkos
- Backtest
- Local data
- Config
- Documentation
Live Gekkos
Strategy(取引の条件)に応じて、リアルタイムのチャートデータを元に実際に取引を行う事ができます。
また、Paper Traderではリアルタイムのチャートデータを元に取引のシミュレーションができます。
Backtest
過去のチャートから、自分のStrategy通りに取引を行った場合にどのくらいの損益となっていたかシミュレーションができます。
Local data
過去のチャートデータをインポートする事ができます。
過去の相場データのインポート
実際に取引する前に、Backtestを行いましょう。まずはLocal dataから過去の相場データをインポートします。
スクロールダウンし、Go the the importer!をクリックします。
Exchange(取引所)、Currency(支払う仮想通貨)、Asset(購入する仮想通貨)、From及びTo(インポートする期間)を選択します。
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分くらいで完了します。
おや、途中でインポートが止まってしまいました…。データをインポートしようとすると、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をクリックします。
取り込んだデータが表示されるので、ラジオボタンを選択します。
(私は1年以上のデータを取り込みました。もし特定の期間だけをシミュレーションしたい場合、Adjust rangeをクリックします)
Strategy(売買を行う条件)を設定します。ここでは、とりあえず全部デフォルトのままにしておきます。
画面を下にスクロールし、Backtestをクリックします。
少し待つとシミュレーションの結果が表示されます。チャートの上に多数の点が表示されていますが、緑の点が買った時、赤い点が売った時の意味です。
黙ってホールドしとけば9倍以上になるはずなのに、なんと大損ぶっこいてますね…。-99%なので素寒貧です。
チャートの下にスクロールすると、取引の詳細もこのように表示されます。
では、以下のページを参考にしてみましょう。
Best trading method [POLL] · Issue #610 · askmike/gekko · GitHub
StrategyはCCI、他のパラメーターは以下のスクリーンショットを参考に設定し、Backtestをクリックします。
354%の利益が出ました。大分マシになりましたね。
とはいえ、放っておけば9倍になっているのにこれでは自動取引はまだまだですね。
Strategyの作成
私も色々と試しているのですが、うまい具合のStrategyがまだ出来ていません。次の記事を書くのは、それっぽいのが出来てからにします。
むしろいいのができた方は私に教えて下さい。
Best trading method [POLL] · Issue #610 · askmike/gekko · GitHub
テクニカル分析の参考リンク
テクニカル分析についての解説があります。私も勉強中です。
第1回 数多くあるテクニカル指標を体系的に解説|テクニカル分析ABC |ガイド・投資講座 |セミナー・マーケット情報|株のことならネット証券会社【カブドットコム】
小次郎講師直伝「チャートの極意」|AVATRADE|MT4|CFD|自動売買|
ステップアップガイド ~テクニカル分析などの解説~|岡三ネットトレーダーシリーズ|岡三ネットトレーダー(OKASAN NET TRADER):岡三オンライン証券トレーディングツール
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その六 Gekkoのインストール
おれぁおせっかい焼きの子熊のゾルバ!皆さんの仮想通貨取引を手伝うぜ!
今日でようやくGekkoのインストールが完了します。もう少しお付き合い下さい。
前回の記事はこちら
- node(nodejs)と関連パッケージのインストール
- Gekkoのインストール
- Gekkoの動作確認
- うまく動作しない時は
- このサイトにアクセスできません hogehoge.gaのサーバーのDNSアドレスが見つかりませんでした。 DNS_PROBE_FINISHED_NXDOMAIN
- このサイトにアクセスできません hogehoge.gaからの応答時間が長すぎます。 ERR_CONNECTION_TIMED_OUT
- このサイトにアクセスできません hogehoge.gaで接続が拒否されました ERR_CONNECTION_REFUSED
- このページは動作していません hogehoge.gaからデータが送信されませんでした。
- 401 Authorization Required
- 502 Bad Gateway
- Disconnected
- 参考サイト
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コマンドで設定したユーザー名、パスワードを入力します。
Gekkoが正しく動いていれば、以下の画面が表示されます。
おめでとうございます!
慣れていない人は全体的に少し難しかったかもしれません。ご不明な点、うまくいかない点があればお気軽にコメントを頂ければと思います。
うまく動作しない時は
Google Chromeでアクセスすると、このようなエラーが表示されます。
このサイトにアクセスできません hogehoge.gaのサーバーのDNSアドレスが見つかりませんでした。 DNS_PROBE_FINISHED_NXDOMAIN
以下の点を確認します。
- FreenomのChange Nameserversで、正しくMyDNSのDNSサーバーを設定しているか
- MyDNSに正しくドメインを入力しているか
- crontabに正しくMyDNSサーバーへのIPアドレス通知を設定しているか
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
以下の点を確認します。
- VMインスタンスが起動しているか
- ファイアウォールルールのdefault-allow-httpsであなたのIPアドレスが許可されているか
このサイトにアクセスできません hogehoge.gaで接続が拒否されました ERR_CONNECTION_REFUSED
nginxが起動しているか確認します。
起動していない場合、設定ファイル(/etc/nginx/sites-available/default)が正しいか確認し、systemctl start nginxで起動します。
もしOS起動時に自動的に起動しない場合、systemctl enable nginxで自動起動を有効にします。
このページは動作していません hogehoge.gaからデータが送信されませんでした。
HTTPでアクセスしていませんか?URLに「https://」を指定してアクセスしている事を確認します。
(セキュリティ上不要なアクセスを防ぐため、nginxでLet's Encrypt以外からのHTTPアクセスはコネクションを切断(RSTを応答)するように設定しています。)
401 Authorization Required
nginxのユーザー認証に失敗しています。パスワードを忘れた時は、以下のファイルを削除します。
rm -f /etc/nginx/.htpasswd
改めて認証設定を作成します。
htpasswd -bc /etc/nginx/.htpasswd USERNAME PASSWORD
nginxに設定を読み込ませます。
systemctl reload nginx
Disconnected
Gekkoの設定が間違っているかもしれません。
改めて本記事で設定したUIconfig.jsが正しいか確認します。
参考サイト
Ubuntuに最新のNode.jsを難なくインストールする - Qiita
centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する - Qiita
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その五 Google Cloud Platformでのサーバー構築の続き
俺の名を言ってみろ!!
子熊のゾルバです。
前回に引き続き、Google Cloud Platformでサーバー構築を行っていきます。
前回の記事はこちら
- Google Cloud SDKのインストール
- Google Cloud SDKからVMインスタンスへのSSH接続
- パッケージのインストール
- nginxのセットアップ
- Let's Encryptからの証明書取得
- crontabの設定
- fail2banで不要なアクセスを遮断
- トラブルシューティング
- 参考サイト
Google Cloud SDKのインストール
Google Cloud Platformの管理や、VMインスタンスへのSSHアクセスにはGoogle Cloud SDKが必要となります。ここでは、Windowsへのインストール方法について説明します。
こちらのリンクからGoogle Cloud SDKのインストーラーをダウンロードします。
Windows 用のクイックスタート | Cloud SDK のドキュメント | Google Cloud Platform
インストーラーを実行するとインストールウィザードが開始します。Nextをクリックします。
I Agreeをクリックします。
All Usersを選択し、Nextをクリックします。ユーザーアカウント制御のメッセージが表示されるので、はいを選択します。
Nextをクリックします。
Installをクリックします。
緑のバーが右まで到達したらNextをクリックします。
Finishをクリックします。
Google Cloud SDK Shellが起動し、'gcloud init'コマンドが自動的に実行されます。Yを入力しEnterキーを押すと、自動的にブラウザが起動します。
ブラウザでGoogleアカウントへのログインを行います。メールアドレスを入力します。
パスワードを入力します。
許可をクリックします。
以下の画面が表示されたら認証が完了です。ターミナルに戻りましょう。
既に作成済みのプロジェクトに接続するので、1を入力してEnterを押します。
Yを入力してEnterを押します。
デフォルトのゾーンを設定します。VMインスタンスを作成したゾーンの番号を入力し、Enterを押します。(ゾーンを忘れた人は、Google Cloud Platformの管理画面に戻り、Compute Engine > VMインスタンスから、ゾーンを確認します)
特にエラーが無くプロンプトに戻れば、Google Cloud SDKのセットアップは完了です。
Google Cloud SDKからVMインスタンスへのSSH接続
Google Cloud Platformの管理画面から、Compute Engine > VMインスタンスに移動します。プルダウンからgcloudコマンドを表示をクリックします。
コマンドラインをメモします。
Google Cloud SDK Shellに、先程メモしたコマンドを貼り付け、Enterを押します。
例)
gcloud compute --project "moonlit-dynamo-XXXXXX" ssh --zone "us-central1-c" "VMインスタンス名"
初回アクセス時にはSSH認証鍵の生成が行われます、Yをを入力してEnterを押します。
puttyが起動してSSHでのアクセスができるようになります。
もしアクセス出来ない場合、ファイアウォール設定を見直し、現在の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をクリックします。
自動では再接続してくれないので、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
ペースト後カーソル行の左側が$記号に変化し、貼り付けに失敗したように見えますが、カーソルキーの左を押すとちゃんと表示されるはずです。
*/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割位は終了しているので、もう少しお付き合いください。。
トラブルシューティング
もし証明書の取得に失敗する場合、以下のような点を確認します。
- 名前解決ができるか
- nginxが起動しているか
- ファイアウォールの設定が正しいか
①名前解決ができるか
"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 on a server - Gekko
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
*1:ファイアウォールルールで許可する接続元IPアドレスを自宅のみに設定しているはずなので、ブラウザウィンドウで開くのオプションは使用できません。
*2:gcloud initでデフォルトのプロジェクトやゾーンの設定が完了しているので、「gcloud compute ssh "VMインスタンス名"」だけでもアクセスができます。
*3:Linuxへのログインユーザーが接続方法により異なります。ブラウザからのSSHアクセスの場合にはGoogleアカウント(@より前の部分)、WindowsのGoogle Cloud SDKの場合Windowsでログイン中のユーザー名となります。
*4:最初にHTTPSの設定を入れなかったのは、まだHTTPS用の証明書がなく、nginxを起動しようとしてもエラーで起動しなくなるためです。
*5:上の行は、10分毎にMyDNSにIPアドレスの通知を行う設定です。下の行は、毎日20時48分(UTC)に証明書が必要か確認し、必要であれば更新を行います。それぞれ最後の実行結果は/var/log/ディレクトリの下にログを保存するようにしています。
【号外】ジンバブエでBitcoinが7,200$に高騰 実際に取引してみました
ウポポ族の戦士子熊のゾルバです。
ジンバブエでビットコインが高騰しているようなので、実際に取引してみました。
早速ジンバブエの取引所BitcoinFundiで口座を開設します。
Sign Upしてメールアドレスを登録すればすぐに口座が作れます。SMS認証も他の取引所と一緒ですね。
ただ、二段階認証は最初に表示された二次元バーコードがGoogle Authenticatorで読み込めなかったので、別のコードを表示させてようやく読み込めました。(すいません、スクリーンショット撮り忘れました)
それではBTC Walletに入金します。
入金も他の取引所と変わりません。20分くらいで入金が完了しました。
板を見ると…
現在BTCが5,700ドルなので、それほどの高騰でも無いようです。それに板がすごく薄いので、全然取引が成立しません…。
また、なぜかチャートがありません。これはジンバブエ仕様なのかな?
一応ちょっとBTCを売ってみたので、131USD口座に入っています。追加で0.5BTCを6,300ドルの指値で売ろうと頑張っています。
取引画面の左上にMarketとありますが、取引に使えるフィアット(法定通貨)はUSDとZAR(南アフリカランド)となります。
もしこれでUSDT等のフィアットにペッグする(法定通貨と同等の価値を持つように調整された)仮想通貨が取引に使えれば、
- どこかの取引所でBTCを購入
- BitcoinFundiにBTCを送る
- BitcoinFundiでBTCを売ってUSDTを購入
- USDTをBittrexなどの取引所に送る
- BittrexでUSDTを売ってBTCを買う
- BTCをBitcoinFundiに送る
という無限ループが可能でしたが、それは叶わないようです。それができたら既に沢山の人がやっているでしょうしね。
なお、USDの引き出しは、ジンバブエの銀行に口座を持っていないとできないようです。
ですので、資産を引き出すのは以下の作戦しかありません。
- BitcoinFundiでBTCを売ってUSDに換える
- 他の取引所と同じくらいの相場になるまでしばらく待つ
- BitcoinFundiでUSDをBTCに換える
- 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です。
現在も価格が不安定でスプレッドが大きいので、同様の手法で少しは利益が出るかもしれません。
ただ、手間がそれなりにかかる、価格が読めない、取引量が小さく約定しにくいというリスクがあるので、あまりおすすめできる方法ではありません。
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その四 Google Cloud Platformでのサーバー構築
わしが男塾塾長子熊のゾルバである!
前回の記事はこちら
今回からようやく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;
Google Cloud Platformへの登録
それではさっそくこちらから登録しましょう。
GCP の無料階層 - 無料の長期トライアル、いつまでも無料 | Google Cloud Platform
無料トライアルをクリックします。
お持ちのGoogleアカウントでログインします。
パスワードを入力します。
利用規約の同意にはいを選択し、同意して続行をクリックします。
住所、名前、電話番号、クレジットカードを入力し、無料トライアルを開始をクリックします。*3
自動的にプロジェクトが作成されるので、数分待ちましょう。
OKをクリックし、無料トライアルを開始します。
VMインスタンスの作成
画面左のメニューからCompute Engineを選択し、VMインスタンスをクリックします。
上部の準備していますのメッセージが消えるまで、少しだけ待ちましょう。
作成をクリックします。
以下の通り入力します。
- 名前: 好きな名前を入力します。取得したドメイン名と同じだとわかりやすいです。
- ゾーン: 無料枠対象のus-eastX-X, us-centralX-X, us-westX-Xから好きなものを選択します。
- マシンタイプ: 無料枠対象のmicroを選択します。
- ブートディスク: 変更をクリックします。
Ubuntu 16.04 LTSを選択します。サイズは無料枠の最大である30GBにします。最後に選択ボタンをクリックします。
HTTPトラフィックを許可する、HTTPSトラフィックを許可するにチェックを入れます。管理、ディスク、ネットワーク、SSH認証鍵をクリックします。
起動スクリプトに、以下の文字列をコピー&ペーストします。
#! /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について、詳しくは前回の記事を見て下さい。
下までスクロールし、作成をクリックします。
少し待つとVMが起動します。
ファイアウォールルールの設定
左上のメニュー(横三本線)から、VPCネットワーク、ファイアウォールルールを選択します。
デフォルトでは以下のように、0.0.0.0/0 (インターネット上のすべてのIPアドレス)からのアクセスが許可されています。
インターネット上のサーバーは常に攻撃を受けているため、できるだけ不要なIPアドレスからのアクセスを遮断します。ここでは設定を簡単にするため、自宅のIPアドレスからのみアクセスを許可します。ただし、後の記事で紹介しますが、Let's Encryptによる証明書の更新を行うため、HTTPについては0.0.0.0/0からのアクセスを許可したままとします。
まず、自宅のIPアドレスを確認しましょう。ブラウザから以下のリンクにアクセスします。
赤枠で囲った部分に自宅のIPアドレスが表示されます。
ファイアウォールルール設定画面に戻り、default-allow-httpsをクリックします。
編集をクリックします。
ソースIPの範囲に0.0.0.0/0が入っているので、☓ボタンを押して削除します。先程確認した自宅のIPアドレスの最後に"/32"をつけて、Enterを押します。(この例では111.111.111.111/32)。最後に保存をクリックします。
設定が保存されました。左上の矢印でファイアウォールルールの一覧に戻ります。
同様に、default-allow-icmp, default-allow-rdp, default-allow-sshも変更します。default-allow-internalは変更せずにおきましょう。最終的に、default-allow-httpとdefault-allow-internal以外が自宅のIPアドレスになっていればOKです。
なお、自宅のIPアドレスはルーターの再起動や、プロバイダのメンテナンス等で変更される場合があります。VMインスタンスにアクセスできないなと思ったら、ちょっと手間ですが自宅のIPアドレスの確認と、ファイアウォールルールの設定し直しを行って下さい。
以上でVMの作成までは完了です。お疲れ様でした!
少し長くなりましたので、今回の記事はここで切らせて頂きます。
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
*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設定
わしゃ子熊のゾルバじゃけえのう。麦じゃ、踏まれて踏まれて強くまっすぐにのびて実をつける麦になるんじゃ。
前回の記事はこちら
今回はMyDNSでのダイナミックDNS設定を行います。
ダイナミックDNSとは
Google Cloud Platformなどのクラウドサービスでは、サーバーを再起動するたびにIPアドレスが変わってしまいます。*1常に同じ名前(この例ではhogehoge.ga)でサーバーにアクセスできるようにするため、ダイナミックDNSを利用します。
ざっくりですが、このような仕組みとなります。
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をクリックします。
画面をスクロールし、必要な情報を入力した後にCHECKをクリックします。*2
入力した情報が正しい事を確認し、OKをクリックします。
登録が完了するとすぐにメールが届きます。MasterID、Passwordを確認します。*3
画面左のMaster ID、Passwordを入力し、LOG INをクリックします。
画面左のDOMAIN INFOをクリックします。
画面をスクロールし、ドメイン情報を入力します。Domain欄には前回の記事でFreenomで取得したドメイン名、Hostname欄には"*"(アスタリスク)を入力します。他は空欄のままでOKです。最後にCHECKボタンをクリックします。
入力した情報が正しい事を確認し、OKをクリックします。
「ドメイン情報を更新しました」というメッセージが表示されればOKです。
以上でMyDNSの設定は完了です。お疲れ様でした!
次回からはようやくGoogle Cloud PlatformでGekko用のサーバー構築に入っていきます。サーバーからMyDNSのWebサーバーにアカウント、パスワードを送ることで、MyDNSに設定したドメイン名がサーバーのIPアドレスと紐づくようになります。
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その二 Freenomでのドメインの取得
オッス、オラ子熊のゾルバ!今日もよろしくな!
前回の記事はこちら
ドメインについて
今回は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
ドメイン名として使用したい任意の英数字を入力し、「利用可能状況をチェックします」をクリックします。好きな子の名前を入力してもよいですが、多分後で恥ずかしくなるのでやめておいたほうがよいでしょう。
「利用不可」と表示されているドメインは既に他の誰かが取得済みです。「今すぐ入手」と表示されているものからどれかをクリックします。(この例では、hogehoge.gaを選びます。)
右上に「チェックアウト」と表示されるので、そこをクリックします。
12ヶ月まで無料なので、Periodには12 Monthsを選び、Continueをクリックします。*2
メンバー登録を行います。左下のEnter Your Email Addressに自分のメールアドレスを登録し、Verify My Email Addressをクリックします。GoogleやFacebookのアカウントでログインする事もできます。
届いたメールのリンクをクリックします。
必要な情報を入力します(Company Nameは必須ではありません)。パスワードは使い回しを避け、忘れないようにしましょう!画面下部のI have read and agree to the Terms & Conditionsにチェックを入れ、Complete Orderをクリックします。*3
メンバー登録完了です。Click here to go to your Client Areaをクリックし、管理画面に移動します。
登録したメールアドレス、パスワードを入力し、Loginをクリックします。
画面上のメニューからServicesを選択し、My Domainsをクリックします。
歯車マークのついた、Manage Domainをクリックします。
Management Toolsを選択し、Nameserversをクリックします。
Name Server 1, 2, 3に以下の値を入力し、Change Nameserversをクリックします。*4
- ns0.mydns.jp
- ns1.mydns.jp
- ns2.mydns.jp
以上でFreenomの設定は終わりです。お疲れ様でした!
次回はMyDNSを使用してダイナミックDNSの設定を行います。
____________________
以下、アフィリエイトです。もしこの記事がお役に立ちましたら、こちらから取引所口座を開設頂けると励みになります。(私のお小遣いになります)
日本では以下の3つが主要な仮想通貨取引所となります。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
仮想通貨の取引を全部無料で自動化する! (Gekko + Google Cloud Platform + Freenom + MyDNS + Let's Encrypt) その一 自動取引の概要説明
はじめまして、子熊のゾルバです。
最近仮想通貨の取引を始めました。まだまだ初心者ではありますが、読者の皆様に有益な情報を届けられるように頑張ります。
仮想通貨とは何かだとか、将来性はあるのかとか、今後値上がりするの?という説明は先達が残してくれた情報があるのでここでは説明しません。将来性があると信じているので私も貯金を突っ込んでいます笑
このブログの最初のテーマとしては、仮想通貨の相場データを元に取引を自動化するためのツールをセットアップする手順を説明していきます。
取引自動化のメリット
今まで仮想通貨や株等の取引を行った経験がある方は、こんな経験があるのではないでしょうか。
- 仕事や学業など忙しく、取引所のチャートに張り付いてなどいられない
- 値上がり/値下がりが気になって仕事に集中できない
- 利益確定、損切りの判断が遅れ、含み損を抱えてしまった
- チャートを見ていない間に相場が大きく変動してしまった
取引を自動化する事で、事前に決めたルールに従って機械的に取引を行ってくれるので、このようなお悩みをお持ちの方の手助けになれれば幸いです。
取引自動化までの流れ
今後書く予定の記事です。Gekkoというツールを動かすのが目標ですが、その下準備が必要です。
- 自動取引の概要説明 (本記事)
- Freenomでのドメインの取得
- MyDNSでのダイナミックDNS設定
- Google Cloud Platformでのサーバー構築 (Ubuntu + nginx + Node.js)
- Let's Encryptでのサーバー証明書取得
- Gekkoのインストール
- Gekkoを使った自動取引例の紹介
使用するサービスは全部無料です!私のようなワーキングプアにも嬉しいですね。
できるだけ優しく書いていくつもりですが、ある程度のITの知識と英語力が必要です。もしわからない事があれば、お気軽にコメント欄で質問をお願いします。
Linuxのセットアップに慣れていないと少々骨が折れる作業だと思いますが、それに値する大きな見返りがあります!(多分)
取引自動化の概要
簡単に仮想通貨の取引の流れをご説明します。まず前提条件として、自動取引云々の前に取引所での口座開設と、ビットコインの購入を行う必要があります。
という流れとなります。
まだ仮想通貨取引所の口座を持っていない人は、何はともあれ口座を開設し、少額でよいのでビットコインを購入しましょう。(多くの資金を突っ込むのは、相場をチェックして値段が安くなった時に)
USDTについて、詳しくは以下の記事を参考にして下さい。
前準備(取引所口座の開設)
代表的な取引所をご紹介しますので、全部登録して使い勝手を比較してみる事をおすすめします。
コインチェック
初心者でも簡単に仮想通貨が購入できます。また、ビットコイン以外の仮想通貨(オルトコイン)も12種取り扱っているのも高ポイントです。ただし、購入手数料が高いのが難点。
bitFlyer
日本で最もビットコインの取引量が多い(=売買が成立しやすい)取引所です。多額の取引をする場合におすすめ。 無難ですが、特に突出した特徴が無いのが難点と言えば難点。
Zaif
私がメインで使っている取引所。手数料がマイナスなので、取引すればするほど得をします。 XEMを購入するならここ。サーバーが貧弱なのかたまに応答しなくなるのが難点。
Poloniex
海外取引所は、Poloniexに口座を開設しましょう。*3
口座開設後は、まず二段階認証を有効にしましょう。コイン盗難のリスクを大幅に減らすことができます。
Gekkoとは
Gekkoとは、オープンソースのビットコイン自動取引ツール(ボット)です。
Gekko - Open source bitcoin trading bot platform
各種テクニカル分析の指標を元に、APIを通して自動で取引所に売買の命令を出す事ができます。最初から定義されている以下の指標を使う事もできますし、自分でカスタマイズする事も可能です。
-
DEMA
-
PPO
-
RSI
-
StochRSI
-
TSI
Gekkoのセットアップ後はWebUIから売買の条件(Strategy)を作成できます。
また、過去の値動きデータをインポートし、自分が定義した売買ルールでどの程度利益が出るかシミュレーションする事もできます(Backtesting)。
この例では相場が良かったこともあり、205.9%の利益が出ています。(よく見ると高値づかみして損をしているところもあるので、まだチューニングの余地がありますね)
自分のStrategyを決めたら、後はそれに従い実際に取引を行ってくれます。
長くなりましたので、今回の記事はここで一旦切りたいと思います。
最後に一言、投資は自己責任で!
*1:仮想通貨にもビットコイン、イーサリアム、リップルなどありますが、最も取引高が多い(売買が成立しやすい)という理由で、ここではビットコインを前提にお話します。
*2:USDTとは、常に米ドルと同じ価値を持つようにコントロールされた仮想通貨です。日本円と仮想通貨の交換で利益が出ると課税対象となるため、自動取引では仮想通貨同士での売買を想定しています。ただし、仮想通貨間の売買であっても課税対象とみなす場合があるようで、2017年9月時点では税務署や専門家の見解も割れている状況です。
2017/10/6追記
仮想通貨同士(BTCとUSDT)の売買も課税対象となるようです。手間はかかりますがちゃんと納めましょう。
*3:主要な海外取引所にはPoloniex、Bitfinex、Bittrexなどがありますが、Gekkoでの使い勝手がよいのはPoloniexなので、ここではPoloniexを取り上げます。一番先進的で使い勝手が良いのはBittrex。
*4:他にも取引ボットは色々な種類があり、Haasbotというのが一番人気の様子です。ただし3ヶ月のライセンスが0.06BTCなので、1ヶ月あたり約1万円かかります。Gekkoは無料です。