MACD Sample_1

Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
MACD HistogramMoving average indicator
0 Views
0 Downloads
0 Favorites
MACD Sample_1
//+------------------------------------------------------------------+
//|                                                MACD Sample_1.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;

extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;
//-------Ïåðåìåííûå äëÿ îïòèìèçàöèè-------
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalSMA = 9;
extern int TrailingStop = 30;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extern int SetHour   = 0;             //×àñ ñòàðòà îïòèìèçàöèè 
extern int SetMinute = 1;             //Ìèíóòà ñòàðòà îïòèìèçàöèè 
int    TestDay     = 3;                      //Êîëè÷åñòâî äíåé äëÿ îïòèìèçàöèè 
int    TimeOut     = 4;                     //Âðåìÿ îæèäàíèÿ îêîí÷àíèÿ îïòèìèçàöèè â ìèíóòàõ
string NameMTS     = "MACD Sample_1";        //Èìÿ ñîâåòíèêà
string NameFileSet = "MACD Sample_1.set";             //Èìÿ Set ôàéëà ñ óñòàíîâêàìè
string PuthTester  = "D:\Program Files\Forex Best Trade Station";//Ïóòü ê òåñòåðó
//--- Ïîñëåäîâàòåëüíîñòü ôèëüòðàöèè
int    Gross_Profit   = 1;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîé ïðèáûëè
int    Profit_Factor  = 2;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîé ïðèáûëüíîñòè
int    Expected_Payoff= 3;                   //Ñîðòèðîâêà ïî Ìàêñèìàëüíîìó ìàòîæèäàíèþ
//--èìåíà ïåðåìåííûõ äëÿ îïòèìèçàöèè
string Per1 = "FastEMA";
string Per2 = "SlowEMA";
string Per3 = "SignalSMA";
string Per4 = "";
bool StartTest=false;
datetime TimeStart;
//--- Ïîäêëþ÷åíèå áèáëèîòåêè àâòîîïòèìèçàòîðà
#include <auto_optimization.mqh>

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int init(){
Comment(" ");
   //  Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
return(0);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   if(!IsTesting() && !IsOptimization()){                //Ïðè òåñòèðîâàíèè è îïòèìèçàöèè íå çàïóñêàòü
      if(TimeHour(TimeLocal())==SetHour){                //Ñðàâíåíèå òåêóùåãî ÷àñà ñ óñòàíîâëåííûì äëÿ çàïóñêà
         if(!StartTest){                                 //Çàùèòà îò ïîâòîðíîãî çàïóñêà
            if(TimeMinute(TimeLocal())>SetMinute-1){     //Ñðàâíåíèå äèàïàçîíà ìèíóò ñ óñòàíîâëåííîé äëÿ çàïóñêà ìèíóòîé
               if(TimeMinute(TimeLocal())<SetMinute+1){  //äèàïàçîí íóæåí â ñëó÷àå åñëè ïî êàêèì-òî ïðè÷èíàì äîëãî íåò íîâîãî òèêà
                  TimeStart   =TimeLocal();
                  StartTest   =true;                     //Ôëàã çàïóñêà òåñòåðà
                  Tester(TestDay,NameMTS,NameFileSet,PuthTester,TimeOut,Gross_Profit,Profit_Factor,Expected_Payoff,Per1,Per2,Per3,Per4);
   }}}}
   FastEMA     =GlobalVariableGet(Per1);
   SlowEMA     =GlobalVariableGet(Per2);
   SignalSMA   =GlobalVariableGet(Per3);
   TrailingStop=GlobalVariableGet(Per4);
   }
   if(StartTest){                                        //Åñëè ôëàã çàïóñêà òåñòåðà óñòàíîâëåí
       if(TimeLocal()-TimeStart > TimeOut*60){            //Åñëè ñ ìîìåíòà çàïóñêà ïðîøëî áîëüøå óñòàíîâëåííîãî âðåìåíè îæèäàíèÿ òåñòèðîâàíèÿ
       StartTest = false;                                //Îáíóëèì ôëàã
   }}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    
    if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
   MacdCurrent=iMACD(NULL,0,FastEMA,SlowEMA,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,FastEMA,SlowEMA,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,FastEMA,SlowEMA,SignalSMA,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()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"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(0); 
        }
      // check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"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()); 
         return(0); 
        }
      return(0);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---