Multi_Lot_Scalperの解読2

Multi_Lot_Scalperの解読2


今回は、前回のMulti Lot ScalperというEAのコードの解読の続きです。

ダウンロード元はこちら↓
http://codebase.mql4.com/en/619


でわ、早速見ていきましょう!

//----
if(PreviousOpenOrders > OpenOrders)
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
if(mode == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue);
//----
if(mode == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Red);
return(0);
}
}
PreviousOpenOrders = OpenOrders;

です。内容は

もし PreviousOpenOrders が OpenOrders より大きい場合、
cnt が所持ポジション数の数値から0以上の間は{}内を行い1を引くというのを繰り返す。

インデックスcntのポジションを選択。
mode にそのポジションのオーダータイプ(この場合成行き売りor成行き買い)を代入。
もし、そのポジションの通過ペアと現在のチャートの通貨ペアが同じ時、
もし、mode が OP_BUY ならば、手仕舞い。(矢印は青色)
もし、mode が OP_SELL ならば、手仕舞い。(矢印は赤色)
終了。

PreviousOpenOrders に OpenOrders の値を代入。


といった感じです。

最後の PreviousOpenOrders = OpenOrders; で記憶用変数 PreviousOpenOrders には
現在のポジション数が代入されていますが、
その手前までは変数名どおり記憶されている「以前のポジション数」ということになりますね。

なので、何らかの形(利食いや損切り、手仕舞いなど)でポジション数が減った時は、
PreviousOpenOrders > OpenOrders の条件に当てはまりますね。

そして、インデックスの大きい方から選択して、同じ通貨ペアがあったら手仕舞いして終了。
(実際はインデックスは0から割り当てられているので、インデックス OrdersTotal()-1 というものから実行されます)

ここで、mode を使ってオーダータイプを振り分けているのは
手仕舞いの矢印の色を区別したいからですね^^;
変数 mode の宣言を見て分かるように、 OP_BUY や OP_SELL は人には文字列のようにみえますが、
コンピュータ(MT4)は0や1といったように整数として認識しています。

ここで、一つのポジションが手仕舞いされたら return(0); によって
一旦、 int start の実行は終了です。

また、新たにint start が実行された時、同じ通貨ペアがあった場合はここでまた手仕舞いです。
これを同じ通貨ペアが無くなるまで繰り返すわけですね!

そして、同じ通貨ペアが無くなって PreviousOpenOrders = OpenOrders; までたどり着きます。
この繰り返しの後は PreviousOpenOrders , OpenOrders ともに0となるわけです。


でわ、次を見てみましょう!


//----
if(OpenOrders >= MaxTrades)
ContinueOpening = False;
else
ContinueOpening = True;


です。内容は

もし、OpenOrders が MaxTrades 以上の場合、
ContinueOpening に False を代入。
そうでない場合、
ContinueOpening に True を代入。


です。
ポジションの数を見て、追加エントリー可能かどうかを ContinueOpening に教えてあげてる感じですね。


次を見ましょうか。


//----
if(LastPrice == 0)
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
LastPrice = OrderOpenPrice();
//----
if(mode == OP_BUY)
myOrderType = 2;
//----
if(mode == OP_SELL)
myOrderType = 1;
}
}

です。内容は

もし LastPrice が0の場合、
cnt が0から OrdersTotal() より小さい間、{}を実行し cnt に1を足すということを繰り返す。

インデックス cnt のポジションを選択し、
mode に オーダータイプを代入。
もしその通貨ペアがチャートの通貨ペアと同じなら、
LastPrice に選択されたポジションのエントリー値を代入。
もし mode が OP_BUY なら、 myOrderType に2を代入。
もし mode が OP_SELL なら、 myOrderType に1を代入。


といった感じです。

ここでは、インデックス0のものから、 LastPrice , myOrderType に数値を代入しますが、
更に次のインデックスのものがある場合は、数値を上書きする感じですね。
そして、最後にエントリーしたポジションのデータを残す感じです。

これは、cnt を OrdersTotal()-1 からはじめて、通貨ペア確認のif文の閉じカッコの前で、
break;(←繰り返し終了の命令文)と入力しても同じですね。


次いってみましょう!


//----
if(OpenOrders < 1)
{
myOrderType = 3;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) >
iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 2;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) <
iMACD(NULL,0,14,26,9,PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 1;
//----
if(ReverseCondition == 1)
if(myOrderType == 1)
myOrderType = 2;
else
if(myOrderType == 2)
myOrderType=1;
}

です。内容は

もし、OpenOrders が1より小さい(0の)場合、

一旦、 myOrderType に3を代入。
もし、現在のMACD(14,26)が一つ前のバーのMACD(14,26)より大きい時は、
myOrderType に2を代入。
もし、現在のMACD(14,26)が一つ前のバーのMACD(14,26)より小さい時は、
myOrderType に2を代入。
もし、ReverseCondition が1の場合で、
もしmyOrderType が1のとき、myOrderType に2を代入。
その他の場合で
もしmyOrderType が2のとき、myOrderType に1を代入。


という感じです。

先ほどは、持っているポジションのうち最後にエントリーしたもので myOrderType を決定しましたが、
今回は、ポジション無しの場合の myOrderType 決定方法ですね。

myOrderType はMACDが上向きなら2、下向きなら1、
また ReverseCondition が1の時はその逆にする、といった感じです。

またまた重要っぽい変数が出てきましたね! LastPrice , myOrderType も戦略材料っぽいですね!


ワクワクしてきたところですが、今回はこの辺で。

次回もこの続きです。


応援お願いいたします!
→FXシステムトレード派
→rank応援クリック
→人気ブログランキング


ps

メルマガ第1号は今月15日朝発行です!

タグ

2008年1月13日|コメント (6)

カテゴリー:EAの作成方法

コメント (6)

いつも拝見させて頂いてます。この度、リンクを貼らさせて頂きました。これからもがんばってくださいね。

投稿者:Sleepy |2008年1月14日 01:18

 はじめまして、三輪啓二と申します。

貴サイトをいつも拝見させていただき非常に勉強になっております。
誠にありがとうございます。
とてもページ数が多くて、内容も充実しているすばらしいサイトですね。


できれば弊社のブログで貴殿を紹介させていただきたいとと思いますのでよろしくお願いいたします。

弊社のURLは
http://e-fx1.sblo.jp 
です。
 少しでもお近づきになれたらと思いますので、もしお気持ちがございましたら
info@systemfx1.com
までご連絡いただけますと幸いです。


もし、リンクに関してご要望とかございましたら、お気軽にお申し付け下さい。

当サイトは、世界最高峰の投資サービスを提供しております。


貴サイトの今後のご発展をお祈りいたします。
突然で失礼たしました。


G.O.D Company
HP担当:三輪啓二

投稿者:三輪啓二 |2008年1月14日 12:31

慶次さんこんにちわ!
メルマガ登録させていただきました、楽しみにしております(^-^)V 

たま

投稿者:たま |2008年1月14日 14:07

>Sleepyさん
リンクありがとうございます!

>三輪啓二さん
こちらこそよろしくお願いいたします。是非紹介してください!

>たまさん
こんにちわ!
登録ありがとうございます!
メルマガの内容とかの要望などがあったら教えてくださいね!

投稿者:慶次 |2008年1月14日 17:31

こんにちは!
最近MetaTrader4の勉強をしており、貴サイトのプログラム解析を参考にさせていただいております。
非常にわかりやすい説明で大変勉強になります。

勝手ながら私のブログにてリンクを貼らせて頂きました。
これからも更新を楽しみにしております。

投稿者:FX投機家 |2008年1月15日 15:20

FX投機家さん
こんにちわ。
紹介の記事まで書いていただいて光栄です。
私もリンク貼らせて頂きました!

これからもよろしくお願いいたします。

投稿者:慶次 |2008年1月15日 18:01

コメントを投稿する

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)






画像の中に見える文字を入力してください。

Captchaの認証で入力ミスがありますと、コメントが消えてしまいますのでご注意ください。
コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。