MACD関数の使い方
今回は
MACD関数の説明をします。
サンプルプログラムはこちらです。
http://jidoubaibai.com/Sample%20MACD.mq4
サンプルプログラムの使い方は、こちらで説明しています。
http://jidoubaibai.com/burogu11.html
では、
MetaEditorを起動して下さい。
Nameは
iMACDにして置いて下さい。
内容はほとんどiMAと変わりません。
変数に入れる内容が異なるだけです。
では、まとめてコードを書きますので、同じようにコードを半角英数で書いていってください。
int start()
{
//変数の宣言
int cnt, CurrentPosition;
int Ticket;
double kakoa,gennzaia;
double kakob,gennzaib;
// オーダーチェック(ポジションなどのデータ)
CurrentPosition=-1;
for(cnt=0;cnt < OrdersTotal();cnt++){
OrderSelect(cnt,SELECT_BY_POS);
if(OrderSymbol() == Symbol()) CurrentPosition=cnt;
}
//一つ前のMACDのメイン
kakoa = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
//一つ前のMACDのシグナル
kakob = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//現在のMACDのメイン
gennzaia = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
//現在のMACDのシグナル
gennzaib = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
// ポジションチェック ポジション無し
if(CurrentPosition == -1)
{
//もしメインがシグナルを下から上にクロスしたら
if( kakoa < kakob && gennzaia >= gennzaib)
{
//買いポジションを取る
Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(200*Point), Ask+(200*Point), "Buy", 0, 0, Red);
}
//もしメインがシグナルを上から下にクロスしたら
if( kakoa > kakob && gennzaia <= gennzaib)
{
//売りポジションを取る
Ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+(200*Point), Bid-(200*Point), "Sell", 0, 0, Blue);
}
}
// ポジション有り
else
{
//ポジションの選択
OrderSelect(Ticket,SELECT_BY_POS);
//ポジションの確認
if(OrderSymbol() == Symbol())
{
//もし買いポジションだったら
if(OrderType()==OP_BUY)
{
//もしメインがシグナルを上から下にクロスしたら
if( kakoa > kakob && gennzaia <= gennzaib)
{
//手仕舞い
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
//ドテンで売りポジションを取る
Ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, Bid+(200*Point), Bid-(200*Point), "Sell", 0, 0, Blue);
}
}
//もし売りポジションだったら
else if(OrderType()==OP_SELL)
{
//もしメインがシグナルを下から上にクロスしたら
if( kakoa < kakob && gennzaia >= gennzaib)
{
//手仕舞い
OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
//ドテンで買いポジションを取る
Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(200*Point), Ask+(200*Point), "Buy", 0, 0, Red);
}
}
}
}
return(0);
}
書けましたか?
前回と見比べて貰えれば分かると思いますが、下のコードが変わっただけです。
//一つ前のMACDのメイン
kakoa = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
//一つ前のMACDのシグナル
kakob = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//現在のMACDのメイン
gennzaia = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
//現在のMACDのシグナル
gennzaib = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
前回のプログラムは変数に入れていたのが
iMA関数でした。
今回は、この
iMACD関数の説明です。
まず、日本語で内容を書きますね。
iMACD関数(通貨ペア、タイムフレーム(時間足)、短期EMA、長期EMA、シグナル、値を取る時間(始値、終値など)、モード、シフト)
iMAと似ている部分がありますので、簡単に説明していきます。
通貨ペアと
タイムフレームは
iMAと同じです。
基本的に
NULLと
0と入力しておけば問題ありません。
短期EMA、
長期EMA、
シグナルは
MACDの使い方と同じです。
値を取る時間は、今回は
終値にします。
PRICE_CLOSEと入れて置いてください。
モードは
MACDの
メインの線か
シグナルの線かを選択します。
メインなら
MODE_MAIN、シグナルなら
MODE_SIGNALと入力します。
シフトは数字を入れることによって、
その数字分前の足のデータを入力出来ます。
0は現在のデータ、1なら1つ前の足のデータです。
今回も前回の
iMAと同じ
ゴールデンクロスと
デッドクロスが
売買条件ですので、0と1の両方を変数に入れています。
これで、今回のプログラムの説明は終了です。
今回のプログラムは、
MACD(短期12,長期26,シグナル9)のメインとシグナルのゴールデンクロスとデッドクロスで仕掛けをして、手仕舞いはその逆のルール、手仕舞いと一緒にドテンするというものです。
一応、ストップとリミットを200pipsつけています。
では、
コンパイルをするために
compileのボタンを押してください。
エラーが出てきた場合は、半角になっているか、;を付け忘れていないか、{}を付け忘れていないか、{}の数は合っているかを確認して下さい。
どうしてもエラーが分からない場合は、サンプルプログラムを参照して下さい。
エラーが出なかったら、
MetaTrader4の
バックテストで
iMACDを選んで、スタートして下さい。
終わったら、結果、Graph、レポートを見てください。
今回はこれで終了です。
----------------------注意----------------------
半角のスペースが認識されない為、コードを見易くするために全角で書いている場合があります。
実際にプログラムにコードを書くときは、コピー&ペーストせずに半角で書いて行って下さい。