システムトレード

[EasyLanguageでシステムトレード]OrderTicketを使って売買注文を出してみよう

EasyLanguage OrderTicket

前回[EasyLanguageでシステムトレード]Timer機能を使って一定時間ごとにプログラムを実行しようで、一定間隔ごとに実行されるプログラムを作成しました。

今回は、オブジェクト指向による売買注文の出し方を学んでいきたいと思います。

以前、「Buy」文や「Sell」文で注文を出したことがありました。そして、バックテストをしました。

そのときは、チャートに表示されている銘柄に対してのみ売買注文がされるものでした。

今回紹介するのは、銘柄を指定すればチャートに表示されていなくても売買注文ができる「OrderTicket」というコンポーネントを紹介します。

マネックス証券のマニュアルの例題10をもとに話を進めます。(マニュアルが手元に無くても大丈夫ですが、あった方が良いかと思います)

注意!!今回のプログラムを適用すると、成行注文が出されます。実際に適用する際には、十分注意してください。

タートル 投資手法 バックテスト
この結果を見てもまだシステムトレードしないのか【タートル流投資手法の驚くべきバックテスト結果】タートルが取ったとされる投資手法をプログラム化して、バックテストを行いました。その結果としては、かなりのリターンが期待できるものでした。トレンドフォローの投資手法は、まだまだ現役であるようです。...

目次

OrderTicketコンポーネントを追加しよう

例題10(OrderTicket)

いつものように、EasyLanguage開発環境を開いて、「インジケーター」を新規作成してください。

「ツールボックス」から「OrderTicket」をダブルクリックして、「OrderTicket1」コンポーネントを追加します。

OrderTicketのプロパティを設定しよう

例題10(OrderTicket)

プロパティの設定をしましょう。

「OrderTicket1」が選ばれていることを確認して、「Account」を選択して「入力」をクリックしてください。

そうすると、自動でプログラムが挿入されるので、マネックス証券の口座番号を入れましょう。

本プログラムは、成行注文が出されます。実口座をいれると、取引されるので注意してください。

パンダはし
パンダはし
今のところ仮想口座のようなものはないみたい。早く導入してほしいなー。

次に、プロパティの「Quantity」も先ほどと同様にinput文にします。つまり、「入力」をクリックして、プログラムに自動挿入してください。

このときの、「100」という数字は、一度に100株の注文を出しますよという意味です。

例題10(OrderTicket)

イベントハンドラの設定をしよう

例題10(OrderTicket)

前回、Timerによるイベントハンドラを設定しましたが、今回はまた別のイベントハンドラを設定します。

プロパティから「AnalysisTechnique」を選択してください。

「イベント」をクリックすると、「Initialized」の「Value」が空欄なのが確認できます。

その空欄部でダブルクリックすると、プログラムが自動で書き込まれます。

これは、このインジケーターが適用されたとき(チャートに表示されたとき)に一度だけ実行されるメソッドです。

後に解説しますが、今回は、このメソッドを使って、注文が一度しか出されないようにコントロールしています。

OrderTicketプログラムの解説

ここからは、今回のOrderTicketプログラムの解説をします。

以降の○○行目は、プログラムの行数で、空欄行を除いた行数としています。

例題10(OrderTicket)

1~4行目 変数の宣言

1~4行目までは、変数の宣言をしています。1,2行目はすでに自動で入っていると思います。

変数宣言で「intrabarpersist」とありますが、これは、ティックを受け取る毎に値を更新するという変数を宣言できるものです。

後で出てきますが、一度しか注文を出さないために設定している変数なので、注文が出た瞬間に反応してくれないと、注文を出した足が終わるまで、何度も注文を出してしまうことになります。

doubleは、実数(小数点以下も含む)の変数宣言ですね。

5~11行目 イベントハンドラ

先ほど自動で入力したイベントの中身について解説します。

7行目で、銘柄を指定しています。ここでは、「Category」となっています。これは、チャート上に表示されている銘柄となります。

ここを任意の銘柄コードにすれば、その銘柄に対して注文を出せます。

8行目では、口座区分を指定しています。1行目で入力した口座番号の口座区分が、現物口座なら「Cash」とします。

パンダはし
パンダはし
Cashが現物口座、StandardMarginが制度信用口座、NegotiatedMarginが一般信用口座だよ

9行目では、税区分について示しています。

ここでは、「NonTokutei」としており、一般口座を表しています。

パンダはし
パンダはし
NonTokuteiが一般口座で、Tokuteiが特定口座だよ。これはなぜかローマ字で分かりやすいね

10行目では、一度切りしか注文をしないようにするため、このインジケーターを適用したときだけ実行する、イベントメソッド内で、「AllowTradeFlag」に「OrderActive」(True)を代入しています。

「AllowTradeFlag」は変数宣言のときにTrueとしているので、意味無いようにも思えますが、input文として別途「OrderActive」を設定することで、取引しないようにチャート上で変更できるようにするため、10行目があります。

また、「AllowTradeFlag」は、intrabarpersistで宣言したいので、input文としては書けないということになります。

12~17行目 PlotValuesメソッド

例題10(OrderTicket)

このメソッドは、注文を出すときに使う指数をプロットするメソッドです。

HiTargetとLoTargetとAllowTradeFlagを描画しています。

AllowTradeFlagは真か偽の条件をいれているだけなので、それを文字として表示するには、「tostring」をつける必要があります。

18~20行目 指数の定義とプロット

HiTargetは現在の足から3つ前までの足の内、最高値となります。

逆に、LoTargetは、現在の足から3つ前までの足の内、最安値となります。

いずれも、[ 1 ]があるので、現在の足は含みません。

20行目では、先ほど定義した「PlotValuesメソッド」を呼び出して、プロットしています。

21〜25行目 売買注文を出す

いよいよ、売買注文を出すプログラムです。

21行目で条件文(if文)があり、「足の終値がLoTarget以下」または「足の終値がHiTarget以上」の場合、かつ、「現在の足が最新の足」かつ、「AllowTradeFlagが真(True)」のとき、if文の中身を実行します。

条件が多いですが、慎重に見ていけば、理解できると思います。

そして、23行目でOrderTicket1の内容で、注文を出しています(Send)。

さらに、24行目で、AllowTradeFlagをFalseにすることで、注文は一度しか出さないようにしています。

ただし、このインジケーターを再度適用したときは、AllowTradeFlagがTrueになるので(イベントハンドラより)、再度注文が出されます。

注文の種類の設定方法

例題10(OrderTicket)

プログラムの中で、注文を出しましたが、注文とはどういった注文でしょうか。買い注文なのか売り注文なのか。。

マニュアルにはそこまで書かれていませんが、初期設定では、買い注文になっています。

もしこれを変えたい場合は、「OrderTicket1」のプロパティの「Action」を変えれば変更できます。

Buyにすると買い注文、Sellにすると売り注文など変更できます。

また、これをプログラム上で指定もできますので、条件文を設定して、こうなったときは買い注文、こうなったときは売り注文など、変更することができます。

パンダはし
パンダはし
BuytoCoverが買い戻し、SellShortが空売りだよ

インジケーターの設定

例題10(OrderTicket)

チャートにインジケーターを適用したら、「インジケーターの設定」より、「注文発注オブジェクトを有効にする」にチェックを入れてください。

こうすることで、自動売買が可能になります。

パンダはし
パンダはし
『インジケーターの設定』ウィンドウの出し方は、過去記事『作成したストラテジーでバックテストをしてみよう』の途中に書いてあるよ

プログラムコード

以下にプログラムコードを載せておきますのでコピーしてお使いください。

Input: string iAccount1( "111-12345" );

Input: int iQuantity1( 100 );

Input: OrderActive(True);
Vars: double HiTarget(0), double LoTarget(0), intrabarpersist AllowTradeFlag(True);


method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args ) 
begin
	orderticket1.SymbolType = Category;
	orderticket1.ExtendedProperties.SetItem("FundSource", "Cash");
	orderticket1.ExtendedProperties.SetItem("TaxationMethod", "NonTokutei");
	AllowTradeFlag = OrderActive;
end;

Method void PlotValues() 
begin
	Plot1(HiTarget, "High Target");
	plot2(LoTarget,"Low Target");
	plot3(AllowTradeFlag.tostring(),"Active");
end;

HiTarget = HighestFC(High, 3)[ 1 ];
LoTarget = LowestFC(Low, 3)[ 1 ];

plotvalues();

If ( ( Close <= LoTarget OR Close >= HiTarget ) AND (LastBarOnChart and AllowTradeFlag) ) then 
begin
	orderticket1.send(); // send order
	AllowTradeFlag = False; // set one trade only safety flag
end;

 

さいごに

OrderTicketコンポーネントにて、売買注文を出す方法を紹介しましたが、いかがでしたでしょうか。

以前解説したBuyやSell文と違って、設定する内容が多かったと思います。

ですが、それだけ細かく指定できるということは、自分の思った通りの取引に、さらに近づけるということになります。

最後に注意点としては、バックテストができないという点です。

Buy文などは、チャートに適用して、バックテストができましたが、OrderTicketが、あくまでインジケーターということもあり、バックテストができません。

パンダはし
パンダはし
新しい取引ルールを思い付いたら、まずはストラテジーとしてBuyやSell文で書いてバックテストしよう

もうすぐで、EasyLanguageによるシステムトレードのオブジェクト指向の基礎がだいたい終わります。あと少し、頑張りましょう!

次回は、利食いや損切りの注文の出し方を紹介します。

タートル 投資手法 バックテスト
この結果を見てもまだシステムトレードしないのか【タートル流投資手法の驚くべきバックテスト結果】タートルが取ったとされる投資手法をプログラム化して、バックテストを行いました。その結果としては、かなりのリターンが期待できるものでした。トレンドフォローの投資手法は、まだまだ現役であるようです。...

システムトレード過去記事一覧Next→利食いや損切りを設定しよう

Nocchi_nochilog(のっち)
少額投資をこよなく愛する1児のパパ&サラリーマン。
お小遣い制でも負けずに投資をしています。

知るだけで暮らしが豊かになる知識を発信中!
若いうちから投資することの重要性を伝えるべく、ブログの記事を更新しています。

特にインスタグラムでは、1日1分で自然とお金の知識が身につくような情報を発信しています。
ぜひ合わせてご覧ください!

下のアイコンから飛べます!
\ Follow me /

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です