Wizard In The Market
システムトレードの魔術師

*

■超直感!MT4プログラミング講座■ 第35回 MAの傾きを使ったEA

公開日: : 最終更新日:2015/01/13 MT4(MQL4)プログラミング講座

こんばんはっ!キリンです。
土曜日なんですが、脱サラすると関係なかったり・・・。
なんか実感が湧かない今日この頃です。


第35回 MAの傾きを使ったEA

■実際のプログラム
■解説
ついにEA製作にまでこぎつけることができましたね。
今までの応用になりますので、しっかりご理解いただければと思います。
■実際のプログラム

<

div style=”background-color: #91c3ff;”>//+------------------------------------------------------------------+
//| MA_Trendacy.mq4 |
//| kirin |
//| http://ameblo.jp/ftlabo-kirin/ |
//+------------------------------------------------------------------+

property copyright “kirin@ftlabo”

property link “http://ameblo.jp/ftlabo-kirin/”

// マイライブラリー

include <myLib.mqh>

// マジックナンバー

define MAGIC 2010610

define COMMENT “MA_Trendacy”

// 外部パラメータ
extern double Lots = 0.1;
extern int Slippage = 3;
//移動平均期間
extern int MAPeriod = 5;
//移動平均の値の差による発注基準
extern double Diffarence1 = 0.3;
extern double Diffarence2 = -0.3;
//移動平均の差による損切り基準
extern double Diffarence3 = 0;
extern double Diffarence4 = 0;
//損切り・利食いポイント
extern int Slpips = 0;
extern int Tppips = 0;
// スタート関数
int start()
{
double SMA1 = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double SMA2 = iMA(NULL, 0, MAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
double b_pos = KirinCurrentOrders(OP_BUY, MAGIC);
double s_pos = KirinCurrentOrders(OP_SELL, MAGIC);
if(SMA1 – SMA2 > Diffarence1 && b_pos == 0) KirinOrderSend(OP_BUY, Lots, Ask, Slippage, Slpips, Tppips, COMMENT, MAGIC);
if(SMA1 – SMA2 < Diffarence2 && s_pos == 0) KirinOrderSend(OP_SELL, Lots, Bid, Slippage, Slpips, Tppips, COMMENT, MAGIC);
if(SMA1 – SMA2 < Diffarence3 && b_pos != 0) KirinOrderClose(Slippage, MAGIC);
if(SMA1 – SMA2 > Diffarence4 && s_pos != 0) KirinOrderClose(Slippage, MAGIC);
return(0);
}
color ArrowColor[6] = {Blue, Red, Blue, Red, Blue, Red};
bool KirinOrderSend(int type, double lots, double price, int slippage, double slpips, double tppips, string comment, int magic)
{
int mult=1;
if(Digits == 3 || Digits == 5) mult=10;
slippage = mult;
if(type == OP_SELL || type == OP_SELLLIMIT || type == OP_SELLSTOP) mult
=-1;
double sl=0, tp=0;
if(slpips > 0) sl = price – slpips * Point * mult;
if(tppips > 0) tp = price + tppips * Point * mult;
price = NormalizeDouble(price, Digits);
sl = NormalizeDouble(sl, Digits);
tp = NormalizeDouble(tp, Digits);
int starttime = GetTickCount();
while(true)
{
if(GetTickCount() – starttime > 101000)
{
Alert(“OrderSend timeout. Check the experts log.”);
return(false);
}
if(IsTradeAllowed() == true)
{
RefreshRates();
if(OrderSend(Symbol(), type, lots, price, slippage, sl, tp, comment, magic, 0, ArrowColor[type]) != -1) return(true);
int err = GetLastError();
Print(“[OrderSendError] : “, err, ” “, ErrorDescription(err));
if(err == ERR_INVALID_PRICE) break;
if(err == ERR_INVALID_STOPS) break;
}
Sleep(100);
}
return(false);
}
// オープンポジションを決済する
bool KirinOrderClose(int slippage, int magic)
{
int ticket = 0;
for(int i=0; i<ordersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
int type = OrderType();
if(type == OP_BUY || type == OP_SELL)
{
ticket = OrderTicket();
break;
}
}
if(ticket == 0) return(false);
int starttime = GetTickCount();
while(true)
{
if(GetTickCount() – starttime > MyOrderWaitingTime
1000)
{
Alert(“OrderClose timeout. Check the experts log.”);
return(false);
}
if(IsTradeAllowed() == true)
{
RefreshRates();
if(OrderClose(ticket, OrderLots(), NormalizeDouble(OrderClosePrice(),Digits), slippage, ArrowColor[type]) == true) return(true);
int err = GetLastError();
Print(“[OrderCloseError] : “, err, ” “, ErrorDescription(err));
if(err == ERR_INVALID_PRICE) break;
}
Sleep(100);
}
return(false);
}
// 現在のポジションのロット数(+:買い -:売り)
double KirinCurrentOrders(int type, int magic)
{
double lots = 0.0;
for(int i=0; i<ordersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS) == false) break;
if(OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if(OrderType() == type) lots += OrderLots();
}
return(lots);
}

ガッツリ長いプログラム?になってしまいましたが、
すべては今までの復習で作成されています。
■解説
基本的にはクロス・ストレート円の1時間足以上に対応しています。
全体的なないようですが、SMA1で一本前の足の、SMA2で二本前の足の移動平均線の値を取得させ、
SMA1-SMA2とすることにより、移動平均の傾きを取得しています。
では、中身の解説です。
extern関数については説明は割愛します。
中身を見ていただくほうがご理解いただけると思います。
SMA1とSMA2をiMA関数を用いて計算しています。
これは、第17回[リンク]をご参照いただければと思います。
大事なのは、最後の引数が[ 1 ]と[ 2 ]である点ですね。
b_pos, s_posはdouble型で宣言し、KirinCurrentOrdersでの返り値を取得させます。
KirinCurrentOrdersでは、KirinOrderCloseのような構成になっています。
magicナンバーが一致するものを選び出し、
そこのOrderLotsを取得しています。
そして、if分を使って、MAの傾きと該当ポジションがないことを確かめて、ポジションを取ります。
また、同じような条件文で決済をさせています。
かなりわざと雑に説明しました。
今までの復習だからというのも一つの理由ですが、
ぜひ皆さんの今までの理解を深めるためにも、
どうしてこうなっているのかを考えてみていただきたいです。
コメントによる質問は受け付けておりますので、
お気軽にご利用いただければと思います。
お待ちしておりますね^^
本日もお読みいただき、まことにありがとうございます!

にほんブログ村 為替ブログへ 
Fx-Kirin

About Fx-Kirin

2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 66 follow us in feedly

関連記事

no image

■超直感!MT4プログラミング講座■ 第23回 ボリンジャーバンドのおさらい(2)

こんばんはっ!キリンです。 平日に私服で電車に乗っているのが非常に違和感を感じます。 でも、脱サラしたんだなっという感無

記事を読む

no image

■超直感!MT4プログラミング講座■ 第3回 関数を覚えよう!

こんばんは!キリンです。 前回の「変数の定義」のお話ですが、 やはりつまづいている方が多かったようですね。 基本的で、非

記事を読む

no image

■超直感!MT4プログラミング講座■ 第6回 インディケータープログラムの解説

こんにちは!キリンです。 GW真っ最中! 私は引っ越し先を探してきました。 納得のいく部屋を見つけて、さらに洗濯機も購入

記事を読む

no image

■超直感!MT4プログラミング講座■ 第26回 発注スプリクトの作成(2)

おはようございます。キリンです。 昨日は招き猫さんに来ていただいて、 引越しを手伝っていただけました。 だけと肝心の準備

記事を読む

no image

■超直感!MT4プログラミング講座■ 第16回 インディケーターの実働部分

こんばんは。キリンです。 先ほどHey!Hey!Hey!の大阪の歌特集をやっていました。 Dreams Come Tru

記事を読む

no image

■超直感!MT4プログラミング講座■ 第36回 ブレイクアウトシステムのEA 作成

おはようございます。キリンです。 今日は、マインドアップ的読書感想文で非常に良いことが書いてありました。 その中のさわり

記事を読む

no image

■超直感!MT4プログラミング講座■ 第25回 発注スプリクトの作成

おはようございます。キリンです。 今日から引越しの準備です。 今週はあまり仕事が進んでないです・・・。 引越しの準備とか

記事を読む

no image

■超直感!MT4プログラミング講座■ 第12回 配列の応用方法を覚えよう!

こんばんは。キリンです。 TopGunの運用で、初めて3機目まで導入されてしまいました。 最後に投入するということもあり

記事を読む

no image

■超直感!MT4プログラミング講座■ 第19回 ボリンジャーバンドを作ろう(1)

こんばんは!キリンです。 気づいたら本格的なプログラムを扱っている状態にまで、 この講座も進んでこれたのですね。 私とし

記事を読む

no image

■超直感!MT4プログラミング講座■ 第24回 インディケーターの補足

こんばんは。キリンです。 第24回 インディケーターの補足 ■インディケーターをサブウィンドウに表示する ■グラフに

記事を読む

Comment

  1. gori より:

    SECRET: 0
    PASS:
    // マイライブラリー
    #include
    がエラーに成りますが?

  2. 気になるチャート より:

    第35回 MAの傾きを使ったEA
    コンパイルしたのですが、エラーメッセージがでました。
    バージョンがちがうせいでしょうか?
    何が悪いのでしょうか?
    教えていただけないでしょうか

gori にコメントする コメントをキャンセル

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

Adsense

Avoiding the problem of connect to outside of LAN with L2TP/IPSec on Ubuntu 18.04.

とても困って、原因の特定に2日かかった。疲れた。確定申告したいのに。 The IPSEC tu

Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる

こんにちは。キリンです。 最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れま

numpy の2つ行列で片方にあるものだけを抽出する。

numpy で2つの時間のインデックスをarrayデータとして持っていて、x にはない時間のイン

Synology DS216j の MySQL に外部からつなぐ

Synology DS216j をNAS(RAID1 12TB)として使っています。もっぱらデー

VMWare Player をヘッドレスモードで使う。

[bm url="http://www.ryanchapin.com/fv-b-4-713/Ru

→もっと見る

PAGE TOP ↑