BOTの中で何度も使いそうな処理を関数にまとめてみよう!前回の記事では、CryptowatchのAPIを使って、Bitflyerの1分足の価格データ(始値と終値)を取得して表示するプログラムを書きました。今回の記事では「関数」を勉強します。関数とは関数というのは、プログラムの中で何度も登場するようなコード(処理)を1つの部品としてまとめておいて、後から1行で呼び出せるようにする記述方法のことです。関数名()」と記述することで、何度も使う処理を1つの関数にまとめることができます。x関数名の後ろについている()は引数といいます。関数に何かデータを渡したいときは、この引数にデータを指定します。関数側からデータを外部に返したいときに使います。外部から関数を呼び出すときは以下のように記述します。関数名()具体的なコード教科書的な説明だけ聞いても退屈でさっぱりわからないと思います。実践用のコードを見て行きましょう!まずは前回までのコード、つまりBitflyerから最新の1分足の価格データを取得して、日時に更新があった場合のみ表示するコードをもう1度、見ておきましょう。今回は以下のような名前の関数を2つ作ります。以下のようになります。コードが長くて複雑になったぞ...?」と思うかもしれません(笑)しかし大事なのはメイン処理の部分です。Cryptowatchから価格を取得する処理と、その内容を表示する処理、の2つを関数にして外に出したことで、今まで書いていた長いメイン処理の部分を以下のようにシンプルに7行にまとめることができました。)time.sleep(10)このように、ややこしい処理や何度も使う処理は、関数にして外に出しておくと、メイン処理の部分が非常に読みやすくなります。後で読み返したときに、「コード全体がどういう流れで何をやっているのか?」がわかりやすくなります。今回はただ単にBitflyerFXのローソク足データを表示するだけなので、別に敢えて関数にする必要はありません。これが自動売買BOTになると、以下のように全体の流れも複雑になります。1)While文でループする2)Cryptowatchから最新価格を取得する3)エントリー条件を判定する4)Bitflyerにエントリー注文を出す5)指値注文が約定したかを確認する6)約定しなければキャンセルする7)約定したら手仕舞いの条件を満たしたか判定する8)手仕舞いの条件を満たしたら決済注文を出すこのような一連の流れをすべてメイン処理の中に書こうとすると、何がなんだかわからなくなります。・手仕舞いの決済をする関数など、役割ごとに関数に分けて外に出すようにしておくと、メイン処理を読みやすくシンプルに保つことができます。get_price()関数から見ておきましょう。以下のように定義しています。get_priceという関数名を使うことを定義しています。いうのが「引数」です。このように自作の関数には、好きなデータを外部から渡すことができます。今回は、この関数を1分足、5分足、15分足でも共通で使いたいので、「何分足か?」という部分を変数にしておき、これを外部から指定できるようにしておきます。メイン処理で以下のように記述すれば、1分足、5分足、15分足のデータを取得できます。1時間足を使うget_price(3600)またこの関数には、返り値があります。それが以下の部分ですね。日時(close_time)、始値(open_price)、終値(close_price)の3つの値を返す、という意味です。関数に返り値がある場合は、メイン処理の方で関数を実行したときに、この3つの返り値を受け取る変数を用意しなければなりません。以下のような具合です。3つの返り値を受け取る変数を用意する。get_price(60)同じようにprint_price()のコードも見ておきましょう。いう名前の関数を作成しています。この関数は3つの変数(日時・始値・終値)を受け取って、それをテキスト形式に変換してprintで表示するだけの関数です。このように返り値のない関数も定義することができます。返り値のない関数を呼ぶときは、メイン処理に以下のように書けばOKです。メイン処理(呼び出す側)print_price(a,b,c)このときに指定された引数を渡さないとエラーになるので注意してください。関数側で定義した引数は、必ず呼び出すときに渡さなければなりません。3つの引数が定義されているのに、メイン処理で2つしか引数を渡さない場合もエラーになります。実行結果これをpythonファイルに保存して実行してみましょう!以下のようになります。PMここ数日読ませていただいていますが大変勉強になっています。Pandasの.ewmを使ったEMAの関数を実装についての記事など、その他テクニカル指標についての記事も見てみたいです。コメントをキャンセルメールアドレスが公開されることはありません。