プログラミング入門からビットコインを自動売買

プログラミング入門からビットコインを自動売買

プログラミング経験なしでBTCFXbot作成します

プログラミング教室に無料でいく方法

プログラミング教室で大人でもプログラミングを習得

 

 初心者でプログラミングを勉強しようと考えてる方は、これから自力で勉強するかプログラミング教室で勉強するか迷ってしまいますよね。

 

スクールに入ればお金がかなりかかるし、自力で勉強するとなると本やオンラインでの学習になってきて、途中で分からなくなってやめてしまう確率が高いです。 

 

無料でプログラミングを受けることができて、就職できたらいいなって考えてる方もいらっしゃると思います。

 

そこでおすすめの無料で受けれるプログラミング教室を紹介します。

 

 

 

無料プログラミングスクール

ほとんどのところは年齢制限があります。ほぼ20代だけだと考えてもいいと思います。30代以上であれば有料のスクールしか選択肢はありません。

 

GEEK JOBキャンプ

 

 GEEK JOBキャンプは最短1カ月で習得可能とありますが、全くプログラミングをしたことがないと2ヶ月くらいはかかります。ですから、プログラミングの基礎くらいは勉強しておいた方が早く習得できるでしょう。

 

f:id:bellatty2010:20180523143622j:plain

こちらは東京のみなので地方の方は入ることができません。

 

GEEK JOBキャンに入ろうと考えてる方は東京近郊で、プログラミング

を早く習得して就職したいと考えてる方におすすめです。

 

Pro Engineer

 Pro Engineerでは未経験でもプログラミング学習を学べて、就職まで完全サポートしてくれます。無料で学べる理由は企業からの協賛金を得ることで成り立っています。

 

f:id:bellatty2010:20180523155205j:plain

 

そして正社員の就職率は96.2%!

1人ひとりの受講生に専任アドバイザーがついて、就活サポートをしてくれます。ただ対面の授業をするために、首都圏近郊・30歳未満の方に限られてきます。

 

0円スクール

こちらは完全に無料で、全国6か所にスクールがあります。

なぜ無料でスクールができるのかといいますと、親会社のバンキング・システムズがプログラマーを育てるために作っているからです。卒業生の9割がバンキング・システムズに就職しているみたいですが、特に就職の制約はないようです。

 

学べる言語は”Javaだけです。

受講条件は35歳までですので、30歳から35歳まででプログラミングをしたいと考えている方にはおすすめですね。

 

求職者支援制度

こちらはハローワークで受付をしている就職支援制度です。

国の制度なので安全安心です。下のサイトで募集してるところを探せますが、スタート日が決められていて、一日でも休んでしまうと給付金が貰えなくなります。

 

いろいろ条件があるので、条件が合って授業日に休まない自信のある方にはこちらがおすすめです。

 

求職者支援訓練 認定コース情報

 

最後に

無料で通えるスクールは条件が厳しくなってきますので、条件が合わなくて無料プログラミングスクールに入れないときは、思い切って有料のスクールに入るのも念頭に置いておくのがいいかもしれません。

 

東京近郊では無料スクールを含め、プログラミングスクールは多くありますが、地方では選択肢すらない状況です。地方でもプログラミングを習得したいと考えている方はオンライン学習で勉強することも考えてはいかがでしょうか。

 

 

 

はてブロにソースコードをのせる方法

はてブロにソースコードを載せるのが分からなかった

 

co-nuts.net

先日の記事でソースコードを載せてみましたが、はてブロでソースコード載せるのが分かりにくかったので簡単にできる方法があったので書いていきます。

簡単といっても面倒くさいやり方ですが・・・

 

いくつか方法はあるみたいなのですけど、うまくいけたのがこの方法でした。

 

まず記事を書く画面を2つ用意します。モニターが2つあれば2画面でやった方が楽にできます。普通にタブで2つ開くのでもいいです。

f:id:bellatty2010:20180521224452j:plain

 

そして上の画面の左側の「編集 見たまま」のところを「編集 はてな記法」に変えます。

f:id:bellatty2010:20180521224825j:plain

 

そして「はてな記法」の方にハイライトしたいソースコードを「>||」「||<」で囲みます。そして最初の方に「>|python|」というようにコードの言語を中にいれておきます。

f:id:bellatty2010:20180521230403j:plain

 

そして中にソースを書き込んで

f:id:bellatty2010:20180521230610j:plain

 

プレビューを押すと下の画像のようにハイライトされたソースコードが出来てます。

そのプレビュー画面をコピーしてここの下に貼り付けると

# 1分足データの取得
# while文を使って自動ループ
import requests
from datetime import datetime
import time

while True:
    # CryptowatchのAPIで1分足を取得
    response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?periods=60")
    response = response.json()

    # 最後から2番目のローソク足を取り出す
    data = response["result"]["60"][-2]

    # ローソク足から日時・始値・終値を取り出す
    close_time = datetime.fromtimestamp(data[0]).strftime('%Y/%m/%d %H:%M')
    open_price = data[1]
    close_price = data[4]


    print( "時間: " + close_time
	     + " 始値: " + str(open_price)
	     + " 終値: " + str(close_price) )

    time.sleep(10)

 

ちゃんとソースコードが貼れました!

結構手間がかかりますが、一番分かりやすい方法だったんで私はこれからもこの方法でソースコードを貼っていきます!

 

 

 

仮想通貨botをPythonで作成したコード

BitflyerのBTCFXでbotを作る

 

co-nuts.net

先日からビットコインbotを作るために「文系でもわかる!BitcoinのBOT自動売買トレードの始め方」でbot作りの勉強をしています。

 

現在の進捗状況は、”第4回~BOT作成編”がようやく終わったとこです。

プログラミングをしたことがない人にとってはかなり難しいし、時間がかかります。外国語を学んでるような感じですね。実際、英語がいっぱいでてきますし(^^;)

 

ブログの通りに自分でコードを打つのだけでも大変ですが、これを理解するのにもまだまだ時間がかかりそうです。

 

 

 

コードは下のような感じで書いていってます。

赤三兵・黒三兵のロジックですが、17行目にインデントエラーが出て動きません。このコードで動かすわけではないので、いいかなと思ってますがもやもやします(-ω-;)ウーン

 

botを動かしたい人は結局は自分でコードを書けないとだめですね。プログラミングの勉強をして、自分でコードを書けるようにやりましょう。

 

最近はビットフライヤーにはログインすらしていません。新規会員募集を辞めたので、本格的なゼロサムゲームになってしまいました。

 

そして現在はBitMEXでのみトレードしています。まだまだ下げる、というか上がらないだろうから、上げたらショート入れて少し増えました。仮想通貨にとって厳しい年になると思うので、じっくりいきましょう。

 

BitMEXなら指値で注文がささればマイナス手数料(手数料が逆に貰える)なので、指値注文でトレードしてるだけでビットコイン増えるのもおいしいです。

 

>>BitMEXに登録すれば半年間手数料半額

 

co-nuts.net

 

次の章からが本番なので、復習しながら進めていきます。

 

 

import requests
from datetime import datetime
import time
import ccxt


bitflyer = ccxt.bitflyer()
bitflyer.apiKey = ''
bitflyer.secret = ''


# Cryptowatchから価格を取得する関数
def get_price(min,i):
    while true:
        try:
	       response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc", params = { "periods" : 60 })
               response.raise_for_status()
               data = response.json()
	           return { "close_time" : data["result"][str(min)][i][0],
		             "open_price" : data["result"][str(min)][i][1],
		             "high_price" : data["result"][str(min)][i][2],
		             "low_price" : data["result"][str(min)][i][3],
		             "close_price": data["result"][str(min)][i][4] }
        except requests.exceptions.RequestException as e:
            print("Cryptowatchの価格取得でエラー発生 :",e)
            print("10秒待機してやり直します")
            time.sleep(10)


# 時間と始値・終値を表示する関数
def print_price( data ):
	print( "時間: " + datetime.fromtimestamp(data["close_time"]).strftime('%Y/%m/%d %H:%M') + " 始値: " + str(data["open_price"]) + " 終値: " + str(data["close_price"]) )


# 各ローソク足が陽線・陰線の基準を満たしているか確認する関数
def check_candle( data,side ):
	realbody_rate = abs(data["close_price"] - data["open_price"]) / (data["high_price"]-data["low_price"])
	increase_rate = data["close_price"] / data["open_price"] - 1

	if side == "buy":
		if data["close_price"] < data["open_price"] : return False
		elif increase_rate < 0.0003 : return False
		elif realbody_rate < 0.5 : return False
		else : return True

	if side == "sell":
		if data["close_price"] > data["open_price"] : return False
		elif increase_rate > -0.0003 : return False
		elif realbody_rate < 0.5 : return False
		else : return True


# ローソク足が連続で上昇しているか確認する関数
def check_ascend( data,last_data ):
	if data["open_price"] > last_data["open_price"] and data["close_price"] > last_data["close_price"]:
		return True
	else:
		return False

# ローソク足が連続で下落しているか確認する関数
def check_descend( data,last_data ):
	if data["open_price"] < last_data["open_price"] and data["close_price"] < last_data["close_price"]:
		return True
	else:
		return False



# 買いシグナルが出たら指値で買い注文を出す関数
def buy_signal( data,last_data,flag ):
	if flag["buy_signal"] == 0 and check_candle( data,"buy" ):
		flag["buy_signal"] = 1

	elif flag["buy_signal"] == 1 and check_candle( data,"buy" )  and check_ascend( data,last_data ):
		flag["buy_signal"] = 2

	elif flag["buy_signal"] == 2 and check_candle( data,"buy" )  and check_ascend( data,last_data ):
		print("3本連続で陽線 なので" + str(data["close_price"]) + "で買い指値を入れます")
		flag["buy_signal"] = 3

        try:
		          order = bitflyer.create_order(
			               symbol = 'BTC/JPY',
			               type='limit',
                           side='buy',
			               price= data["close_price"],
			               amount='0.01',
	                       params = { "product_code" : "FX_BTC_JPY" })
		          flag["order"]["exist"] = True
                  flag["order"]["side"] = "BUY"
                  time.sleep(30)
        except ccxt.BaseError as e:
            print("Bitflyerの注文APIでエラー発生",e)
            print("注文が失敗しました")
	else:
		flag["buy_signal"] = 0
	return flag


# 売りシグナルが出たら指値で売り注文を出す関数
def sell_signal( data,last_data,flag ):
	if flag["sell_signal"] == 0 and check_candle( data,"sell" ):
		flag["sell_signal"] = 1

	elif flag["sell_signal"] == 1 and check_candle( data,"sell" )  and check_descend( data,last_data ):
		flag["sell_signal"] = 2

	elif flag["sell_signal"] == 2 and check_candle( data,"sell" )  and check_descend( data,last_data ):
		print("3本連続で陰線 なので" + str(data["close_price"]) + "で売り指値を入れます")
		flag["sell_signal"] = 3

        try:
		      order = bitflyer.create_order(
			           symbol = 'BTC/JPY',
			           type='limit',
			           side='sell',
			           price= data["close_price"],
			           amount='0.01',
			           params = { "product_code" : "FX_BTC_JPY" })
		      flag["order"]["exist"] = True
		      flag["order"]["side"] = "SELL"
              time.sleep(30)
        except ccxt.BaseError as e:
            print("Bitflyerの注文APIでエラー発生",e)
            print("注文が失敗しました")
	else:
		flag["sell_signal"] = 0
	return flag


# 手仕舞いのシグナルが出たら決済の成行注文を出す関数
def close_position( data,last_data,flag ):
	if flag["position"]["side"] == "BUY":
		if data["close_price"] < last_data["close_price"]:
			print("前回の終値を下回ったので" + str(data["close_price"]) + "あたりで成行で決済します")
            while True:
                try:
                    order = bitflyer.create_order(
				                symbol = 'BTC/JPY',
				                type='market',
				                side='sell',
				                amount='0.01',
				                params = { "product_code" : "FX_BTC_JPY" })
			        flag["position"]["exist"] = False
                    time.sleep(30)
                    break
            except ccxt.BaseError as e:
					print("BitflyerのAPIでエラー発生",e)
					print("注文の通信が失敗しました。30秒後に再トライします")
					time.sleep(30)

	if flag["position"]["side"] == "SELL":
		if data["close_price"] > last_data["close_price"]:
			print("前回の終値を上回ったので" + str(data["close_price"]) + "あたりで成行で決済します")
            while True:
                try:
			        order = bitflyer.create_order(
				                symbol = 'BTC/JPY',
				                type='market',
				                side='buy',
				                amount='0.01',
				                params = { "product_code" : "FX_BTC_JPY" })
			        flag["position"]["exist"] = False
                except ccxt.BaseError as e:
			        print("BitflyerのAPIでエラー発生",e)
                    print("注文の通信が失敗しました。30秒後に再トライします")
					time.sleep(30)
	return flag


# サーバーに出した注文が約定したかどうかチェックする関数
def check_order( flag ):
	position = bitflyer.private_get_getpositions( params = { "product_code" : "FX_BTC_JPY" })
	orders = bitflyer.fetch_open_orders(
		symbol = "BTC/JPY",
		params = { "product_code" : "FX_BTC_JPY" })

	if position:
		print("注文が約定しました!")
		flag["order"]["exist"] = False
		flag["order"]["count"] = 0
		flag["position"]["exist"] = True
		flag["position"]["side"] = flag["order"]["side"]
	else:
		if orders:
			print("まだ未約定の注文があります")
			for o in orders:
				print( o["id"] )
			flag["order"]["count"] += 1
			if flag["order"]["count"] > 6:
				flag = cancel_order( orders,flag )
		else:
			print("注文が遅延しているようです")
	return flag


# 注文をキャンセルする関数
def cancel_order( orders,flag ):
    try:
	       for o in orders:
		             bitflyer.cancel_order(
			                  symbol = "BTC/JPY",
			                  id = o["id"],
			                  params = { "product_code" : "FX_BTC_JPY" })
	       print("約定していない注文をキャンセルしました")
	       flag["order"]["count"] = 0
	       flag["order"]["exist"] = False

	       time.sleep(20)
	       position = bitflyer.private_get_getpositions( params = { "product_code" : "FX_BTC_JPY" })
	       if not position:
		             print("現在、未決済の建玉はありません")
	       else:
		             print("現在、まだ未決済の建玉があります")
		             flag["position"]["exist"] = True
		             flag["position"]["side"] = position[0]["side"]
    except ccxt.BaseError as e:
		print("BitflyerのAPIで問題発生 : ", e)
	finally:
	       return flag


# ここからメイン
last_data = get_price(60,-2)
print_price( last_data )
time.sleep(10)

flag = {
	"buy_signal":0,
	"sell_signal":0,
	"order":{
		"exist" : False,
		"side" : "",
		"count" : 0
	},
	"position":{
		"exist" : False,
		"side" : ""
	}
}

while True:
	if flag["order"]["exist"]:
		flag = check_order( flag )

	data = get_price(60,-2)
	if data["close_time"] != last_data["close_time"]:
		print_price( data )
		if flag["position"]["exist"]:
			flag = close_position( data,last_data,flag )
		else:
			flag = buy_signal( data,last_data,flag )
			flag = sell_signal( data,last_data,flag )
		last_data["close_time"] = data["close_time"]
		last_data["open_price"] = data["open_price"]
		last_data["close_price"] = data["close_price"]

	time.sleep(10)

Python入門の学習サイトとしてPyQ

PyQをつかったPythonの勉強

co-nuts.net

 

PyQは最初に無料で勉強できるところがあります。

いちばんやさしいPythonの教本 」でPythonの勉強を始めましたが、そちらに「PyQ」が無料で使えるコードが載っていました。

誰でも無料で使えるので載せておきます。

キャンペーンコード「yasashiipython」

 

 

 

 

コードを打ち込むとこのような画面が出てきて、

f:id:bellatty2010:20180519124209j:plain

一番上だけ無料で学習できます。

 

そして少しやってみたのですが、

f:id:bellatty2010:20180519124418j:plain

 

すでに勉強を始めていた私にとっては簡単すぎました(^^;)

無料で学べるのは初歩中の初歩だけでした。分かりやすく解説が入ってますので全くプログラミングをしたことのない方を対象にしたプログラムです。

 

ですからこれからPythonをしようと考えている方は「PyQ」の無料で学べるところだけでもやってみるといいでしょう。

 

 

f:id:bellatty2010:20180519125822j:plain

 気になる料金は一か月で2980円なんで、プログラミングを最初にするには高くないですね。

 

しかも途中解約すると日割りで返ってきます。

f:id:bellatty2010:20180519130823j:plain

まずは「PyQ」を始めてから合わないと思ったら辞めてもいいでしょう!

プログラミングでPythonを勉強したいと考えてる方は、「PyQ」の無料で使える分から始めてみるのがいいですね。

 

 

 

プログラミング初心者が独学でありがちなこと

Python初心者の独学あるある

 

Pythonの勉強を始めてプログラミングをする前に躓いてしまったことってありませんか?私はプログラミングをする前からいきなり躓いてしまいました。

 

最初はディレクトリ?コマンドプロンプト聞いたこともなかった言葉でした。しかし調べたらすぐに解決。ディレクトリ=フォルダコマンドプロンプトはキーボード入力だけでコンピューターに指示を与えるものということでした。

 

つまりコマンドプロンプトは、普段はマウスなどを使ってコンピューターに指示を出しますが、この画面でコンピューターに指示を出すのでなれないとかなり大変です。

 

私が勉強しているのはPythonですので、Pythonを始めたい方の参考になるように書いていきます。

 

 

 

PythonとAnacondaをダウンロードした後に、コマンドプロンプトを使って入力しますが、まずこの画面の意味が分かりません。ちなみにAnacondaを使ってるのであれば、Anaconda Promptをつかうのがおすすめです。

f:id:bellatty2010:20180518103301j:plain

C:\Users\Atsushi>

となってますが(\は¥と同じです)、これは現在のディレクトリの場所を指しています。

 

つまり

ローカルディスク(C:) 内の

ユーザー 内にある

Atsushi

という場所のディレクトリに指示を出すといくことです。

ですからこの”Atsushi"ディレクトリ内にあるものにしか指示は出せません。

 

そこで違うディレクトリに指示を出したい場合はどうすればいいのか。

 

例えば下の赤丸で囲ったディレクトリに指示をだしたい場合は

f:id:bellatty2010:20180518105138j:plain

C:\Users\Atsushi>cd ../../

と入力すると

C:>

という風になります。これは"../"でひとつ前のディレクトリに戻るという意味ですので"../../"で2つ前のディレクトリになります。

cdとはチェンジディレクトリという意味です。

 

そして

C:>cd btcbot

と打ち込むと

f:id:bellatty2010:20180518105950j:plain

赤線のようにディレクトリを変更することができました。

 

指示をだしたいものがディレクトリの中にないと指示が出せませんので、インストールしたものがここのディレクトリにないってときは困りますよね。

 

しかし、指示したいディレクトリにインストールしたいものがない場合でも簡単にディレクトリに移すことができます。それは手動で指示したいディレクトリにドラッグしてもってくればいいだけです。

 

コマンドプロンプトディレクトリ移動の指示も出せますが、初心者には結構めんどくさい作業になってきますので、最初は手動がおすすめです。

 

最初に躓くとイライラしたりやる気がなくなってしまうと思うので、私がプログラミング始める前に躓いたことを書いてみました。

 

いろいろわからないことがあれば、無料のQ&Aサイトteratailで質問すれば親身になって答えてくれる方もいらっしゃいます。