FX自動売買をPYTHON(パイソン)で作る方法

  • FX自動売買ソフトで使われるPYTHONって何?
  • 具体的にEAはどうやって製作するの?

このような疑問を持ち、FX自動売買を自分で作ってみたいと感じる意識の高い方は意外に多いです。

今回、FX自動売買ソフト開発に欠かせない「PYTHON」について解説した上で、実際にPYTHONを使った自動売買プログラムの買い方の一例をご紹介致します。

非常に高度な内容となりますので、FXを始めて間もない方やFXをこれから始めようとされている方にとっては、全く理解できない内容かもしれません。

そういったFXにおいて経験が浅い方は、以下の記事で、既に実績のある高勝率なおすすめのFX自動売買ソフトを紹介しておりますので、こちらをご参照頂ければと思います。

関連記事

FX自動売買ツールって何? FX自動売買ツールで本当に稼げるのか? 稼げる自動売買ツールはどのように手に入れたらいいのか? 高月利、高勝率なおすすめの自動売買ツールが知りたい! この記事は、上記のお悩[…]

FX自動売買開発でも使われるPYTHONとは?

PYTHON(パイソン)は、プログラミング言語の一種となります。

そして、FX自動売買システムのストラテジーを作成する際にも使用されています。

つまり、PYTHONを習得すれば、自分自身でオリジナルのFX自動売買ストラテジーの開発が可能になるわけです。

現状では自分でプログラムを作ってそれをMT4などに適用させるのは一般的ではありません。

しかしながら、オリジナルのストラテジーがあり、かつそれに類似したストラテジーがFX自動売買業界に無い場合、それは大変有用なものとなります。

そのため、将来的には使える可能性が非常に高く、覚えておいて損はまずありません。

そんなFX自動売買のストラテジー開発を可能にするPYTHONについて以下の項目を解説致します。

  • PYTHONの基礎知識
  • PYTHONの自動売買アルゴリズム

PYTHONの基礎知識

PYTHON(パイソン)とは、プログラミング言語の1つであり、他のものと比べてわかりやすくシンプルであるのが大きな特徴です。

構文が短い為、比較的誰がプログラムを作成しても同じような内容になり易いです。

自由度が高い言語の為、覚えたての頃は扱い方が難しいですが、慣れれば、PYTHONを使ったFX自動売買は他言語で製作するよりも簡単と言えるでしょう。

PYTHONの自動売買アルゴリズム

PYTHONで作るFX自動売買システムのアルゴリズムは、C系等の他プログラミング言語と比較すればシンプルです。

しかし、プログラミングである以上、一般的に見ればかなり複雑です。

実際に利益を出す自動売買アルゴリズムを構築するには、FXの裁量に加えて、それなりに高度なプログラミング技術とその知識が必要不可欠となってきます。

OANDAのAPIサービスでFX自動売買をPYHTONで作る方法

自分で自動売買システムを作る場合にはOANDAのAPIサービスを利用するのが有効です。

プログラミングができても結局それを稼働させるプラットフォームが無ければ意味がないのでOANDAのAPIについて目を通しておきましょう。

ここでは

  • OANDAAPIについて
  • PYHTONでFX自動売買を作る方法

について説明していきます。

OANDAAPIについて

OANDAのAPIは簡単に言うと自動売買システムを作り、それを適用させるための土台となるものです。

OANDAではいくつかのプラットフォームでPYTHONで作ったアルゴリズムを適用できますが、ここでは代表的なMT4について述べます。

APIの利用料は無料なので特にリスクがあるわけではないのですが、OANDAの口座を持っていなければ利用できないので口座開設しておきましょう。

ちなみに、この会社はトレーダーのポジション情報を開示するオープンオーダー・オープンポジションがあり、口座開設者はその更新頻度が高くなるので裁量取引の方もアカウントを持っておくと良いかもしれません。

また、プログラミング言語は選ばないのでPYTHON以外でストラテジーを組んでも良いです。PYTHONがシンプルなので未経験の方にはオススメですが、知識があるのなら他のものを使っても良いでしょう。

当然ながらあらゆる注文方法に対応しており、OCO・IFOなど状況に応じたエントリーと決済が可能なのですが、トレーリングストップは行えないことに注意して下さい。

※「トレーリングストップ」とは、FXにおいて、損失は抑えつつ、利益を確保する投資方法の事。

そして、そこまで気にする必要はありませんが、ポジションの期限は100日間なので数ヶ月単位の長期取引にもつれこまないようにしましょう。

少し厄介なのはデモトレードが使えないことです。現在OANDAはプラットフォームを問わずデモトレードを解禁していないので必然的にぶっつけ本番でトレードすることになります。

このため、最初はロット数をかなり少な目にして極力リスクを減らしましょう。思い通り通りに売買できていると判断した時にロット数を変更して下さい。

実際にOANDAのAPIを利用するときには契約の締結はもちろん、疎通テストがありますが、あくまでも実戦レベルでの検証にはならないので細かな調整は後から行って下さい。

PYHTONでFX自動売買を作る方法

PYTHONで自動売買を作るために主に使われるのは、「if・where構文」の2つです。

if構文は主にどういったときにポジションを取るのかを決めるときに使います。

例えば、レートが100円を超えた時・利益確定をしたい時などです。

PYTHONの場合はこれをメインに作り上げていくことになるでしょう。

where構文は主にif構文で作った命令を繰り返すために使用します。

しかし、あくまでもこれはプログラミング入門レベルの知識です。

実際は、より高度な専門的な知識を持ってFXの自動売買システムを作成することになります。

OANDAAPIとPYTHONを使ってFX自動売買システムを実際に構築

この項目では、OANDAAPIとPYTHONを使って実際にFX自動売買システムを構築する方法を解説していきます。

Curl(プログラミング言語の一種)を使って、OANDA APIのテストが完了したら、実際にPYTHONを使ってプログラミングしていきます。

その手順ですが、一例として次のようになります。

  1. 為替レートの取得
  2. AI部分をプログラミング
  3. 製作したAI部分の比較検証

為替レートの取得

・request
curl -X GET "https://api-sandbox.oanda.com/v1/candles?instrument=EUR_USD&count=100&candleFormat=midpoint&granularity=D&dailyAlignment=0&alignmentTimezone=America%2FNew_York"
・response
{
    "instrument" : "EUR_USD",
    "granularity" : "D",
    "candles" : [
        {
            "time" : "2020-02-10T04:00:00.000000Z",
            "openMid" : 1.24121,
            "highMid" : 1.241535,
            "lowMid" : 1.240145,
            "closeMid" : 1.24113,
            "volume" : 24144,
            "complete" : true
        }
    ]
}
・レート取得pythonコード
base_domain = MODE.get('production')
url_base = 'https://{}/v1/candles?'.format(base_domain)
url = url_base + 'instrument={}&'.format(currency_pair.name) + \
    'count=5000&' +\
    'candleFormat=midpoint&' +\
    'granularity={}&'.format(granularity.name) +\
    'dailyAlignment=0&' +\
    'alignmentTimezone=Asia%2FTokyo&' +\
    'start={}T00%3A00%3A00Z'.format(start)

response = requests_api(url)

def requests_api(url, payload=None):
    auth = 'Bearer {}'.format(get_password('OandaRestAPIToken'))
    headers = {'Accept-Encoding': 'identity, deflate, compress, gzip',
               'Accept': '*/*', 'User-Agent': 'python-requests/1.2.0',
               'Content-type': 'application/json; charset=utf-8',
               'Authorization': auth}
    if payload:
        requests.adapters.DEFAULT_RETRIES = 2
        response = requests.post(url, headers=headers, data=payload, timeout=10)
    else:
        requests.adapters.DEFAULT_RETRIES = 2
        response = requests.get(url, headers=headers, timeout=10)
    print 'REQUEST_API: {}'.format(url)
    return response

AI部分の製作

次に実際に簡単なAI部分を作っていきます。

ストラテジーと稼働条件は次の通りです。

【ストラテジー】

  • 現在レートと24時間平均レートを比較します。
  • 30pip以上の乖離がある場合、順張り。
  • 利確と損切りを30pipで設定して自動売買を実施。

【稼働条件】

  • 通貨ペア:USD/JPY
  • 現在時刻: 2020年02月10日 10:00:00
  • 現在レート: 109.81円
  • 24時間平均レート: 109.715円
  • 購入通貨単位: 100
  • 注文内容: 109円で100単位BUY、利益確定は110.30円、損切りは109.75円
・code
# -*- coding: utf-8 -*-
import datetime
from enum import Enum


class OrderType(Enum):
    Buy = 1
    Wait = 0
    Sell = -1


class Rate(object):
    start_at = datetime.datetime(2020, 02, 1, 10, 0, 0)
    bid = float(109.81)
    h24 = float(109.715)
    base_tick = float(0.01)

    @classmethod
    def get(cls, currency=None, start_at=None):
        return Rate()

    def get_rate(self, tick, is_add):
        if is_add:
            return self.bid + float(tick * self.base_tick)
        else:
            return self.bid - float(tick * self.base_tick)


class AIOrder(object):
    def __init__(self, order_type, limit, stop_limit):
        self.order_type = order_type
        self.limit = limit
        self.stop_limit = stop_limit


class AI(object):
    DIFF = 30
    LIMIT = 30
    STOP_LIMIT = 30

    def __init__(self, rate):
        self.rate = rate

    def order(self):
        """
        発注する。
        """
        if self._can_order():
            order(self._get_order())

    def _can_order(self):
        """
        発注可能か返却
        rtype: bool
        """
        point = (self.rate.bid - self.rate.h24) / self.rate.base_tick
        return int(point / self.DIFF) not in [0]

    def _get_order(self):
        """
        発注クラスを返却
        rtype: AIOrder
        """
        limit_rate = self.rate.get_rate(AI.LIMIT, True)
        stop_limit_rate = self.rate.get_rate(AI.STOP_LIMIT, False)
        return AIOrder(self._get_order_type(), limit_rate, stop_limit_rate)

    def _get_order_type(self):
        if self.rate.bid > self.rate.h24:
            return OrderType.Buy
        if self.rate.h24 > self.rate.bid:
            return OrderType.Sell
        return OrderType.Wait


def order(ai_order):
    _base = "OrderDone:{}, Limit:{}, Stop-Limit:{}"
    print _base.format(ai_order.order_type,
                       ai_order.limit,
                       ai_order.stop_limit)

# レート取得
rate = Rate.get(currency='USDJPY', start_at=datetime.datetime.now())

# AI生成
ai = AI(rate)

# 発注
ai.order()

>>> OrderDone:True, Limit:110.30, Stop-Limit:109.75
関連記事

AIを搭載した自動売買って本当にあるのか知りたい。 AI搭載の自動売買ってどのくらい稼げるのか知りたい。 この記事では、上記のお悩みが解決する記事となっています。 最近よく見かける「AI搭載のFX自動売買ツ[…]

製作したAI部分の比較検証

実際に制作したAIが、優秀なAIかどうかを検証する必要があります。

他優秀なEAのストラテジーを元に比較検証を行います。

上記で製作したAIについては、5分足でバックテストをとりました。

そして、他EAの精度から優秀なAIを次の通り定義します。

  1. 過去10年間で取引回数が100回以上
  2. 過去10年間で利益が100万円以上
  3. 過去10年間で最大損失が50万円以下

この中でも、③のドローダウンが、最重要です。

放置が基本のFX自動売買システムにおいて、儲かるけど、損失も大きいタイプのプログラムは好まれません。

関連記事

FX自動売買のドローダウンとは一体どのようなものか? ドローダウンを見る事で、何がわかるのか? ドローダウンが大きい場合、どのような対策ができるか? この記事を最後までご覧頂くことで、上記の点について詳しく[…]

FX自動売買PYTHONでの作り方のまとめ

いかがだったでしょうか?

今回、FX自動売買におけるPYTHONでの作り方をご紹介しました。

かなり高度なレベルの内容だったかと思います。

今回解説したように、実際にFX自動売買システムを一から構築するとなると大変手間です。

なので、あらかじめ実績のあるEAを使う方がよっぽど効率よく稼げます。

なお、そんな既に実績のあるFX自動売買ソフトの情報は僕のLINE@で既に公開しています。

気になる方はどんなものかチェックしてみてください。

はたけFX公式LINE@参加者限定!!

現在、僕の公式LINE@では、
"リアルタイムの相場"で
利益を出し続けている

勝率の高いEA情報

大公開しております。

  • 使おうとしているツールが現在の相場で稼げるかどうか不安…。
  • 本当に勝てるEAが欲しい…。
  • 本当に稼げるか確認した上でEA運用を始めたい…。

このようなことでお悩みの方の為に、
毎月きちんと利益を出しているツールのテスト結果 もしっかりと公開しております!

以下のボタンよりご登録ください。

\おすすめの自動売買ツールをご紹介/

最新情報をチェックしよう!