プログラム未経験でビットコインを自動売買

プログラム未経験でビットコインを自動売買

pythonで0から仮想通貨botをつくっていきます

プログラミングスクールに無料でいく方法

プログラミングスクールでプログラミング習得

 

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

 

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

 

無料でスクールを受けることができて、就職できたらいいなって考えてる方っていると思います。

 

そこで無料で受けれるスクールをおすすめします。

 

 

 

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

ほとんどのところは年齢制限があります。ほぼ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歳まででプログラミングをしたいと考えている方にはおすすめですね。

 

求職者支援制度

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

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

 

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

 

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

 

最後に

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

 

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

 

 

 

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

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

 

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

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

 

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

 

まず記事を書く画面を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)

 

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

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

 

 

 

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

BitflyerのBTCFXでbotを作る

 

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

 

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

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

 

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

 

 

 

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

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

 

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

 

 

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)

PyQでPythonの学習

PyQをつかったPythonの勉強

 

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で質問すれば親身になって答えてくれる方もいらっしゃいます。

 

 

プログラミングを始める言語

プログラミングで何がしたいの?

 

プログラミングっていろいろできるし、「自分でホームページ作ってみたいなー」とか「AIが流行ってるしどんなものか勉強してみようかな」とか「プログラマーは給料が高いみたいだからプログラミングしようかな」など考えてみたことないですか。

 

実際にプログラミングをするうえで、最初にどの言語を学ぶのかって重要になってきますよね。しかし、自分がやりたいことってどの言語を勉強すればいいの?って疑問が出てきます。

 

そこで、その言語を使って何ができるのか、初心者が最初に学ぶ言語は何を選ぶべきかという疑問を簡単にまとめてみました。

 

 

 

初心者が学ぶべき言語 

 

いきなりですが初心者におすすめの言語は

Python

PHP

Ruby

この3つからプログラミングの勉強を始めてみるのがプログラマーになるための早道です!理由はコードが読みやすくて文法がシンプルだから。

 

ただ、Apple製品のアプリ開発をしたい方にとってはSwiftからプログラミングを始めてみてください。

以下にプログラミング言語について、そして学び方を書いていきます。

 

プログラミング言語の種類

プログラミング言語は世界で200種類以上あるらしいのですが、ここでは主要な言語だけを選んでいます。

Java

 世界的に人気があり、OSに依存しないのでwindowsでやMac OSなどどのOSでもプログラムできる。

●Webアプリやデスクトップアプリ、Androidアプリの開発など

 

C言語

初心者には 難易度高い。本格的にプログラミングを身に着けたい人向き。

ソフトウェア・ロボット開発など

  

C++

 C言語の拡張版。つまり難易度高い。

 ロボットや電化製品を制御するシステムの開発

 

C#

 C++Javaのいいところを取り入れて作られた。Windowsに特化。

 

Python

 コードが読みやすく、文法がシンプル。

 Webアプリ、組み込みアプリ、人工知能機械学習

 

Java Script

 ほとんどのWebページで使われる。習得まで時間がかかる。

 Webページにスライドショーなどの動作を作る、Webアプリ、スマホアプリ

の開発など

 

PHP

 HTMLやCSSと一緒に使われる。文法がシンプル。

ホームページ、ブログ、Webサービスを開発 

 

Ruby

 国産プログラミング言語。コード記述が少なく、文法がシンプル。

 Webアプリ開発API作成、スマホアプリ作成

 

Swift

 Appleが開発した言語。コードが書きやすくて読みやすい。

iOSアプリ作成、Macアプリ 

 

 

かなりざっくりと簡単に書きました(^^;)

習得する方法

何を作りたいか決める
学習する言語を決める
学習方法
  • 本(わからないことが解決できない)
  • Webサービス(安く勉強できるが、わからないことを解決するのに時間がかかる)
  • プログラミングスクール(お金がかかるが、習得まで早い)
挫折せずに続ける
  • 初心者が挫折せずに早くプログラミングを習得するためには、コードが 読みやすくて文法がシンプルな言語を選ぶべきでしょう!

  • 自分で調べても解決できないエラーがある ➡ 質問サイトで調べる

  • 簡単なものを作ってみる。作ったものを動かしたりしたら楽しい。
  • 誰かと一緒にどれだけ進んだか競争する。

 まとめ

あなたは新しいゲームをするときどうしますか?

最初に説明書を隅から隅まで読んで理解してからスタートしますか?それとも説明書を読まずにゲームをスタートして、分からないところを調べながら進めますか?

 

私は早くゲームを進めたくて、説明書を読まずに始めるタイプでした(笑)まだプログラミング初心者で、初歩中の初歩を勉強してますが、コードを打ち込んでいる少しづつ理解できるところが増えてきました。

プログラミングはゲームとは違いますが、まずは始めてみましょう!

だれでも未経験からのスタートなので、早く始めるのが習得への早道になりますよ!

 

 

paizaでpythonを無料で勉強中

プログラミングって初心者には難しい!

Pythonの基礎だけでも無料で身に着けたいと思い、現在は「paiza」で勉強中です。「paiza」ではどのようなことが無料で学べるのかといいますと、

f:id:bellatty2010:20180514115118j:plain

このように基礎部分を無料で勉強することができます。

 

進め方としては入門編1からスタートしていきます。最初に動画を見ながら、理解できるまで何度でも繰り返せます。

f:id:bellatty2010:20180514115912j:plain

 

 

動画が終わった後は演習問題が出てくるので、そちらを解いていきます。演習では左に問題が出てくるので右の方で入力していき”コードの実行”を押すことで自分の書いたコードを確認することができます。そして、左の方の画面の”期待する出力値”と合えば”採点する”ボタンを押して採点します。

f:id:bellatty2010:20180514123058j:plain

 

正解していれば

f:id:bellatty2010:20180514124146j:plain

こんな感じで次の演習問題に進めます。

分からなくても”模範解答を見る”で回答を見ながら進めることができるのでさくさく進めます。チケットは毎日1枚追加されるらしいので(あまり使ってないので詳しくはない(笑))、分からずに悩むより回答を見て先に進んだ方が時間の無駄になりません!

 

 

私は最初は「いちばんやさしいPythonの教本」から勉強を始めましたが、だんだんコードが長くなってくると全然わからなくなってきました。そして復習をかねてpaizaで勉強を始めましたが、音声があると勉強しやすですね。本だとマイペースでできるけど、自分に甘くなる(笑)時間がなくて家で勉強される方にとってはpaizaから取り掛かってみるのがいいですよ。

 

 

現在、Progateでも勉強していってたのですが、途中からは有料会員しか使えないようになっていました。こちらはスライドで勉強していってかなり分かりやすいと感じました。月額980円なので、有料会員になろうかと考え中です。

f:id:bellatty2010:20180514131721j:plain

この🔒がかかってるとこは有料会員のみみたいです。

 

 

プログラミングを勉強するにはかなりお金がかかってくるので、無料である程度勉強してからお金をかけた方がいいですね。

 

 短期間で集中してプログラミングを習得

時間があれば本やオンラインでゆっくり勉強して身に着けるのもいいですけど、時間がない!って方にとっては分からないところをすぐに質問できるスクールでプログラミングを学んだ方がいいでしょう。