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; } } } } } } //— } //+——————————————————————+ / / / / / / / / / / / / / / |
コメント