Price Data Components
Series array that contains open time of each barSeries array that contains close prices for each barSeries array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
It automatically opens orders when conditions are reachedChecks for the total of open ordersIt Closes Orders by itself
Indicators Used
Moving Average of Oscillator
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
Div_MACD
//+------------------------------------------------------------------+
//|                                                     Div_MACD.mq4 |
//|                                                           KONDOR |
//|                                                      forex_@i.ua |
//+------------------------------------------------------------------+
extern double Lots=0.1;
extern int TakeProfit=1000, StopLoss=1000;
int mn=0;
extern int p1=50,p2=100,s=15;

double pair[1000]; 
 string simb[28]={                                       
 "EURGBP","EURAUD","EURNZD","EURUSD","EURCAD","EURCHF","EURJPY",  
 "GBPAUD","GBPNZD","GBPUSD","GBPCAD","GBPCHF","GBPJPY","AUDNZD",
 "AUDUSD","AUDCAD","AUDCHF","AUDJPY","NZDUSD","NZDCAD","NZDCHF",
 "NZDJPY","USDCAD","USDCHF","USDJPY","CADCHF","CADJPY","CHFJPY"};
 
 
datetime old_Time[28]= {
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',
D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00',D'2000.01.01 00:00' }; 

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//-----------------  óñòàíàâëèâàåì âðåìÿ îòêðûòèÿ ïîçèöèé
for (int g=0;g<28;g++) {
   if( old_Time[g]<OrderOpenTime_( simb[g]))  old_Time[g]=OrderOpenTime_( simb[g]); 
                       }

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
ObjectDelete("Line1");
ObjectDelete("Line2");

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int limit,i;

//---- îñíîâíîé öèêë
bool op[28][2]={false,false,false,false,false,false,false,false,false,false,false,false,false,false,
           false,false,false,false,false,false,false,false,false,false,false,false,false,false};
           
bool cl[28][2]={false,false,false,false,false,false,false,false,false,false,false,false,false,false,
           false,false,false,false,false,false,false,false,false,false,false,false,false,false};

for( int g=0;g<28;g++)  {  //( i=ind;i<ind+1;i++)

    if (old_Time[g]==iTime(simb[g],0,0))continue;  
  

   int Digit=MarketInfo(simb[g],MODE_DIGITS);
   double ask_=MarketInfo(simb[g],MODE_ASK),
          bid_=MarketInfo(simb[g],MODE_BID),
          pp=MarketInfo(simb[g],MODE_POINT),
          sLevel=MarketInfo(simb[g],MODE_STOPLEVEL),
          spread=MarketInfo(simb[g],MODE_SPREAD);       
       
    int ext1=0, ext2=0,b1=0,b2=0,b3=0,b4=0;   
           
     string text="";  
     
     for(  i = 0; i < 1000; i++)      { // çàãîíÿåì èíäèêàòîð â ìàññèâ
         pair[i] = macd(simb[g], i); }
         
       
     if(pair[1]>pair[3] ){  //èíäèêàòîð ðàñòåò,  íàõîäèì äâà ìèíèìóìà
        
      if(pair[1]>0 ) {  
      
        for(i=0;i<500;i++)      {
        if(pair[i]<0) { b1=i; break;}
                                }  
                            
        for(i=b1;i<b1+500;i++)  {
        if(pair[i]>0) { b2=i; break;}
                                }      
                                
        for(i=b2;i<b2+500;i++)  {
        if(pair[i]<0) { b3=i; break;}
                                }     
                                
        for(i=b3;i<b3+500;i++)  {
        if(pair[i]>0) { b4=i; break;}
                                }
                      } // if(pair[1]>0 ) {          
                                
       
      if(pair[1]<0){     
      
                       b1=0;
                            
        for(i=b1;i<b1+500;i++)  {
        if(pair[i]>0) { b2=i; break;}
                                }      
                                
        for(i=b2;i<b2+500;i++)  {
        if(pair[i]<0) { b3=i; break;}
                                }     
                                
        for(i=b3;i<b3+500;i++)  {
        if(pair[i]>0) { b4=i; break;}
                                }
                    }   //if(pair[1]<0){                        
 //----------------------------------------------           
        double min1=100000;               
        for(i=b1;i<b2;i++)      {
        if (pair[i]<min1) {min1=pair[i];  ext1=i;}
                                 }
                                 
        double min2=100000;               
        for(i=b3;i<b4;i++)      {
        if (pair[i]<min2) {min2=pair[i];  ext2=i;}
                                 }                         
        
        if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
        summa(simb[g],ext2) > summa(simb[g],ext1)  )
        {cl[g][1]=true; text="  diver  BUY"; } else
        
        if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
        summa(simb[g],ext2) < summa(simb[g],ext1) )
        {op[g][0]=true; text="  converg  BUY"; }  else  
        
        if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
        summa(simb[g],ext2) > summa(simb[g],ext1))
        text="  wait  SELL"; else
        
        if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
        summa(simb[g],ext2) < summa(simb[g],ext1))
        text="  TREND  BUY"; 
                                                  
                    }  //èíäèêàòîð ðàñòåò,  íàõîäèì äâà ìèíèìóìà
 //=================================================================
 
   if(pair[1]<pair[3] ){ //èíäèêàòîð ïàäàåò, íàõîäèì äâà ìàêñèìóìà
                      
      if(pair[1]<0 ){   
      
        for(i=0;i<500;i++)      {
        if(pair[i]>0) {   b1=i; break;}
                                }    
                            
        for(i=b1;i<b1+500;i++)  {
        if(pair[i]<0) {   b2=i; break;}
                                }    
                                
        for(i=b2;i<b2+500;i++)  {
        if(pair[i]>0) {   b3=i; break;}
                                }
                                
        for(i=b3;i<b3+500;i++)  {
        if(pair[i]<0) {   b4=i; break;}
                                }
                     }  // if(pair[1]<0 ){
                     
                     
       if(pair[1]>0){     
      
                       b1=0;
                            
        for(i=b1;i<b1+500;i++)  {
        if(pair[i]<0) { b2=i; break;}
                                 }      
                                
        for(i=b2;i<b2+500;i++)  {
        if(pair[i]>0) { b3=i; break;}
                                 }     
                                
        for(i=b3;i<b3+500;i++)  {
        if(pair[i]<0) { b4=i; break;}
                                 }
                    }   // if(pair[1]>0){            
                                
//----------------------------------------------                               }    
        double max1=-100000;               
        for(i=b1;i<b2;i++)      {
        if (pair[i]>max1) {max1=pair[i];  ext1=i;}
                                 }
                                 
        double max2=-100000;               
        for(i=b3;i<b4;i++)      {
        if (pair[i]>max2) {max2=pair[i];  ext2=i;}
                                 }       
                                            
        if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
        summa(simb[g],ext2) < summa(simb[g],ext1)  )
        {cl[g][0]=true; text="  diver  SELL";}    else
        
        if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
        summa(simb[g],ext2) > summa(simb[g],ext1) )
        {op[g][1]=true; text="  converg  SELL";}  else  
        
        if(macd(simb[g],ext2) < macd(simb[g],ext1) &&
        summa(simb[g],ext2) < summa(simb[g],ext1))
        text="  wait  BUY";     else 
        
        if(macd(simb[g],ext2) > macd(simb[g],ext1) &&
        summa(simb[g],ext2) > summa(simb[g],ext1))
        text="  TREND  SELL";
        
                                    
                    } //èíäèêàòîð ïàäàåò, íàõîäèì äâà ìàêñèìóìà
                    
        if(simb[g]==Symbol()) { int EXT1=ext1; int EXT2=ext2; string TEXT=text;}   // îòîáðàæåíèå íà ãðàôèêå       
                     
       //Alert(simb[g],text); 
       
       if( op[g][0]==true  && CalculateOrders(simb[g],OP_BUY)==0 ) { 
           OrderSend(simb[g],OP_BUY, Lots,ask_,3,bid_-StopLoss*pp,0,text,mn,0,    Blue); 
           old_Time[g]=iTime(simb[g],0,0);
           Alert(simb[g], "  ",text);                              }
       
       if( op[g][1]==true && CalculateOrders(simb[g],OP_SELL)==0 ) {
           OrderSend(simb[g],OP_SELL,Lots,bid_,3,ask_+StopLoss*pp,0,text,mn,0,DeepPink);
           old_Time[g]=iTime(simb[g],0,0);
           Alert(simb[g], "  ",text);                              }  
       
 
                                                    }      //for( int g=0;g<28;g++)   
                                                        
                    
   //    Alert("b1 =",b1,";  b2 =",b2,"  b3 =",b3,";  b4 =",b4, "  ext1 =",ext1,";  ext2 =",ext2);        
       
   for( i=0;i<OrdersTotal();i++)   {
   
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
      
      
      for(int k=0;k<28;k++) {
      
        if(simb[k]==OrderSymbol()) {int s=k; break;}
                            }                            

         
          if(OrderType()==OP_BUY) {
            if(cl[s][0]==true) {  OrderClose(OrderTicket(),OrderLots(),MarketInfo(simb[s],MODE_BID),3,Aqua);}
                                  }
                                  
          if(OrderType()==OP_SELL) {
            if(cl[s][1]==true) {  OrderClose(OrderTicket(),OrderLots(),MarketInfo(simb[s],MODE_ASK),3,Pink);}
                                   } 
                                  


                                                                                                
                                          }       //for( i=0;i<OrdersTotal();i++) 
       
 //=======================================================================================
      
 Create_Tic("Div_MACD",TEXT,100,50);
      
if(ObjectFind( "Line1")<0 ) {

   ObjectCreate("Line1",OBJ_VLINE, 0, Time[EXT1],Close[EXT1]);    
   ObjectSet("Line1",OBJPROP_COLOR,DeepPink);
   ObjectSet("Line1",OBJPROP_WIDTH,2);
   WindowRedraw();          }
   
   if(ObjectFind( "Line1")>=0) {
  
   ObjectMove("Line1",0, Time[EXT1],Close[EXT1]);
   WindowRedraw();            } 
   
  
  if(ObjectFind( "Line2")<0 ) {

   ObjectCreate("Line2",OBJ_VLINE, 0, Time[EXT2],Close[EXT2]);    
   ObjectSet("Line2",OBJPROP_COLOR,DeepPink);
   ObjectSet("Line2",OBJPROP_WIDTH,2);
   WindowRedraw();          }
   
   if(ObjectFind( "Line2")>=0) {
  
   ObjectMove("Line2",0, Time[EXT2],Close[EXT2]);
   WindowRedraw();            } 
   
//----
   return(0);
  }

//+------------------------------------------------------------------+

double macd(string simbol,int i){
double res=iOsMA(simbol,0,p1,p2,s,PRICE_MEDIAN,i)/iClose(simbol,0,i)*10000;
return(res);     }

double summa(string simbol,int i){
double res=iHigh(simbol,0,i)+iLow(simbol,0,i);
  return(res);}
  
  
//------------------------------------------------------------------

int CalculateOrders(string simbol,int type) {   int count=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol )//&& OrderMagicNumber()==mn)
        {
         if(OrderType()==type)  count++;
        
        }
     }
     
 return(count);
  }  
  
//------------------------------------------------------------------

datetime OrderOpenTime_(string simbol)
  {
   datetime Time_=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==simbol )
        {
         if(OrderOpenTime()>Time_)  Time_=OrderOpenTime();
        
        }
     }

 return(Time_);
  }   
//+------------------------------------------------------------------+

int Create_Tic(string name,string text,int x,int y)      
  {        
   ObjectDelete(name);     
   ObjectCreate(name,OBJ_LABEL, 0, 0,0); 
   ObjectSetText(name, text, 12, "Tahoma Narrow", Orange);
   ObjectSet(name, OBJPROP_CORNER, 3);     
   ObjectSet(name, OBJPROP_XDISTANCE, x); 
   ObjectSet(name,OBJPROP_YDISTANCE,y);
   WindowRedraw(); 
   return;                                      
  } 

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 ---