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
  • 52 follow us in feedly

関連記事

no image

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

こんにちは!キリンです。 今日、ついに大阪の地に降り立ちました。 5年ぶりの大阪。あの頃とはまったく気持ちが違いますね。

記事を読む

no image

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

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

記事を読む

no image

■超直感!MT4プログラミング講座■ 第28回 決済スプリクトの作成(1)

こんにちは!キリンです。 引越しも終わり、かなり落ち着いてきました。 時間的制約が皆無になると、セルフコントロール能力が

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

■超直感!MT4プログラミング講座■ 第18回 インディケーターを色々いじってみよう

こんばんは!キリンです。 今日の名言 「日々、常に何か新しいことを学習し身につける。  それを繰り返すことによって、新し

記事を読む

no image

■超直感!MT4プログラミング講座■ 第7回 インディケーター表示のために

没になった回です。 内容が雑なため、第8回へ移動していただければと思います。 興味のある方はご覧いただければと思います。

記事を読む

no image

■超直感!MT4プログラミング講座■ 第39回 ブレイクアウトシステムのEAの最適化をやってみよ

こんばんは!キリンです。 今日は最適化をしてみます。 簡単に成績がいいものができてしまうので、 成果が出たときは非常に嬉

記事を読む

no image

■超直感!MT4プログラミング講座■ 第33回 発注スプリクトをサブルーチン化する(2)

こんにちは。キリンです。 昨日、同い年の投資を始めている医大生とお会いしてきました。 すでに何度か事業にもチャレンジされ

記事を読む

no image

■超直感!MT4プログラミング講座■ 第1回 プログラミングって何?

こんにちは!キリンです。 今日から一週間に一回くらいの更新頻度を目標に、 MT4プログラミング講座を更新していきます。

記事を読む

Comment

  1. gori より:

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

Message

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

Adsense

システムトレードを始める前に知っておきたかったこと

今日の勉強会で発表してきました。nbviewer に共有しておきます。 システムトレードを始め

chmod で やらかしてしまったときの対処法

メモ書きです。 find | xargs とかを普通にやってしまうと、すぐに argument

AMD Ryzen & Nvidia GTX 1080 BTO PC 構成・組立と Ubuntu インストール

まだググっても、構成例とか出てないので参考になるんじゃないかなと。機械学習用ですが、全然ゲーム用

Windows のデスクトップアプリをSSHクライアントから再起動する

シェルスプリクト一発で、システムトレードの設定を一括で更新して、MT4を再起動したいとかそういう

UX21A のディスプレイが壊れたので修理

UX21A のディスプレイがぶっ壊れた。 画面にラインが入ったり、ディスプレイが揺れたりするよ

→もっと見る

PAGE TOP ↑