見出し画像

FXに財産突っ込みしている私の自作取引プログラム詳細ロジック解説

どうも、もってぃーです。
下記記事のとおり、FXでスリル満点生活を送っています。

今回は、私が使用している取引ロジックの詳細をフロー図やシミュレーションによる分析データも交えてご紹介させていただきやす。

私の取引手法概要

さて、さっそくですが、
私の手法はトラリピと呼ばれるものの亜種です。
トラリピというのは、マネースクエアさんが提供している自動売買の手法です。
そもそもトラリピを理解していないと後の話が見えてきません。
説明がめんどくさいので公式動画を見てください。

この概念自体はすごく昔からあるもので、要は「指定した範囲内で売買を繰り返す」というのを全自動で行ってくれるものです。

私はこの手法に「取引ロット自動最大化」「取引レンジ指定」「自動ハーフレンジ化」「ロスカットライン指定」といった機能を盛り込んだ独自プログラムを作成して運用しています。

自作プログラムのロジック

具体的な動作の説明です。
まずシステムに下記の情報を入力します。

  • 取引上限ライン

  • 取引下限ライン

  • 上ロスカットライン

  • 下ロスカットライン

  • 注文ステップ

  • 決済ステップ

  • ロスカットラインの証拠金維持率

取引上限ライン、取引下限ライン、上ロスカットライン、下ロスカットラインの挙動

イメージを図1に示します。
取引平均値を境に、ショート取引レンジとロング取引レンジを作ります。
取引はこのレンジの中でのみ行われます。

図1

注文ステップ、決済ステップの挙動

イメージを図2に示します。
文字通り注文の幅と決済の幅を決めるパラーメータです。
基本的に二つは同じ値に設定して使っているので今思えば分ける意味も特にありませんでした。

図2

ロスカット証拠金維持率の挙動

まず、私のシステムでは1注文あたりのロット数が自動計算されます。このロット数を計算するのに、このパラメータを使用しています。
分かりやすく、ロング取引レンジのみで考えましょう。

まずロスカット証拠金維持率というのは、「通貨価格が、下ロスカットラインに到達したときの証拠金維持率の目標値」です。
私の使っている口座では、証拠金維持率が20%を下回ると飛びますので、設定値を安全率を考慮して「100%」とします。
その場合、通貨価格が下ロスカットラインに到達したときに証拠金維持率が丁度100%になるように取引を調整しなければいけません。

証拠金維持率の求め方は下記のとおりです。

証拠金維持率 =(口座残高-含み損)/証拠金

上記のように、口座残高、含み損、証拠金のいずれかを操作できれば証拠金維持率を操作できます。
私は含み損を調整することで証拠金維持率を操作します。
含み損は下記式で求められます。

含み損益 = 保有ロット数 × 1ロットの通貨数 × 最大損失幅

1ロットの通貨数は口座の仕様として決まっており変更できません。
最大損失幅も図3の通り初期設定時に各種ラインを定めた段階で決まってしまうので、動的に変更はできません。

図3

ですので、最後に残った「保有ロット数」を操作することで、間接的に証拠金維持率を操作します。

保有ロット数は下記の式です。

保有ロット数 = (取引平均ライン-取引下限ライン)/取引ステップ * 1注文のロット数

上記より、最終的に1注文のロット数調整することで、証拠金維持率を所定の値で維持します。

全体フロー図

プログラムを書く上で、概略的なフロー図を図4に示します。
参考までにどうぞ。

図4


各ラインの設定値とその根拠

前述した「上ロスカットライン」と「下ロスカットライン」は過去チャートを見ながら大いなるセンスと勘で決めるしかありませんが、「取引上限ライン」と「取引下限ライン」は分析で目安を出せると考えました。

分析の考え方を整理します。
まず各種設定値について、「うまく設定できている状態」というのは、「取引上限から取引下限の幅の中に、通貨のレンジ相場がスッポリ収まる状態」です。この時一番利益が高くなります。

では「どの価格帯でレンジ相場が発生しうるのか」を過去のデータから算出する必要があります。

これには最頻値(mode)という概念を使いました。
要は「過去チャートで、とある通貨価格の出現回数を数え、それをランキングにしましょう」という事です。
ランキング1位がレンジ相場の中心であり、そこから一定の幅を持たせたところに取引上限および取引下限を設定するのが良いと考えました。

という事で、2015年1月1日から2024年3月1日までのデータを取得。
中身を確認すると807万行もありやがったので、100万行までしか処理できないエクセルでは開けませんでしたorz

仕方ないので伝家の宝刀pythonとpandasで演算します。

import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv(Path("C:\code\datas\code\data.csv"),sep="\t")

#必要な列のみ抽出
df = df[[ '<OPEN>', '<HIGH>', '<LOW>', '<CLOSE>']]
df.columns = [ 'Open', 'High', 'Low', 'Close']

#小数点第三位で四捨五入
df_rounded = df.round(3)

#各種列をユニオン結合
df_melted = df.melt(var_name='variable', value_name='value')
df_melted = df_melted.drop('variable', axis=1)

#最頻値を計算
mode = df_melted['value'].mode()

そいでヒストグラムだしたのが図5です。

図5

一番頻出するのは1.08弱の赤線の部分、ここを中心として左右に幅を持とうと思ったのですが、1.04強らへんに二つ目の山があります。
ここをカバーするように緑のラインを引き、下側1.04、上側1.09ぐらいのレンジが頻出度が高い(レンジ相場になる可能性が高い)と判断しました。(図6)

という事で、設定は下記の内容で行きたいと思います。
上ロスカットライン=1.155
取引上限ライン=1.09
取引下限ライン=1.04
下ロスカットライン=0.99
注文ステップ=0.001
決済ステップ=0.001
ロスカットラインの証拠金維持率=100

図6

システム構成

実際に書いたプログラムをどのように動かしているのかという概念図は図7のとおりです。

図7

バーチャルデスクトップとは、簡単に言えばインターネット上に仮想パソコンを作るサービスです。
そこでMT5と呼ばれるFX取引ソフトを起動させ、今回プログラミングした自作ソフトを実行しています。

バーチャルデスクトップは自宅のパソコンからVPNで遠隔接続して操作することが出来ます。

「ぞんなの自分のパソコンでMT5動かしたらええやん」
と思うかもしれませんが、MT5は24時間動かしっぱなしです。
パソコンがフリーズしたり、停電したりすると、その間取引が出来なくなって怖いので、お金を払って価格.comさんのバーチャルデスクトップをお借りしています。

最後に

このプログラムは不具合や改良点があり次第どんどん改善していきます。
ご質問等ありましたらお気軽にお問い合わせください。

改正来歴

2024/1/1

・プログラム作成、運用開始しました

2024/2/24

・「ロスカットライン設定」を入力できるようにしました。
・「ロスカットライン証拠金維持率設定」を入力できるようになりました。
・システムは、「ロスカットライン設定」に通貨価格が到達したとき、「ロスカットライン証拠金維持率設定」の値になるように、取引のロット数を自動算出するようになりました。

2024/3/10

・システム構成を記載しました。

この記事が気に入ったらサポートをしてみませんか?