OANDA APIで注文を出そう! – Python言語に触れよう⑤

FX自動売買

FXは借金背負って身を滅ぼすからやめろと言われながらも始めました。
皆さんこんにちは。楽して自動トレードで金を稼ぎたいchibamaxです。

今回はOANDAデモ口座で注文に必要な資金管理をさせようというテーマです。

チャートを取得できても売買ができなきゃ意味ないわよね。

いえ、チャートを取得することもとても大事なことですよ!

何よりもそのためのコードを覚えることが重要です。

それでは今回から注文するためのコードを紹介していきます。

★前回記事

ロット数の計算しよう

注文するためにはまず必要となる証拠金を計算する必要があります。

取引する単位は1通貨(ドルなら1ドル)=1lotと言います。
取引所の多くは最低取引単位が1万通貨となっていますが、OANDA fxtradeコースでは1通貨単位で発注できます。

1lot注文するのに必要な証拠金を求める計算式

通貨レート / レバレッジ(25倍固定)

つまりドルの価格が100円の場合、1ドルを取引するのに必要な証拠金は”100/25=4円”ということになります。

デモ口座には300万円入っているので次に300万円の最大注文数を計算してみます。

最大注文数を求める計算式

証拠金(300万円)*レバレッジ(25倍)/ 通貨レート

同じくドルを100円とすると、75万通貨のドルを取引することができます。
※デモ口座では1回の最大発注数量は25万通貨となっています。(プロコースは300万通貨)

注文を出すには証拠金の計算が必要になるのね。

取引数に応じた利益と損失

取引数量に応じて利益と損失が変わってきます。
(今回はスプレッドは考慮しないものとします)

FXでは値幅にpipsという単位を使います(円建ての場合、1pips=0.01円)
ドル円の場合、100.00→100.01になった場合1pips動いたということになります。

仮にドル円の取引を行い、100.00円で1万通貨買いで注文したとします。

その場合、100万円分のドルを買ったのと同等になります。

もしその後101.00円に上がった場合、ドルの価値が101万円分にあがったことになり1万円の利益を受け取ることができます。1万通貨の1pipsあたりの利益は100円となります。
当然ながら99.00円に下がれば、1万円の損失となります。

ドル円の場合、1lotで1pipsあたり0.01円の損益となるのね。

強制ロスカット

FXが大損する、借金すると言われている原因なのが強制ロスカットですね。

OANDAの場合、保有しているポジションの含み損が増え、有効証拠金が必要証拠金を割り込んでしまった場合に、ポジションが強制的に決済されるというシステムです。

有効証拠金の計算

口座残高10万円・ドル円を100円で1万lot買いポジションを持っているとします。(必要証拠金:4万)

・101円に上がった場合の有効証拠金

口座残高(10万)+含み益(1万)=11万円

・99円に下がった場合の有効証拠金

口座残高(10万)+含み損(-1万)=9万円

含み益が出ている場合は強制ロスカットされることはありませんが、もしドル円が93.99円まで下がった場合、有効証拠金は39,999円となってしまい、必要証拠金4万円に割り込む形となり強制的に売り注文が入ることになります。

FXは利益は無限、損失は有限なので注意が必要なのです。

自動売買してて強制ロスカットされてたなんてないように計算させる必要があるのね。

Pythonで最大注文数を計算しよう

実際の取引ではリアルタイムで価格は変動していきます。
一々電卓で計算して注文数を算出していたら時間がかかってしまいます。

計算は全てプログラムに任せることによってミスしない上、瞬時に結果を出すことができます。

先程の計算式を元に必要証拠金と最大注文数を求める計算式をコードにします。

balance = 証拠金
lot = 注文数
levarage = 25
rate = 取得した最新レート

margin = rate * lot / levarage #必要証拠金
ablelot = balance * levarage / rate #最大注文数

しかしながらこれでは実用的とは言えません。

証拠金やレートはOANDAから取得することができますので即利用可能なコードを紹介します。

from oandapyV20 import API
import oandapyV20.endpoints.instruments as instruments
import oandapyV20.endpoints.accounts as accounts #アカウント情報取得
import requests

#アクセストークンと口座ID
accountID = ""
access_token = ""

#デモ用へ接続
api = API(access_token=access_token, environment="practice")

#チャート取得パラメータ
params = {
    "alignmentTimezone": "Japan",
    "count": 100,
    "granularity": "H1"
}

#チャート取得
pair = "USD_JPY"
r = instruments.InstrumentsCandles(instrument=pair, params=params)
api.request(r)

close = []
for i in r.response['candles']:
    close.append(i['mid']['c'])

rate = float(close[-1])

#証拠金取得
acc = accounts.AccountSummary(accountID)
api.request(acc)
balance = float(acc.response['account']['balance'])

lot = 100000 #注文数
levarage = 25

margin = rate * lot / levarage #必要証拠金
able_lot = balance * levarage / rate #最大注文数

print("注文数:{} lot".format( lot ))
print("証拠金:{} 円".format( balance ))
print("{}レート:{}".format( pair, rate ))
print("注文ロット:{} lot".format( lot ))
print("必要証拠金:{} 円".format( int(rate * lot / levarage) ))
print("最大注文数:{} lot".format( int( able_lot ) ))
print("強制ロスカット幅:{} 円".format( round((balance - margin) / lot ,3)) )
print("買いロスカット:{} 円".format( rate - int((balance - margin) / lot) ))
print("売りロスカット:{} 円".format( rate + int((balance - margin) / lot) ))

lot = 100000(10万通貨)で実行すると、

注文数計算結果

上記の結果が瞬時に出力されます。

Pythonで注文数の計算を行うことによってミスなく一瞬で結果が出力されるのね。

まとめ

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

強制ロスカットされてしまうFXにおいて大事なのは資金管理となります。
人力で資金管理をすることも可能ですが、人間とコンピューターでは計算速度が段違いとなります。(というか比較になりません)
Pythonを用いてプログラムに演算を行わせることにより、短時間で適切な資金管理をすることが可能になります。

にほんブログ村 投資ブログへ
投資の素晴らしさを皆さんに知ってもらいたいので、ブログ村の応援クリックよろしくお願い致します。

コメント

タイトルとURLをコピーしました