本ブログは、MetaTrader を利用して、EA プログラムを自作紹介するサイトです。
決して儲かるシステムを紹介するものではありませんのであしからず・・・
もし、記事中に嘘偽りを発見された方、ご連絡頂けると幸いです。
なお、過去に作成した EA プログラムの作り方はこちらになります。

Loop_Entry : 同じ指値エントリーを繰り返し実行するプログラムです。
estTurn : 高値(安値)で反対売買を実行するプログラムです。

2009年2月11日水曜日

10 ポイント未満利益確定サンプルプログラム

では、実際に 利益確定を 10 ポイント未満で決済するプログラムを作ってみます。

作るプログラムのルールは、次のとおりです。

1. 有効なポジションならびに有効な注文がなければ指値買い注文する
2. 有効なポジションの取得価格より相場の売値が 5 ポイント高ければ決済する

といった感じで、あまり細かい条件をいれずにシンプルなものを作ってみます。

まず、1. についてですが、これは Loop_entry プログラムを作成した際に使ったものを利用し、次のように書きます。

//
//有効なポジションあるいは有効な注文があるかどうかを判定する
//
if (OrdersTotal()==0)
{
//
//有効なポジションならびに有効な注文が一つもないので指値買い注文する。
//
OrderSend(Symbol(),OP_BUYLIMIT,0.1,Bid,3,0,0,NULL,0,0,Green);
}
else
{
//
//ここに、2. の内容に沿ったプログラムを記載する
//
}

次に 2. についてですが、次のような判断をしながら決済することになります。

2.1. トレードプールからポジションを取得する
2.2. 取得したポジションが「有効なポジション」なのか「有効な注文」なのかを判断する
2.3. 有効なポジションであれば取得価格と相場を比較する
2.4. 5 ポイント以上の利益確定なら決済する

で、これをプログラムで書いてみると

//
//トレードポジションプールからポジションを取得する。
//
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);  '--- ①
//
//有効なポジションなのか有効な注文なのかチェックし、
//有効なポジションの場合のみ処理する。
//
if (OrderType()==OP_BUY) '--- ②
{
//
//有効なポジションの取得価格が相場の売値より5ポイント分
//上なのかどうか判断し、上の場合のみ決済する
//
if (OrderOpenPrice()+5*Point '--- ③
{
//
//相場の売値で決済する
//
OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
'--- ④⑤
}
}

ここでポイントとなるのは次のとおりです。

注文は必ず 1 つしかないので、OderSelect() でオーダー番号を 0 で取得している

有効なポジションの場合、ポジションのタイプ(取引種別)が "buy"(OP_BUY)になっているはずなので、OrderType() で取得したポジションのタイプを調べている

#指値買い注文で有効な注文の状態であれば、取得したポジションのタイプは "buylimit"(OP_BUYLIMIT)になっています。

有効なポジションの取得価格を OrderOpenPrice() で取得し、5 ポイント加算したものと相場の売値(Ask)で比較している

取得したポジションのチケット番号を OrderTicket() で取得し決済している

取得したポジションのロット数(取引数)を OrderLots() で取得し、決済取引数として指定している

これで、指値注文の際にひっかかる決済制限をクリアできました。

次回は、これを応用して、Loop_Entry を手直ししたいと思います。

0 件のコメント:

参考になりました? よろしければご協力ください。

にほんブログ村 為替ブログへ 人気ブログランキング【ブログの殿堂】