自動売買システムから注文用ファイルを起動する売買条件を設定

投稿者: | 2016年6月7日

5.自作した自動売買ファイルから取引システムへ注文する

 

自動売買システムから注文用ファイルを起動する売買条件を設定

 

これまで作成したファイルを開き、売買サインが発生した場合にここで作成したキーボードマクロを実行し、注文を行えるよう接続をしていきます。

 

では、これまでに作成したファイルを開きます。

 




「その4」までで下記の状態まで作成できているかと思います。

 

 

 

 

今回は接続を行いますので、シート自体に特に追加する記述はありません。

早速、Visual Basicの画面を開いてください。

売買サインが発生した際に、UWSCへの接続を行いますので、追加する記述は前回のレポートで作成した判断部分のモジュールになります。

これまでで作成した判断部分のモジュールは「Sub Handan()」という名前になっているかと思いますので、そのモジュールを開きます。

今回追加する処理は、売買サインが発生した際にUWSCと接続し、UWSCによって取引システムへの注文を実行するという内容ですが、前回作成した判断部分には、クロスの発生を監視し、発生した際には買いサイン、売りサイン、保有状態を書き込むものでした。

この書き込むための条件分岐式を利用して、買いサインが発生したこと、売りサインが発生したことを保持させ、その保持させた内容を基にUWSCへの接続を行います。

前回作成の判断部分は、下記条件分岐式によって行なわれていますので、まずは、そちらにフラッグ(サインの発生の有無を保持するための変数)を立てます。

上記式の上半分が買いサイン、した半分が売りサインですので、ここに買いサイン用のフラッグ、変数「flg_b」を設置し、買いサインが発生した場合は、このflg_bが1になるように設定します。

同様に、売りサイン発生の場合には、変数「flg_s」が1になるよう、フラッグを立てます。

 

これで、flg_bが1の時には、買いのキーボードマクロを、flg_sが1の時には売りのキーボードマクロを実行するように設定すれば良いのですが、その前に、現状のままでは5分足の更新中、クロスが発生すると、同じ足の更新を行なっている限り、毎回「買いサイン発生」のフラッグが立つことになります。

これは、特にその回避処理を行なっていないためのもので、現在のファイルを更新させ、足の更新途中で売買サインが発生した場合に、買値、売値も変わっていくことでお分かりいただけると思います。

 

サイン発生時の売値、買値の数値を固定する

 

そこで、まずは一度売買サインが発生したら、その後は次の行に移るまではそのクロスを無視するという処理が必要になります。

現在、サインの発生と同時に買値、売値を書き込むようになっていますので、その欄が白紙であれば、同一足内でサインが発生していないことになりますので、そのように設定します。

買値、売値が書き込まれるのは、9列目、10列目ですので、それぞれのクロスの判断の部分に、9列目が白紙なら、10列目が白紙ならという条件分岐式を追加します。

条件分岐式はそれぞれ、

If Cells(gyou, 9) = “” then

If Cells(gyou, 10) = “” then

となりますので、これらを買いの判断直前、売りの判断直前に追加します。

 

追加した条件に対応するEnd Ifもお忘れなく。

これで、現在更新中の足での買いサインの発生、売りサインの発生を一度ずつに設定できます。

では、早速実際に注文を行う部分を作成するのですが、この注文部分は売買サインが発生した際に実行すれば良いので、売買判断部分に、売買サインが発生したら注文部分を実行という処理を追加します。

処理としては、条件分岐式による「売買サイン発生時に『注文処理』というモジュールの実行」を行なえば良いので、先ほど立てたフラッグのいずれかが1の場合に注文処理を実行するように追加します。

条件分岐式は flg_b = 1 か、flg_s = 1の場合ですので、ORを使用して追加します。

この条件分岐式の中にUWSCへの接続を追加するのですが、現在作成中のプログラムは単純ドテン売買を行うものですので、実際には、売買の最初を除いて、常にポジションを保有していることになります。

そのため、買いサインが発生して、flg_bが1になった場合には、その時点まで売りポジションを持っているため、まずはそのポジションを決済し、買い仕掛けを行なうという作業が必要になります。

そこで、サインが発生した際に、現在保有中のポジション(発生したサインで仕掛けるポジションではなく、それまで保有しているポジション)を決済したあと、新規のポジションを仕掛けることになりますが、ドテン売買ですので、通常はこれから仕掛けようとするポジションの反対方向のポジションを持っていることになります。

UWSCでキーボードマクロの作成を行なったときにも掲載していますが、FXCMは両建てが出来ないため、買い保有中に売り仕掛けのサイン(デッドクロス)が発生した場合は、売り仕掛けを2回行い、1度目の売りしかけ処理で買いポジションの決済、2回目の売り仕掛けで売りポジションの作成を行なえば良いことになります。

そのため、先ほど追加した条件分岐式の中に更に条件分岐式を挿入し、ポジションの保有がある場合は、先に手仕舞いを行う様にします。

ポジションを保有しているかどうかは直前の足の「保有」の列を参照すればポジションの有無、どちらの方向に持っているかなどがわかりますので、その行を参照します。

そして、買のポジションを保有している場合は、まず売の実行にてこれまで保有しているポジションを解消し、売のポジションを保有している場合は、買の実行にて、保有しているポジションを解消します。

直前の足の「保有」列が1ならば買いのポジションを持っているということですので、Cells(gyou – 1, 11) = 1 なら、買いポジションを保有しているということになります。

同様に、Cells(gyou – 1, 11) = -1 なら、売りポジションを保有していることになりますので、それら条件分岐を先ほど追加した「売買サインが発生したら」という条件分岐式の中に書き込みます。

それぞれのこれまで保有していたポジションによって、まずはそのポジションの決済を行なわなくてはなりませんので、UWSCに接続します。

 

 

UWSCと自動売買システムを接続する。

 

UWSC(キーボードマクロ)への接続は、Shell関数を使用し、指定のプログラムで指定のファイルを実行するように記述します。

そのために必要になってくるのが、UWSC本体と最初に作成したキーボードマクロファイルの保存されている場所ですが、Shellでは日本語の文字列を扱えません。その5で作成したファイルがデスクトップ等にある場合は、ファイルの場所に日本語を含んでしまうため、それらをフォルダごとローカルディスク(C:)の中に移してしまいます。

(作成したファイルをローカルディスクC:の中に保存。UWSC本体と作成したファイルを同じフォルダに保存されているかと思います。)

移動させたら、前頁で作成したファイルが保存されているフォルダ(上記図内では「UWSC」というフォルダ)を開き、その上部に記載されている「アドレス」部分か、ファイル上で右クリックし、プロパティを開いて「場所」の内容を確認します。

(フォルダを開いて確認)

(プロパティを開いて確認)

画像の内容では、「C:\ UWSC」となっていますが、これは、ローカルディスクC:の中の「UWSC」というフォルダの中を指します。ここにUWSC本体とその5で作成したファイルがある状態です。

 

 

自動売買システムの作り方トップページへ

次のページ:自動売買エクセルファイルと注文用ファイルを接続する