自動売買BOTを作る上で最低限絶対に必要なプログラミング構文

この記事では、文系初学者でも自動売買BOTを動かすために、プログラムのソースコードを「何となく読んで理解できる」レベルになることを目指します。そのために、最低限、必要なプログラミングの構文知識を3つだけ説明します。

それが、for文/if文/while文です。

実際のところ、単純なアルゴリズムによる自動売買BOTであれば、この3つの構文をキチンと理解するだけで実装が可能になります。

学習のポイント

当ブログはプログラミング学習サイトではないので、教科書のような詳しい構文の書き方は説明はしません。最低限、これらの3つの構文がどういう雰囲気で動くものなのか、ここでは大雑把に理解することを目指してください。

あとは当ブログに出てくる実際のソースコードを手打ちしたり、カスタマイズしながら実践で覚えていってください。キチンと基本を勉強したい方は、他の学習サイトを参考にしたり、一番簡単そうなPythonのプログラム教本を1冊だけ読むといいでしょう。

for文について

for文というのは、簡単にいうと、「〇個の要素すべてについて、1つずつ同じ処理を実行していきたい。だけど同じソースコードを〇回書くのは面倒くさい」というときに使います。

構文は以下のような感じです。

for 要素 in 配列等
   要素について1つずつ実行したい処理

例えば、ある仮想通貨の取引所で、取扱いのある通貨ペアをAPIで取得したところ、以下のような配列が返ってきたとします。

product = [“BTC_JPY”,”ETH_BTC”,”XRP_BTC”,”XEM_BTC”,”BCH_BTC”,”TRX_BTC”,”LTC_BTC”,……..]

これをすべてAndcondaプロンプト(黒い画面)に表示したい場合、以下のように書くことができます。

print(product[0])
print(product[1])
print(product[2])
print(product[3])
print(product[4])
print(product[5])
print(product[6])
print(product[7])
print(product[8])
....

しかし同じprint()を何度も書くのは面倒くさいですよね。

6~7回程度ならまだいいですが、過去2年分の価格データとか、すべての約定履歴とか、データ数が膨大になってくると、とても1つ1つを書くことはできません。しかも上記のように書く場合には、あらかじめデータ数が何個あるのかを数えて調べなければなりません。

for文を使えば、これを以下のようにシンプルに書けます。

for p in product:
	print(p)

これだけです!

上記の2行は、productという配列の中にある要素の1つずつを順番に「p」という変数に入れて、それをprint(p)で、黒い画面に出力する、という意味のプログラムです。

実践的な例

もう1つだけ、実践的な例をあげてみましょう。

「10日間の単純移動平均線を当日の終値が上回って引けた場合」をエントリーまたは利確の条件の1つ(フィルター)として使いたいとします。そこで過去のビットコインの終値の価格をAPIで取得したところ、以下のようなデータが得られました。

price = [1012104,1064332,981452,1026681,1040899,1103870,1214016,1346433,1319455,1312633]

知りたいのは、当日の終値が過去10日間の単純移動平均を上回ったかどうかなので、この平均を求めます。もしこれをfor文を使わずに書くとしたら、以下のようになります。

sum = 0
sum = sum + price[0]
sum = sum + price[1]
sum = sum + price[2]
sum = sum + price[3]
sum = sum + price[4]
sum = sum + price[5]
sum = sum + price[6]
sum = sum + price[7]
sum = sum + price[8]
sum = sum + price[9]

average = sum/10
print(average)

こちらもなかなか面倒くさいですね。
10期間単純移動平均くらいなら何とかなりますが、100期間移動平均などになると、とても手では書けません。これはfor文を使うと以下のように書けます。

sum = 0
for p in price:
	sum = sum + p
average = sum/10
print(average)

これだけです!
データが何百個あったとしても、上の5行だけで平均を調べることができます。

for文について、とりあえず知っておくべき基本的な説明はこれで終わりです。他にも、数字で指定した回数だけ実行するなど、いろいろと応用的な書き方はありますが、新しく出会うたびにGoogleで調べていけば問題ありません。

if文について

if文というのは、「〇〇の場合には~したい、××の場合には~したい、それ以外の場合には~したい」といった条件分岐を書くための構文です。おそらく自動売買BOTでも一番使うことになります。

構文は以下のかたちになります。

if 〇〇のとき:
   実行したい処理

簡単ですね。
もし、「それ以外の場合は~」までセットで書きたければ、以下のように書きます。

if 〇〇のとき:
   実行したい処理
else:
   それ以外で実行したい処理

3つ以上の条件分岐を書きたいときは、以下のように書きます。

if 〇〇のとき:
   実行したい処理
elif 〇〇のとき:
   実行したい処理
elif 〇〇のとき:
   実行したい処理
elif 〇〇のとき:
   実行したい処理
else:
   それ以外で実行したい処理

とりあえず、このイメージだけ理解しておいてください。あとは実際のソースコードを読んだり書き写したりしながら、使い方を確認していけば問題ありません。

実践的な例

せっかくなのでさっきの続きをやりましょう。
過去10日の終値の単純平均は、114万2187円でした。もし当日の終値がこれを上回っていたら買いエントリー、下回っていたら何もしない、というプログラムを、さっきの続きで書いてみましょう。

当日の終値は118万2475円だとします。

today_price = 1182475
sum = 0

for p in price:
	sum = sum + p
average = sum/10

if average <= today_price:
	print("買いエントリーする")
else:
	print("何もしない")

付け足したのは、最初の「today_price = 1182475」の部分と、最後のif文のところです。

この例では、当日の終値が過去10日の単純移動平均より大きければ、「買いエントリーする」と画面に表示します。そうでなければ「何もしない」と画面に表示します。実際の自動売買BOTでは、この「買いエントリーする」のところに、買い注文の関数を入れることになります。

while文について

最後はwhile文です。
while文というのは、「ある特定の条件を満たしている間は、ずーっと永久に以下の処理をループしてください」という構文です。

構文は以下のようになります。

while 条件:
   ループしたい処理

自動売買BOTを作る場合だと、例えば、10秒間おきに価格やテクニカル指標をチェックして、シグナルが出たら売る・買う・手仕舞う・損切りする、といった処理を、放置で自動的にループさせたい場合などに使います。

例えば、以下のようなイメージですね。

while true:
  APIで価格を取得する
  シグナルを計算する

  if ポジションを持っていない:
    if 買いシグナルが出た:
      買い注文を出す
   else:
    if 利確シグナルが出た:
      利確注文を出す
    elif 損切シグナルが出た:
      損切注文を出す

  sleep(10)//10秒待機

こちらは物凄く大雑把なロジックですが、

(1)価格を取得してシグナルを計算する
(2)まだポジションを取ってなければ、買いシグナルを確認し、シグナルが出ていれば買い注文を出す。出ていなければ何もしない。
(3)もし既にポジションを取っていれば、利確シグナルを確認する。シグナルが出ていれば利確注文を出す。出ていなければ、損切シグナルを確認する。シグナルが出ていれば損切注文を出す。両方出ていなければ何もしない。
(4)10秒間待機して、また(1)に戻る

というアルゴリズムを永久にループさせることができます。

この「シグナルを計算する」と書いた部分に、先ほどのfor文を使った実践例を組み込めば、「終値が短期移動平均を上回ったときに買い、下回ったときに売る」といった、ごくシンプルなアルゴリズムを作ることもできます。

ここでは大体、どのようにwhile文を使うのかのイメージが掴めればOKです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です