自動売買エクセルファイルと注文用ファイルを接続する

投稿者: | 2016年6月7日

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

 

自動売買ファイルと発注ファイルの接続

 

では作成中のエクセルファイルに戻り、Shell関数を使用して売買サインが発生した際にUWSCが起動し注文を行う様接続していきます。

 

Shell関数は、指定のプログラムで指定のファイルを実行する関数と考えていただいて問題ありません。

 

内容は、「Shell(指定プログラム + 半角スペース + 指定ファイル)」となりますが、指定プログラムも指定ファイルもPCのどこにあるかから記述しなくてはなりません。

 

そのために、前述の保存されている場所が必要となってきます。

 

 

ここでは、「C:\UWSC」にUWSC本体とその5で作成したファイルがあると仮定して話を進めます。

 




まず、指定プログラムはUWSC本体のことですので、「UWSC.exe」が名前となりますが、PCのどこにあるかから記述しなくてはなりませんので、指定のプログラムは、「C:\UWSC\UWSC.exe」となります。

 

ファイルは、売買サインの方向によって買い用のBuy.UWS、売り用のSale.UWSのいずれかとなりますので、それによって変わってきます。買いの場合は、ファイル名はBuy.UWSとなりますが、これもPCのどこにあるかから記述しなくてはなりませんので、「C:\UWSC\Buy.UWS」となります。

 

場所を表す「C:\UWSC」をパス名というのですが、このパス名の最後に「\」(半角¥マーク)を付加し、その後にファイル名を記述することになります。

 

このままでは長いので、先に記述している「買いサインが発生した場合」、「売りサインが発生した場合」という条件分岐式の後に買用のファイル名、売用のファイル名を指定します。

但し、現在記述している条件分岐式はこれまでのポジションを決済するためのもので、「If Cells(gyou -1, 11) = 1」はこれまで買いポジションを持っているという事になります。

そのため、その条件分岐式に記述するのは、買い手仕舞い用のファイルですので、売りを行なうファイルとなります。

 

上記がそれぞれの条件分岐式ですが、これに買い手仕舞いのファイル名(=売り用)、売手仕舞い用のファイル名(=買い用)をそれぞれ「file_name」という変数に格納します。

買い手仕舞いの場合は、ファイル名は「Sale.UWS」ですので、filr_name = “Sale.UWS”、売り手仕舞いの場合は、filr_name = “Buy.UWS” とします。

 

ファイル名の指定が完了したら、次はプログラム名とパス名と指定を行います。

プログラム名は「UWSC.exe」で、パス名は「C:\UWSC」ですが、買いの場合も売りの場合もこの二つは共通ですのです。

更に、プログラム名は、パス名+プログラム名ですので、「C:\UWSC\UWSC.exe」と一括で指定できます。(パス名の後に「\」をお忘れなく。)

変数は、pr_nameとし、パス名とプログラム名を足し合わせた物を指定します。

pr_name = “C:\UWSC\UWSC.exe”

パス名は、path_nameという変数に、パス名の後に「\」を付加したものを指定します。

path_name = “C:\UWSC\”

これでShell関数を使用する準備が整いました。

 

 

 

Shell関数を実行し手仕舞いを実行

 

まずは、これまで記述している「仕掛けのサインが発生した場合に、これまでのポジションを手仕舞いする」という条件分岐式にて、Shell関数を実行し手仕舞いを行ないます。

前述の通りShell関数は、Shell(指定プログラム + 半角スペース + 指定ファイル)で実行されますので、現在指定プログラムはpr_nameに、指定ファイルの場所はpath_name、指定ファイル名はfilr_nameに入っていますので、Shell関数は、Shell(pr_name & ” ” & path_name & file_name) で実行されます。

 

これをエクセルファイルのプロシージャの中に追加し、これまで持っていたポジションを手仕舞いすることが出来ます。

但し、この状態ですと、ポジションを持っていないときにも手仕舞いを実行してしまいますので、上記Shellの実行を、ポジションがある場合にのみ実行するよう、条件分岐式を設定します。

ポジションの有無は、直前の行の11列(保有列)が0でない場合ですので、条件分岐式は If Cells(gyou – 1, 11) <> 0 となり、これを追記します。

追記する場所は、Shellの実行のみを抑制すればよいので、その直前に条件分岐式、直後に対応するEnd Ifを追加します。

 

上記にて、これまでもっていたポジションを手仕舞いすることが出来ますので、次は仕掛けの注文を行います。

 

 

仕掛けの注文を作成する

 

仕掛けの注文も上記と同様に、Shell関数によって実行すれば注文が行なわれますのが、売買サインが発生した際に、これまでポジションをもっているかどうかは関係ありませんので、上図の条件分岐式は必要ありません。

ですので、そのまま条件分岐式の中身にあるShellを追加します。

このとき、すぐに仕掛けのShellを実行してしまうと、直前の手仕舞いの実行中の可能性があり、UWSCがダブってしまうことがあります。そのため、それを回避する必要があり、手仕舞いのShellを実行したあと、数秒マクロを停止する必要が出てきます。

その部分を追加するのですが、方法は、
Application.Wait Now + TimeValue(“hh:mm:ss”)
のメソッドを使用します。

 

このメソッドは、マクロの実行を指定時間停止させることが出来ますので、手仕舞いのマクロが終了する15秒ほど、マクロの実行を停止させます。

挿入先は、手仕舞いのキーボードマクロを実行した直後です。

ポジションの有無の条件分岐式がありますが、その外に挿入してしまうと、手仕舞いするポジションが無い場合も停止してしまうため、その中に入れます。

 

これで、移動平均線のクロスが発生したら、これまでのポジションを決済し、新たなポジションを仕掛けることが出来ます。

 

では、FXCM(その5で作成した注文用ファイルに対応するシステム)にログインし、作成しているエクセルファイルの時刻等を設定の上、FXオンラインのDDEに接続してファイルの更新を開始してみましょう。

作成中のエクセルファイル起動の際に、外部データの更新を有効にせずに起動されている方は、エクセルの上部メニュー「ツール」の「オプション」内にある、「計算方法」の中にある、「リモート参照を更新する」にチャックを入れれば、起動時に外部更新を有効にしたことと同じことになりますので、そちらで設定されてください。

あとは、ファイルを実行させると自動でデータを読み込み、移動平均線の計算を行い、クロスが発生するとキーボードマクロが実行され、自動でFXCMやキーボードマクロに対応する注文システムへ注文を行います。

 

 

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

次のページ:チャート(グラフ)の表示範囲を動的に指定する