ここでは、Multi Lot ScalperというEAのコードを解読していきます。前回記事【Multi_Lot_Scalperの解読1】の続きからです。
ダウンロード元はこちら↓
https://www.mql5.com/en/code/9330
EAのコードを解読(続き)
では、早速続きを見ていきましょう!
1ティック1ポジ決済の全決済仕掛け
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に現在の保有ポジション数が代入されています。次のティックではPreviousOpenOrdersの値は、最後に保有ポジション数が代入された時の値となります。
それを踏まえて、このコードの上から見ていくと、
最後にポジション数が代入された時の値より現在ポジション数が少ない場合、 取引タブの下から順にポジションを選択していき、 EA稼働通貨ペアと同じ通貨ペアのポジションなら それを決済して、start()関数終了
また、次のティックでも同じ処理をして、EA稼働通貨ペアと同じ通貨ペアの保有ポジションが無くなるまで毎ティック続けます。
保有ポジションが無くなれば、ここでのstart()関数終了は実行されず、PreviousOpenOrdersにOpenOrdersの値すなわち0が代入されます。
最大ポジション数制限によるエントリー許可判定
保有ポジション数とパラメーターMaxTradesの値の比較によって、エントリー許可フラグContinueOpeningの切り替えをしています。
if(OpenOrders >= MaxTrades) ContinueOpening = False; else ContinueOpening = True;
最新ポジションのエントリー価格取得と売買別判定
次のコードでは、最新ポジションのエントリー価格をLastPriceに格納、買いポジションか売りポジションかをmyOrderTypeでわかるように値を代入しています。
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なら、 取引タブの上から順にポジションを選択して、 EA稼働チャートの通貨ペアと同じ通貨ペアのポジションがあれば、 そのエントリー価格をLastPriceに代入 買いポジションなら、myOrderTypeに2を代入 売りポジションなら、myOrderTypeに1を代入
取引タブでは、ソートの仕方で取引した順に並ばない場合があるので、OrderOpenTime()でエントリー時間を取得して比較する方法の方がよさそうですね。
ポジション無しの時の売買方向を決定
次のコードは、ポジションが無い時の売買方向を決めるコードです。MACDが上昇なら買い、下降なら売り、そしてReverseConditionが1のときは、それを逆にしています。
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; } }
LastPrice や myOrderType が、この先のプログラムで重要な役割を果たしそうですね!
ワクワクしてきたところですが、今回はこの辺で。
いつも拝見させて頂いてます。この度、リンクを貼らさせて頂きました。これからもがんばってくださいね。
はじめまして、三輪啓二と申します。
貴サイトをいつも拝見させていただき非常に勉強になっております。
誠にありがとうございます。
とてもページ数が多くて、内容も充実しているすばらしいサイトですね。
できれば弊社のブログで貴殿を紹介させていただきたいとと思いますのでよろしくお願いいたします。
弊社のURLは
http://e-fx1.sblo.jp
です。
少しでもお近づきになれたらと思いますので、もしお気持ちがございましたら
info@systemfx1.com
までご連絡いただけますと幸いです。
もし、リンクに関してご要望とかございましたら、お気軽にお申し付け下さい。
当サイトは、世界最高峰の投資サービスを提供しております。
貴サイトの今後のご発展をお祈りいたします。
突然で失礼たしました。
G.O.D Company
HP担当:三輪啓二
慶次さんこんにちわ!
メルマガ登録させていただきました、楽しみにしております(^-^)V
たま
>Sleepyさん
リンクありがとうございます!
>三輪啓二さん
こちらこそよろしくお願いいたします。是非紹介してください!
>たまさん
こんにちわ!
登録ありがとうございます!
メルマガの内容とかの要望などがあったら教えてくださいね!
こんにちは!
最近MetaTrader4の勉強をしており、貴サイトのプログラム解析を参考にさせていただいております。
非常にわかりやすい説明で大変勉強になります。
勝手ながら私のブログにてリンクを貼らせて頂きました。
これからも更新を楽しみにしております。
FX投機家さん
こんにちわ。
紹介の記事まで書いていただいて光栄です。
私もリンク貼らせて頂きました!
これからもよろしくお願いいたします。