アフェリエイト広告

サンプルプログラム解説

アフェリエイト広告

MACD Sample

ソース解説
//+——————————————————————+
//| MACD Sample.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| http://www.mql4.com |
//+——————————————————————+
property copyright “2005-2014, MetaQuotes Software Corp.”
property link “http://www.mql4.com”
input double TakeProfit =50;
input double Lots =0.1;
input double TrailingStop =30;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int MATrendPeriod =26;
//+——————————————————————+
//| |
//+——————————————————————+
void OnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//—
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//—
if(Bars<100)
{
Print(“bars less than 100”);
return;
}
if(TakeProfit<10)
{
Print(“TakeProfit less than 10”);
return;
}
//— to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
total=OrdersTotal();

if(total<1) {
//— no opened orders identified
if(AccountFreeMargin()<(1000Lots))
{
Print(“We have no money. Free Margin = “,AccountFreeMargin());
return; }
//— check for long position (BUY) possibility
if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDOpenLevelPoint) && MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfitPoint,”macd sample”,16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(“BUY order opened : “,OrderOpenPrice()); } else Print(“Error opening BUY order : “,GetLastError()); return; } //— check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevelPoint) && MaCurrentPoint,”macd sample”,16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(“SELL order opened : “,OrderOpenPrice()); } else Print(“Error opening SELL order : “,GetLastError()); } //— exit from the “no opened orders” block return; } //— it is important to enter the market correctly, but it is more important to exit it correctly… for(cnt=0;cnt0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDCloseLevelPoint)) { //— close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)) Print(“OrderClose error “,GetLastError()); return; } //— check for trailing stop if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>PointTrailingStop) { if(OrderStopLoss()TrailingStop)
{
//— modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-PointTrailingStop,OrderTakeProfit(),0,Green)) Print(“OrderModify error “,GetLastError()); return; } } } } else // go to short position { //— should it be closed? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDCloseLevelPoint))
{
//— close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print(“OrderClose error “,GetLastError());
return;
}
//— check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(PointTrailingStop)) { if((OrderStopLoss()>(Ask+PointTrailingStop)) || (OrderStopLoss()==0))
{
//— modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print(“OrderModify error “,GetLastError());
return;
}
}
}
}
}
}
//—
}
//+——————————————————————+
//タイトル コメント
//+——————————————————————+
//| MACD Sample.mq4 |
//| Copyright 2005-2014, MetaQuotes Software Corp. |
//| http://www.mql4.com |
//+——————————————————————+
property copyright “2005-2014, MetaQuotes Software Corp.”
property link “http://www.mql4.com”

//コピーライト
//
//入力パラメタ TP  5pips
//入力パラメタ ロット 0.1
input double TrailingStop =30;
input double MACDOpenLevel =3;
input double MACDCloseLevel=2;
input int MATrendPeriod =26;
//+——————————————————————+
//| |
//+——————————————————————+
void OnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//—
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//—
if(Bars<100)
{
Print(“bars less than 100”);
return;
}
if(TakeProfit<10)
{
Print(“TakeProfit less than 10”);
return;
}
//— to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
total=OrdersTotal();
if(total<1) { //— no opened orders identified if(AccountFreeMargin()<(1000Lots)) { Print(“We have no money. Free Margin = “,AccountFreeMargin()); return; } //— check for long position (BUY) possibility if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDOpenLevelPoint) && MaCurrent>MaPrevious)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfitPoint,”macd sample”,16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(“BUY order opened : “,OrderOpenPrice()); } else Print(“Error opening BUY order : “,GetLastError()); return; } //— check for short position (SELL) possibility if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevelPoint) && MaCurrentPoint,”macd sample”,16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(“SELL order opened : “,OrderOpenPrice()); } else Print(“Error opening SELL order : “,GetLastError()); } //— exit from the “no opened orders” block return; } //— it is important to enter the market correctly, but it is more important to exit it correctly… for(cnt=0;cnt0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDCloseLevelPoint)) { //— close order and exit if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet)) Print(“OrderClose error “,GetLastError()); return; } //— check for trailing stop if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>PointTrailingStop) { if(OrderStopLoss()TrailingStop)
{
//— modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-PointTrailingStop,OrderTakeProfit(),0,Green)) Print(“OrderModify error “,GetLastError()); return; } } } } else // go to short position { //— should it be closed? if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDCloseLevelPoint))
{
//— close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print(“OrderClose error “,GetLastError());
return;
}
//— check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(PointTrailingStop)) { if((OrderStopLoss()>(Ask+PointTrailingStop)) || (OrderStopLoss()==0))
{
//— modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print(“OrderModify error “,GetLastError());
return;
}
}
}
}
}
}
//—
}
//+——————————————————————+

/
/
/
/
/
/
/
/
/
/
/
/
/
/

コメント

タイトルとURLをコピーしました