ウェルスナビ投資までの準備Home投資Python【再出発】貧乏だし文系だけどpythonで自動売買bot作りたい7日目2020/01/28fumitakakubo【再出発】貧乏だし文系だけどpythonで自動売買bot作りたい7日目こんにちは~。再出発7日目に入って参りました。文系初心者が挑戦しても1日1時間ペースで7日間くらいで追いつける分量くらいだと推測しています。前回は取得した価格データを直感的に分かりやすい形にしました。今回は「取得したビットコインの価格データをファイルにダウンロードする」をやっていきます。目的は、自動売買botを作成した後で試験を行うときのデータを集めてファイルに溜めておくことです。価格データは取得できる上限が決まっているので、自動売買botの作成に着手した段階からファイル化して溜めておくのが良いと考えています。前回は分量が多めだったので、今回は少なめに。取得したビットコインの価格データをファイルにダウンロードするまず取得したデータをファイルに書き込むときの基礎知識をおさらいします。今日の記事はこれが全てですが。ファイルへの書き込みは、open関数とwrite、closeメソッドを組み合わせて使います。"書き込みモード")変数.write(書き込みたいデータ)変数.close()こんな感じです。open関数は、ファイルの読み込みにも書き込みにも利用できます。今回のように書き込みを行いたい時は、openの後に続く()の中の2番目の”書き込みモード”を指定してあげると、ファイルに書き込むということをやってくれます。使われるのは”w”(ファイルが無ければ新規作成。あれば内容書き換え)、”a”(ファイルが無ければ新規作成。あれば追記)とのことです。1行目でやっていることは、指定した名称のファイルを作って、それを変数にぶち込んでいます。2行目に、その変数(=ファイル)に対して書き込みを行い、3行目でファイルを閉じています。ファイルを閉じないと、パソコンのファイルを開ける上限数に関わってきて、いつか他のファイルが開けないみたいなことが起きうるらしいので要注意です。ここで、かつて私が疑問に思っていたことを1つ。・なぜファイルを一旦変数にぶち込んで操作するのか?・ファイルに直接writeメソッドやcloseメソッドを使えば良いじゃん。"書き込みモード")ファイル名.write(書き込みたいデータ)ファイル名.close()てな感じで書けや、と思ってました。最近やっと事情が呑み込めたので、偉そうに解説します。間違ってたら教えてください。あと説明がつく人は読み飛ばしてください。Pythonで扱うものは、数値や文字列、リストやファイルだとかも全てメモリ上に展開されます。このようにメモリ上に展開されたものはオブジェクトと呼ばれ、メモリ上のどこかしらに格納されています。Pythonで100+100をして計算結果の200を表示する時も、この200という数値がメモリ上に展開されるわけです。ここで問題なのが、この200という数値のように一度使われたオブジェクトは、二度と使うことができないことです。200という数値だけだと、メモリ上のどこかにあるはずなんですが、他からアクセスしようとした時にその住所が分からないらしいんですね。そこで登場するのが変数です。変数は、これらオブジェクトに紐づいた案内板のようなものです。200という数値が「メモリ上の〇〇番地の領域」に格納されていたとします。200」としてあげることで、変数xが「メモリ上の〇〇番地の領域にあるオブジェクト」という意味を持ってくれるのです。ここに格納されているのは200という数値なので、以降xと書けば200を指し示すように動いてくれます。この理屈はファイル操作でも同じで、一度メモリ上にファイルオブジェクトを展開し、以降このファイルに操作を加えるために変数を設定しているのです。脱線した話にもなりましたが、どうしてファイル操作がこのようなコードなのかを私の理解で書いてみました。以上を踏まえると、ビットコインの価格データを取得してファイル化するプログラムのコードは以下のようになりました。JSONライブラリを使うためにインポートしています。fileという変数を宣言し、price_fileというファイルをメモリ上に展開。文字列化した価格データを書き込む。"w")file.write(jsondata)file.close()コメントを付与したところが新たに追記した箇所で、ファイル書き込みに必要な処理です。これも少し補足しますと、WebApiから提供されるJSONデータは、Pythonの形式でいうと辞書型にあたります。一方で、open関数でファイルに書き込めるのは、文字列のみであり辞書型を書き込もうとするとエラーで怒られます。JSONライブラリのdumps関数を利用して取得した価格データ(price)を文字列に置換しています。冒頭でjsonをインポートしているのはこのためです。最後のファイルを書き込むところの話は、これまでにした内容ですので割愛します。このプログラムを動かしてみると、下のような結果が得られます。フォルダに指定した名称でファイルが作成されます。ファイルを開くと価格データが書き込まれています。本日はここまでです!とりあえずシンプルなファイル化のロジックを実装しましたが、これだと試験データ集めには不十分なので、次回以降、このロジックをもう少しいじっていきたいと思います。差し支えなければ、twitterをフォローして頂けますと嬉しいです。@fumi51それでは~。0送るRecommendおすすめ記事2018.05.20貧乏だし文系だけどpythonで自動売買bot作りたい10日目2018.10.09【2018年9月】総資産状況(-1.69%)2018.11.25【2018年10月&11月】総資産状況(%)2020.01.17【再出発】貧乏だし文系だけどpythonで自動売買bot作りたい6日目fumitakakubo社畜を辞めたいと希う29歳の社畜です。実践も兼ねて、資産形成方法のご紹介を致します。PMHiroはじめまして。過去記事含め楽しく読ませていただきました。ryota-trade.comのコードを実際に運用してみたとの事でしたが、うまく収益につながらなかったのでしょうか?(バックテスト的には収益があるように見えましたが)私もこれからbotを作り始めようと考えており、ご参考までにご教示いただけると幸いです。PMHiroうまく収益につながらなかったのでしょうか?>そのままのストラテジではうまく収益につながらなかったのでしょうか?という意味です。PMfumitakakuboはじめまして!コメント頂きありがとうございます!>>うまく収益につながらなかったのでしょうか?ryota-trade.comのコードで運用して、トータルで見るとプラスだったと記憶しています!ただ、botを稼働させていた最後の方は、たまたまトレンドの無い相場が長く続いて、チャネルブレイクアウト戦略で少しずつ負けが混むようになったために止めてしまいました。正確な時期は思い出せませんが、あの時はチャネルブレイクアウト戦略では勝てない相場だったと思います。一方で、実際には検証が必要ですが、今はまた状況が変わったと考えていて、2020年1月以降のように大きく一定の方向に値動きがある状況だと、普通に収益をもたらせるbotじゃないかと個人的には考えています。仮に今に至るまでずっとryota-trade.comのコードで運用してたとしたら、成果はプラスだったんじゃないかと推測しています。同じbotを再び動かしたら?という話になるんですが、私の場合はそもそも「もっと早く、大きく利益を伸ばしたい」という気持ちがあるので、それには上のbotは馴染まないと思い再稼働させてはいません。参考になれば嬉しいです。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目ですCommentName*Email*Website次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。@fumi51社畜を辞めたいと希う29歳の社畜です。目標は3年後の32歳までに3000万円貯めて脱サラすること!実践も兼ねて、資産形成方法のご紹介を致します。Sentry%d人のブロガーが「いいね」をつけました。