テクノロジーであそぼ!

プログラミング(Python)や投資、仮想通貨についての情報サイト。

「テクノロジーであそぼ!」は、はてなブログからWPに移管しました!

はてなブログからWordPressに移管しました!

いつも見ていただきありがとうございます。
なんのこっちゃと思う方もいらっしゃると思いますが、この度はてなブログからWordPressに移管しましたことをご報告いたします。

現在少し調子が悪く、表示できないページがあるかもしれませんが、一度、ホームに戻ってから表示することで再び表示することが可能です。

また、これからはブログのカスタマイズ性がぐんと上がったため、より快適に本サイト「テクあそ」をご覧いただけるよう精進して参ります。

これからも沢山の方へ、そして社会へ貢献ができたら幸いです。


テクノロジーであそぼ!
今後ともよろしくお願いいたします!


※現在閲覧していただいている、ユーザー様方には今まで通りお使いいただけますので、安心してご利用下さいませ。

【Python x Excel】 めんどくさいExcel作業を自動化しよう!複数データを変更編

f:id:kichie_com:20180404162240j:plain 前回【リンク】の続きです。

実行環境

Python 3.6.3
Mac OS 10.13.3 pipインストール済

使用するモジュール

openpyxl

テストデータ

これからxlsxデータを扱うので以下のデータを元に説明していきます。 15ファイルほどあります。 データダウンロード: https://drive.google.com/open?id=1Il4XpMBwLKHsQbK4360cgC6UXidb6TeK データ内容:f:id:kichie_com:20180404152226p:plain

基本操作は以前の記事を参照して下さい。

複数のデータを読み込む

以前一つのファイルを読み込むことができたので今回は複数のファイルを読み込んでいきましょう。

ファイル構成は以下の通りです。 |
|- main.py
|_ data - data.xlsxが15ファイル

アルゴリズム

複数のファイルを読み込む場合、以前の読み込みから書き込みまでの動作を1ファイルごとに複数回行います。 データをダウンロードした方は15ファイルあるので、15回行うことになります。 ではまず、15ファイルがそれぞれに対して、処理を行うので、それぞれのファイルがどこにあるのかをプログラムで探していきましょう。

ファイルを探すプログラム

以下のプログラムは難易度が少し高いので、そのままコピペしてしまって構いません。

#ファイルを見つけるために必要なモジュール
import os

#変数の初期化
filePath = []

folder = "data"
#folder下のファイルとフォルダを検索
for root, dirs, files in os.walk(folder):
    for fname in files:
#        ファイルのパスを作成
        fnamePath = os.path.join(root, fname)
        #ファイル名に.xlsxという名前があったら
        if fnamePath.find(".xlsx") != -1:
#            filePathに追加
            print(".xlsxファイルがありました!場所: "+fnamePath)
            filePath.append(fnamePath)

if filePath == []:
    print("データがありません!")

print(filePath)
# 出力結果 -> 
['data/data.xlsx', 'data/data10.xlsx', 'data/data11.xlsx', 'data/data12.xlsx', 'data/data13.xlsx', 'data/data14.xlsx', 'data/data15.xlsx', 'data/data2.xlsx', 'data/data3.xlsx', 'data/data4.xlsx', 'data/data5.xlsx', 'data/data6.xlsx', 'data/data7.xlsx', 'data/data8.xlsx', 'data/data9.xlsx']

ファイルを探すことができました。

エラーが出たら確認

ここはエラーがが出やすいのでもしエラーが出てしまったら、ファイル構造がちゃんと以下の様になっているかを確認しましょう。

|
|- main.py
|_ data - data.xlsxが15ファイル

ではこのfilePathに保存されたデータファイルの居場所を使って探していきましょう。 ちなみにファイルの居場所のことを専門用語では「パス(path)」と言います。

filePathに保存されたパスを一つずつ取り出す。

filePathは配列データになっているので、これを一つづつ取り出します。

上のコードに書き足ていきましょう。

...

if filePath == []:
    print("データがありません!")

for path in filePath:
    print(path)
# 出力結果 -> 
#data/data.xlsx
#data/data2.xlsx
#data/data10.xlsx
#    ... 

これで一つづつ出力することができました。

ここまでの技術と前回の基本操作を組み合わせると大量のデータを変更することができます。

大量のデータを変更してみる

流れの確認

dataフォルダの下にあるファイルを検索してパスを保存。(今回は15個のファイル) 15ファイルそれぞれに対して、データの書き込み処理を行う。

実際のプログラム

このコードは今回のコードと、前回の記事のコードを少し変えて書いたものなので、変更した部分にコメントを入れてあります。

import openpyxl as px
import os


#変数の初期化
filePath = []
folder = "data"
#folder下のファイルとフォルダを検索
for root, dirs, files in os.walk(folder):
    for fname in files:
#        ファイルのパスを作成
        fnamePath = os.path.join(root, fname)
        #ファイル名に.xlsxという名前があったら
        if fnamePath.find(".xlsx") != -1:
#            filePathに追加
            print(".xlsxファイルがありました!場所: "+fnamePath)
            filePath.append(fnamePath)

if filePath == []:
    print("データがありません!")

#それぞれのパスを取り出してそのファイルを編集して保存
for path in filePath:
    print(path)
    wb = px.load_workbook(path)  ##ここを変更
    #1番最初のシートを読み込む
    sheetName = wb.sheetnames[0]
    print("■読み込みシート名: "+sheetName)
    sheet = wb[sheetName]
    #値を書き換えて
    sheet["B1"].value = "株式会社パイソン" ##ここを変更
    #データを保存
    wb.save(path) ##ここを変更

これで実行すると全てのファイルのB1のセルの値が書き換わっています。 f:id:kichie_com:20180404160531p:plain

以上です!

もっと知りたい

もっと知りたい方は以下のサイトが非常に参考になります! pythonのopenpyxlの使い方メモ - Qiita Python openpyxlでExcelを操作 - Qiita

【Python x Excel】 めんどくさいExcel作業を自動化しよう!基本操作編

f:id:kichie_com:20180404162258j:plain

実行環境

Python 3.6.3
Mac OS 10.13.3 pipインストール済

使用するモジュール

openpyxl

テストデータ

これからxlsxデータを扱うので以下のデータを元に説明していきます。 データダウンロード: https://drive.google.com/open?id=130Otxp9lVs5hwUqw6JrNRET107Bf7cBA データ内容: f:id:kichie_com:20180404144348p:plain

モジュールのインストール

ターミナルで以下のコードを入力して下さい

pip install openpyxl

使い方

では実際に使っていきましょう。

モジュールを使えるようにインポート

openpyxlモジュールをpxという名前で使用できるようにインポートします。

import openpyxl as px

xlsxファイルの読み込み

main.pyと同じ階層のdataフォルダの中にあるエクセルファイルを読み込みます。

import openpyxl as px
wb = px.load_workbook("data/data.xlsx")

ファイル構造は以下の様です。 | |- main.py |_ data - data.xlsx

xlsxファイルのシートネームを読み込む

import openpyxl as px
wb = px.load_workbook("data/data.xlsx")
#1番最初のシートを読み込む
sheetName = wb.sheetnames[0]
print("■読み込みシート名: "+sheetName)
# 出力結果->■読み込みシート名: Sheet1

xlsxファイルのシートネームをもとにシートを読み込む

import openpyxl as px
wb = px.load_workbook("data/data.xlsx")
#1番最初のシートを読み込む
sheetName = wb.sheetnames[0]
print("■読み込みシート名: "+sheetName)
sheet = wb[sheetName]

xlsxではこのシートを元にセルから値を持ってきたり書き込んだりします。

セルの値を読み込む

以下の画像のB1のセルの「パイソン商店」という文字列を取りたいと思います。 f:id:kichie_com:20180404144348p:plain

import openpyxl as px
wb = px.load_workbook("data/data.xlsx")
#1番最初のシートを読み込む
sheetName = wb.sheetnames[0]
print("■読み込みシート名: "+sheetName)
sheet = wb[sheetName]
cell = sheet["B1"].value
print("■店舗名: " + cell)
# 出力結果 -> ■店舗名: パイソン商店

この様にセルを読み込むことによって、値を集計したり、配置し直すことができます。

では読み込めたので、次に値を変更して保存していきましょう。

セルの値を書き込む

import openpyxl as px
wb = px.load_workbook("data/data.xlsx")
#1番最初のシートを読み込む
sheetName = wb.sheetnames[0]
print("■読み込みシート名: "+sheetName)
sheet = wb[sheetName]
#値を書き換えて
sheet["B1"].value = "パイソン薬局"
#データを保存
wb.save("data/data.xlsx")

そうするとこの様に書き変わります。 f:id:kichie_com:20180404145634p:plain

ここまでで基本操作ができる様になりました!

今回はここまでです! 次回は実際に多くのデータを書き換えてプログラムのすごさを実感しましょう!

【Bitcoin x 過去の値動き】ビットコインで見る過去との比較

f:id:kichie_com:20180114193810p:plain

ビットコインはバブルとして終わりを迎えるのか?

現在ビットコインはバブルであると言われています。
これがいる終わりを迎えるのか、はたまたバブルは崩壊しないのかそれは誰にもわかりません。
ですから、仮想通貨にお金を投入している私たちは、今後どうなるのか分析することがリスクを知る上でも良いと考えております。

インフルエンサーの多くはこのまま売ることはなくホールドをし続ける

仮想通貨に投資をしているインフルエンサーの多くはこのまま売ることはなくホールドをし続けるという意思の方が多く見受けられます。
ハードウォレットなどの仮想通貨の取り出しに時間がかかる物を利用して暴落の際に売らないようにしている人もいるくらいです。
しかし、現在は暴落するのではないかとの懸念が多く示されており、不安材料が多く見受けられます。

草コインの大量発生

草コインもカンブリア爆発のように非常に多く誕生しており、価値のないものまでも噂で価格が上がってしまうものもあります。

そこで儲かればそれは正しい答えとなるのかもしれませんが、高値づかみをした際には資産が半分、それ以下になってしまうこともかなりの確率であるでしょう。

ですからそのような事態にならないよう分析は怠るべきではないでしょう

過去の値動きから今後を予想する

以下現時点での日付に対して過去のビットコインの値動きはどのくらいの変動率であったのかを一覧でならべたグラフになります。

2013-2014

f:id:kichie_com:20180114191343p:plain

2014-2015

f:id:kichie_com:20180114191347p:plain

2015-2016

f:id:kichie_com:20180114191351p:plain

まとめ

これらのグラフをどう見るかはそれぞれの主観によりますが、自分自身で分析することは非常に重要です。

そして仮想通貨において理解を深めることそれこそがバブル崩壊が起こらないために必要なことだと考えております。

【Bitzeny×マイニング】大穴を買わずに掘って夢を見る、Bitzenyマイニング - Macユーザー向け

f:id:kichie_com:20180108191740p:plain

仮想通貨のマイニング(採掘)とは?

一定期間ごとに、取引の記録が取引台帳というところに追記されていきます。その間に、すべてを正確に検証してから追記しなければならないので、膨大な計算量が必要となります。
そこで、一部の仮想通貨(ビットコインやビットゼニーなど)では、この追記作業に有志のコンピューターリソースを借りています。余っているコンピューターの計算能力を借りることによって、膨大な計算を行い、みんなで共有する1つの大きな取引台帳に追記を行っているのです。
この追記作業の手伝いをしてくれた人に、その見返りとして採掘を手伝った仮想通貨が支払われます。

詳しくは下記bitflyerの公式ページをご覧ください。
ビットコイン(Bitcoin)を生み出す採掘(マイニング) 【bitFlyer】

shや端末(ターミナル)について何もわからない。という方は下記サイトの授業内容メモの1,2もしくは2をやるとわかるようななってくると思います。
私はこのテキストに非常に助けられました。筑波大学の新城 靖さんありがとうございます。
もし、リンクがよろしくない場合は削除いたします。
コンピュータリテラシ(2017年)

マイニングの環境

MacBook Air (13-inch, Early 2015)
1.6 GHz Intel Core i5
4 GB 1600 MHz DDR3
OS:High Sierra 10.13.2
※Xcode Command Line Tools, homebrew,gitインストール済
(左上リンゴマークのタブ→このMacについてより確認可能)

Homebrewをインストールしていない場合はこちらの指示に従ってインストールをしてください

マイニング開始までの流れ

  • ワーカー設定をするためのサイトの登録
  • ローカルPCでのマイニング設定
  • マイニングプログラムの作成

ワーカー設定をするためのサイト登録

サイトの登録方法はこのサイトがわかりやすかったです。
初心者でも簡単【BitZeny(ビットゼニー)のマイニング】をMacBookで設定 – Sales Technology Lab


私の環境ではbitzeny WalletLA poolを使用しております。

マイニング設定方法

必要モジュールのインストール

$ brew install curl jansson openssl automake autoconf

opensslのパスを通して確認

$ echo 'export PATH=/usr/local/opt/openssl/bin:$PATH' >> ~/.sh_profile #opensslコマンドのファイル位置を設定
$ source ~/.sh_profile  #設定の反映||<
$ which openssl
# -> /usr/local/opt/openssl/bin/openssl

pthreadsのインストール

$ brew tap homebrew/php
$ brew install php56-pthreads

以上でマイニングをするための設定が終了

マイニング実行コードを入手、設定

$ git clone https://github.com/bitzeny/cpuminer.git
$ cd cpuminer||<

** libcurl.m4ファイルをコピー
>|sh|
$ mkdir m4
$ cp /usr/local/Cellar/curl/7.57.0/share/aclocal/libcurl.m4 m4

設定の記述

$ echo ACLOCAL_AMFLAGS = -I m4 >> Makefile.am
$ sed -i -e "s/INCLUDES/AM_CPPFLAGS/g" Makefile.am
$ sed -i -e "s/aclocal/aclocal -I m4/g" autogen.sh
$ ./autogen.sh
$ ./nomacro.pl
$ ./configure CFLAGS="-O3 -march=native -funroll-loops -fomit-frame-pointer"

マイニングプログラムの生成

$ make

マイニングプログラムの実行

./minerd -a yescrypt -o stratum+tcp://jp.lapool.me:3014 -u [ユーザー名.ワーカー名] -p [パスワード]

結果

[2018-01-08 16:42:28] Starting Stratum on stratum+tcp://jp.lapool.me:3014
[2018-01-08 16:42:28] Binding thread 1 to cpu 1
[2018-01-08 16:42:28] Binding thread 0 to cpu 0
[2018-01-08 16:42:28] 4 miner threads started, using 'yescrypt' algorithm.
[2018-01-08 16:42:28] Binding thread 2 to cpu 2
[2018-01-08 16:42:28] Binding thread 3 to cpu 3
[2018-01-08 16:44:00] thread 0: 5302 hashes, 0.27 khash/s
[2018-01-08 16:44:00] thread 1: 6096 hashes, 0.28 khash/s
[2018-01-08 16:44:00] thread 2: 336 hashes, 0.25 khash/s
[2018-01-08 16:44:08] thread 2: 2241 hashes, 0.27 khash/s
[2018-01-08 16:44:08] accepted: 5/5 (100.00%), 1.07 khash/s (yay!!!)
[2018-01-08 16:44:26] thread 1: 7154 hashes, 0.27 khash/s
[2018-01-08 16:44:27] accepted: 6/6 (100.00%), 1.07 khash/s (yay!!!)

スレッド数の変更

今回のように低スペックノートバソコンの場合はメモリ数とCPUの具合によってCPUが本来の力を発揮できない場合があるので、
メモリの使用具合を減らすために、スレッドを3に下げることができます。(デフォルトは4)

./minerd -a yescrypt -o stratum+tcp://jp.lapool.me:3014 -t  3 -u [ユーザー名.ワーカー名] -p [パスワード] 
[2018-01-08 16:45:48] Starting Stratum on stratum+tcp://jp.lapool.me:3014
[2018-01-08 16:45:48] 3 miner threads started, using 'yescrypt' algorithm.
[2018-01-08 16:45:50] thread 1: 268 hashes, 0.37 khash/s
[2018-01-08 16:45:50] accepted: 1/1 (100.00%), 0.37 khash/s (yay!!!)
[2018-01-08 16:46:00] thread 0: 4096 hashes, 0.38 khash/s
[2018-01-08 16:46:00] thread 2: 4096 hashes, 0.38 khash/s
[2018-01-08 16:46:51] thread 1: 22310 hashes, 0.37 khash/s
[2018-01-08 16:47:01] thread 2: 22573 hashes, 0.37 khash/s
[2018-01-08 16:47:02] thread 0: 22599 hashes, 0.37 khash/s
[2018-01-08 16:47:40] thread 1: 18880 hashes, 0.38 khash/s
[2018-01-08 16:47:40] accepted: 2/2 (100.00%), 1.12 khash/s (yay!!!)
[2018-01-08 16:47:59] thread 2: 22276 hashes, 0.38 khash/s
[2018-01-08 16:48:00] thread 0: 22074 hashes, 0.38 khash/s
[2018-01-08 16:48:32] thread 2: 12466 hashes, 0.38 khash/s
[2018-01-08 16:48:32] accepted: 3/3 (100.00%), 1.15 khash/s (yay!!!)

結果

前述の結果と見くらべてみると1.07khash/s -> 1.15khash/sと採掘量が上昇しました。
また、直近1時間の採掘量が0.08818572ZNYなので日本円換算だと時給2.49円くらいになりました。(1ZNY=28.27JPY)

調査

マイニングにはノートパソコンは適さない(最悪発火の可能性もあるみたい...)
マイニングにはCPUよりGPUの方が向いている
採掘した仮想通貨が最終的に爆上がりすれば一夜にして大金を手にする可能性もある
中国の方が電気代は1/3
マイニングガチ勢のスレがある。

参考

macOSでもBitZenyを掘りたい - Qiita
BitZenyのMinerをMac OS Xでビルドして採掘する - Qiita



これから他のコインも試してみようと思います。



投げ銭していただけると読んでいただいているあなた方へ、より質の良い情報をお届けする励みになります。
BitZeny:ZuhFomHt7scWhACJwEWyChrWmwvd4vdr5F

Python × ZaifAPI 取引時間をハックするプログラム【ボリンジャーバンド編】

f:id:kichie_com:20171222204129p:plain

改めてZaifとは?

Zaifとは国内でモナーコインを取り扱っている取引所として定評があり、ビットコイン積立など様々な種類のサービスを利用できる取引所です。さらに、仮想通貨交換業者 登録番号00002号であり大阪に本拠地が置いてあるテックビューロ株式会社が運営する仮想通貨取引所です。
何と言っても魅力はビットコインの取引手数料がマイナスである事!
取引するだけでお金がもらえる、それだけたくさん使ってもらうことに重点を置いている取引所です。

新規登録に書類審査に2週間かかるらしい

私が口座を開設した時はまだ全然流知られていなかったので、1週間ぐらいで口座が開設できたのですが、今は口座開設をしたい人が急増しており、2週間以上時間を要しているようです。

こんな記事や
Zaif(ザイフ)の本人確認が遅い・終わらない・混雑してる・届かない・こない 本人確認書類はいつ来るの? 対処方法は? | 東大生だって金が欲しい!!

こんなツイートも

少しでも取引を考えている人はプログラムを実装するのに2週間ぐらいかかると予想されるので、今登録しておくとちょうどプログラムを書き終わるのと同時に開設ができそうですね!

投資家がよく使っているボリンジャーバンドとは?

前置きはさておき、いい取引をするプログラムを書くために必要な知識をインプットしていきます。
ボリンジャーバンドとは取引をする時に売られ過ぎているか、買われ過ぎているかを判断ができる指標です。
詳しくは下記のサイトを参照していただくと非常にわかりやすいですが、簡単に言うと統計的に約95%でこのボリンジャーバンドの範囲内におさまるので、この下限で買えば反発して底値で買って高値で売れるよね?って言うものです。
株の売買サインを簡単に見極めるボリンジャーバンドの使い方

今の移動平均線の価格に一定期間の標準偏差を足した額がボリンジャーバンドの値になります。

標準偏差の計算式

標準偏差=√(期間*価格の2乗合計ー価格の合計の2乗)/√(期間*(期間-1))

例えば上の図、ローソク足の中心あたりに赤い線がありますよね?それが移動平均線、そして上下に青い線があります。その値が移動平均線に上の式の標準偏差を足したボリンジャーバンドとなります。

ボリンジャーバンド具体例

f:id:kichie_com:20171218100641p:plain
上記画像がボリンジャーバンドを反映させたチャートです。
30分に1回ぐらいは加減にタッチしており、チャートの真ん中の赤い線の移動平均線に戻っていることがわかります。
この図からはこの差、1万〜3万円幅を取れていることがわかります。
しかし、図の8時15分あたりでは、219万円あたりでタッチしているにも関わらず218万円まで落ちています。この辺りの急落には対応できないのがボリンジャーバンドのデメリットなので損切りしてあげることが重要だと考えております。
このチャートの場合その後に移動平均線まで戻っているので大丈夫ですが。。。

もしこのまま100万円台まで落ちてしまっては、大損になりかねないので、損切りするアルゴリズムもしっかり考える必要があります。

取引アルゴリズム

Zaifの自動トレードプログラム書いたら10%利益出たからそのプログラムを載せてみる
こちらのアルゴリズムにボリンジャーバンドを付加しました。

①現在の最終取引額を取得(この金額が判断の基準となる)
②データが20個溜まったらボリンジャーバンドのデータを計算し始める
③Bitcoinを持っていて(0.001以上)かつ移動平均迄上がった場合、売る!(そして、前回取引額を更新する)
④Bitcoinを持っていない(0.001以下)かつボリンジャーバンドまで下がったら、買う!(そして、前回取引額を更新する)
⑤取引が処理されない場合、1分待って、待っても処理されない場合、キャンセルする(そして、前回取引額を元に戻す)

コード

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import time
import pprint
from datetime import datetime
from numpy import sqrt
from zaifapi import ZaifPublicApi
from zaifapi import ZaifTradeApi
from decimal import (Decimal)

zaif_keys_json = open('config/zaifkeys.json', 'r')
zaif_keys = json.load(zaif_keys_json)

KEY = zaif_keys["key"]
SECRET = zaif_keys["secret"]

last_price = []


def moving_ave(last_price,period):
    sum_price = 0
    for price in last_price[-period:]:
        sum_price += price
    return sum_price/period

def st_div(price,period):
    sum_price = 0
    sum_price_2 = 0
    for price in last_price[-period:]:
        sum_price += price
        sum_price_2 += price**2
    return sqrt((period*sum_price_2-sum_price**2)/period*(period-1))


def cancel_flug(trade_result):
    global order_id,cancel_flug
    if(trade_result["order_id"] != 0):
        order_id=trade_result["order_id"]
        cancel_flug=1
    else:
        print("■ 取引が完了しました。")   
    
if __name__=='__main__':
    # get environ ver
    zaif_public = ZaifPublicApi()
    zaif_trade = ZaifTradeApi(KEY,SECRET)
    
    CANCEL_FLUG = False
    
    period = 20
    
    low_borin = 0
    m_ave       = 99999999
    high_borin = 99999999
    
    last_trade_price = int(zaif_public.last_price('btc_jpy')["last_price"])
    
    
    while(True):
        start_time = time.time()
        print("■ 現在の情報です")
        try:
            funds_btc = Decimal(zaif_trade.get_info2()['funds']['btc']).quantize(Decimal('0.0001'))
            funds_jpy = zaif_trade.get_info2()['funds']['jpy']
            last_price.append(int(zaif_public.last_price('btc_jpy')["last_price"]))

        except:
            print("エラー:Cant get data")
            continue
        
        finally:
            print("市場取引価格:"+str(last_price[-1]))
            print("btc資産:"+str(funds_btc))
            print("jpy資産:"+str(funds_jpy))
            print("最終取引価格:"+str(last_trade_price))
            
        
        if len(last_price) >= 20:
            moving_ave(last_price,20)
            st_div(last_price,20)
            
        if len(last_price) >= period:
            m_ave = moving_ave(last_price,period)
            print(m_ave)
            sigma = st_div(m_ave,period)
            high_borin = m_ave+sigma*2
            low_borin = m_ave-sigma*2
            print(high_borin,low_borin)
            
        
        
        
        #btcを持っていてm_ave以上なら利確
        if(funds_btc >= 0.001 and m_ave < last_trade_price):
            #売却
            ask_amount = funds_btc
            try:
                trade_result = zaif_trade.trade(currency_pair="btc_jpy", action="ask", price=last_price[-1], amount=ask_amount)
                last_trade_price_pre = last_trade_price
                last_trade_price = last_price[-1]
                
                print('■ Bitcoinの売却申請を行いました。')
                pprint.pprint(trade_result)
                print("売却注文価格:"+str(last_price[-1]))
                print("売却注文量 :"+str(ask_amount))
            except:
                print("エラー:cant trade[ask_up]")
                
            cancel_flug(trade_result)
            
        #btcを持っていてlow_borin-10000以下なら損切り
        elif(funds_btc >= 0.001 and low_borin-10000 > last_trade_price):
            try:
                #売却
                ask_amount = funds_btc
                trade_result = zaif_trade.trade(currency_pair="btc_jpy", action="ask", price=last_price[-1], amount=ask_amount)
                last_trade_price_pre = last_trade_price
                last_trade_price = last_price[-1]
                print('■ Bitcoinの売却申請を行いました。')
                pprint.pprint(trade_result)
                print("売却注文価格:"+str(last_price[-1]))
                print("売却注文量 :"+str(ask_amount))
            except:
                print("エラー:cant trade[ask]")
            
            cancel_flug(trade_result)
        #btcを資産の1/3以下持っていないでlastpriceより値下がりしたら買い
        elif(funds_btc < 0.001 and low_borin > last_price[-1]):
            try:
                bid_amount = (Decimal(funds_jpy)/last_price[-1]).quantize(Decimal('0.0001'))
                trade_result = zaif_trade.trade(currency_pair="btc_jpy", action="bid", price=last_price[-1], amount=bid_amount)
                last_trade_price_pre = last_trade_price
                last_trade_price = last_price[-1]
                not_able_bid_count = 0
                print('■ Bitcoinの購入申請を行いました')
                pprint.pprint(trade_result)
                print("購入注文価格:"+str(last_price[-1]))
                print("購入注文量 :"+str(bid_amount))
            except:
                print("エラー:cant trade[bid]")
                
            cancel_flug(trade_result)
            
            if CANCEL_FLUG:
                trade_info = zaif_trade.get_info2()
                if trade_info["open_orders"] > 0:
                    print("■ キャンセルしました")
                    print(zaif_trade.cancel_order(order_id=order_id))
                    last_trade_price = last_trade_price_pre
                else:
                    print("■ 取引が完了しました。")

        end_time = time.time()
        elpsed_time = end_time-start_time
        if elpsed_time > 30:
            elpsed_time %= 30
            print("take time over 30sec")
        
        print(elpsed_time)  
        time.sleep(30-elpsed_time)

結果

実行中に落ちるため後日載せます。


github始めました

落合陽一さんが公表しないコードは無意味だとなんかの番組で言ってらしたので、それに影響を受け、作成したコードは法や契約上で非公開にしなくてはいけないもの以外は公開することにしました。
よかったらフォローお願い致します。
また、プログラミングをし始めて慣れてきた人はgithubを始めるのもお勧めします。
自分の成果が目に見えると非常にモチベーションが上がります。私は下記のサイトを参考にしてgithub入門しました。
GitHub 入門

終わりに

これからも不定期ですが更新するので読者登録もしくはgithubフォローしていただくと投稿した瞬間に通知が行くと思います。
仮想通貨の取引はお金が増減しますが、読者登録は一円もかからないのでおすすめです。

kq_init: detected broken kqueue; not using.: Undefined error: 0の治し方

f:id:kichie_com:20171119024227p:plain

なんだかよくわからない警告が出てる。。。

spyderを起動しようとしたらターミナルにこんな画面が。

kichie$ spyder
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0
[warn] kq_init: detected broken kqueue; not using.: Undefined error: 0

原因

よくわかっていないが、多分Macのシステムバージョンを El CapitanからHigh Sierraにアップデートしたからだと考えられます。

解決方法

各種エディタを使って環境変数を変更

~/.bashrcファイル内に下記のコードを追加

export EVENT_NOKQUEUE=1

環境変数EVENT_NOKQUEUEに1を格納するという意味です。

.bashrcファイルはbash(ターミナル)が起動されるたびに読み込まれるファイルです。



exportコマンドの詳細はこちら
Linuxコマンド【 export 】環境変数を定義・リスト表示する - Linux入門 - Webkaru