Zamok_v1_4_1

Author: Copyright � 2012, ������ ������ �������
Profit factor:
0.00
Price Data Components
Series 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 indicator
1 Views
0 Downloads
0 Favorites
Zamok_v1_4_1

//+------------------------------------------------------------------+
//|                                                   Çàìîê v1.4.mq4 |
//|                          Copyright © 2012, Áû÷êîâ Ýäóàðä Þðüåâè÷ |
//|                                            http://edik1975@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Áû÷êîâ Ýäóàðä Þðüåâè÷"
#property link      "http://edik1975@bk.ru"
#include <stderror.mqh>
#include <stdlib.mqh>  
 
extern int     Magic                  = 99;
extern string  C_âàëþòîé              = "Âàëþòà";
extern bool    Îáðàòíàÿ_êîððåëÿöèÿ    = false;
extern datetime Îïòèìèçèðîâàòü        =D'8.10.2012 00:00';
extern int     Îïòèìèçèðîâàòü_êàæäûå  = 30,
                 ma_method            = 1,
                 applied_price        = 6;
extern double    Lot                  = 0.1;
extern string    Ïðîôèò               = "0$"; //--åñëè 0$ èëè 0% òî âûõîä ïî ñèãíàëó
                                              //--åñëè $ òî ïî ïðèáûëè
                                              //--åñëè % òî ïî ïðîöåíòàì îò äåïîçèòà
                                              //--åñëè "Òðàë" òî ïî ïðîöåíòàì îò ìàêñèìàëüíîé ïðèáûëè
extern double    Ìèíèìóì              = 10; 
                                              
extern string    Ñòîï                 = "0$"; //--åñëè 0$ èëè 0% òî îòêëþ÷åí
                                              //--åñëè $ òî ïî óáûòêó
                                              //--åñëè % òî ïî ïðîöåíòàì îò äåïîçèòà

double signal[200];double tses[100];                                    
double vkl,Profit1,var,punn,opt,rek_period,ploho,sstop,time,timfr_rek,sdelok;
double correl_1_2,correl_M1,correl_M5,correl_M15,correl_M30,correl_H1,correl_H4;
double eror1,eror2,eror11,eror22,closs,Lot1,Lot2,profit,profitt,trall;
int Áàðû_îïòèìèçàöèè,c;
string sd,osnval;

//-----------------------------------------------------------------------------------------------------
int start()
  {
  osnval=Symbol( );
   
  Áàðû_îïòèìèçàöèè=iBarShift(osnval,0,Îïòèìèçèðîâàòü,FALSE);       
  if(Seconds()==30){time=time+1;}
  if(time>=Îïòèìèçèðîâàòü_êàæäûå && C_âàëþòîé!="Âàëþòà" && vkl==0){opt=0;time=0;}
//-----------------------------------------------------------------------------------------------------
for(int k=0;k<ObjectsTotal();k++)
   {
   if(ObjectGet(ObjectName(k),OBJPROP_ARROWCODE)==SYMBOL_THUMBSDOWN)   {ploho = true;} 
   if(ObjectGet(ObjectName(k),OBJPROP_ARROWCODE)==SYMBOL_STOPSIGN) {sstop =true;}
   }
if(((ploho == true && sstop ==true)||opt==0)&& C_âàëþòîé!="Âàëþòà"){rek_period=0;punn=0;optimizator();ObjectsDeleteAll(EMPTY, OBJ_ARROW);
    ploho = FALSE; sstop = FALSE;opt=1;}
//-----------------------------------------------------------------------------------------------------
             
   vklutenie();compins();          
             
       
             sd="\n\n"+osnval+" > "+C_âàëþòîé;
          if(timfr_rek!=0)   
            {
          if(timfr_rek==1){sd=sd+ "\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ M1   = "+DoubleToStr(correl_M1/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ M1   = "+DoubleToStr(correl_M1/0.01,0);}
          if(timfr_rek==5){sd=sd+ "\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ M5   = "+DoubleToStr(correl_M5/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ M5   = "+DoubleToStr(correl_M5/0.01,0);}
          if(timfr_rek==15){sd=sd+"\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ M15  = "+DoubleToStr(correl_M15/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ M15 = "+DoubleToStr(correl_M15/0.01,0);}
          if(timfr_rek==30){sd=sd+"\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ M30  = "+DoubleToStr(correl_M30/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ M30 = "+DoubleToStr(correl_M30/0.01,0);}
          if(timfr_rek==60){sd=sd+"\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ H1   = "+DoubleToStr(correl_H1/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ H1   = "+DoubleToStr(correl_H1/0.01,0);}
         if(timfr_rek==240){sd=sd+"\n   Ðàáîòàåì ïî>>>>>>     Êîððåëÿöèÿ H4   = "+DoubleToStr(correl_H4/0.01,0);}else
                          {sd=sd+ "\n                                         Êîððåëÿöèÿ H4   = "+DoubleToStr(correl_H4/0.01,0);}
            }
              
      
             sd="\n\nÑÏÐÅÄ "+osnval+" "+ DoubleToStr(MarketInfo(osnval,MODE_SPREAD),0)+"   Ëîò  "+ DoubleToStr(Lot1,2)+
                  "\nÑÏÐÅÄ "+C_âàëþòîé+" "+DoubleToStr(MarketInfo(C_âàëþòîé,MODE_SPREAD),0)+"   Ëîò  "+ DoubleToStr(Lot2,2)+sd
                +"\n\nÁàëàíñ ïîçèöèé "+DoubleToStr(Profit1,2);
            if(Ïðîôèò!="0$" && Ïðîôèò!="0%"){sd=sd+"    Çàêðûâàåì ïî ïðîôèòó "+Ïðîôèò;}
            if (Ñòîï!="0$" && Ñòîï!="0%"){sd=sd+"  è ñòîïó "+Ñòîï;}
            if(Ïðîôèò=="0$"||Ïðîôèò=="0%"){sd=sd+"    Çàêðûâàåì ïî ñèãíàëó ";}
                
           sd=sd+"\n\nÎïòèìèçàöèÿ ñ  "+DoubleToStr(TimeDay(Time[Áàðû_îïòèìèçàöèè]),0)+"."
                +DoubleToStr(TimeMonth(Time[Áàðû_îïòèìèçàöèè]),0)+"."
                +DoubleToStr( TimeYear(Time[Áàðû_îïòèìèçàöèè]),0)+"ã."
                +"\nÊîëè÷åñòâî ïóíêòîâ "+DoubleToStr(punn,5)
                +"\nÊîëè÷åñòâî âõîäîâ â ðûíîê "+DoubleToStr(sdelok,0)
                +"\nÏåðèîä ÌÀ "+DoubleToStr(rek_period,0);
      Comment(sd);
       
 for(int n=1;n<=6;n++)
     {
     if(n==1){c=1;}if(n==2){c=5;}if(n==3){c=15;}if(n==4){c=30;}if(n==5){c=60;}if(n==6){c=240;}
     ArrayCopySeries(tses,MODE_CLOSE,osnval,c);
     ArrayCopy(signal,tses,0,1,100);
     ArrayCopySeries(tses,MODE_CLOSE,C_âàëþòîé,c);
     ArrayCopy(signal,tses,100,1,100);
     correl();
     if(n==1){correl_M1=correl_1_2;}
     if(n==2){correl_M5=correl_1_2;}
     if(n==3){correl_M15=correl_1_2;}
     if(n==4){correl_M30=correl_1_2;}
     if(n==5){correl_H1=correl_1_2;}
     if(n==6){correl_H4=correl_1_2;}
     }
    
  
    
//-----------------------------------------------------------------------------------------------------
double ma_osnval=iMA(osnval,timfr_rek,rek_period,0,ma_method,applied_price,0);
double ma_C_âàëþòîé=iMA(C_âàëþòîé,timfr_rek,rek_period,0,ma_method,applied_price,0);

//-----------------------------------------------------------------------------------------------------



if(Îáðàòíàÿ_êîððåëÿöèÿ  == false)
  {
   if(vkl==0 &&  eror1!=-1 && eror2!=-1 && eror11!=-1 && eror22!=-1 )
     {
   if(ma_osnval>MarketInfo(osnval,MODE_ASK) && ma_C_âàëþòîé<MarketInfo(C_âàëþòîé,MODE_BID) )
     {eror1=OrderSend(osnval,OP_BUY, Lot1,MarketInfo(osnval,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);
      eror22=OrderSend(C_âàëþòîé,OP_SELL, Lot2,MarketInfo(C_âàëþòîé,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);var=1;}
   if(ma_osnval<MarketInfo(osnval,MODE_BID) && ma_C_âàëþòîé>MarketInfo(C_âàëþòîé,MODE_ASK) )
     {eror11=OrderSend(osnval,OP_SELL, Lot1,MarketInfo(osnval,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);
      eror2=OrderSend(C_âàëþòîé,OP_BUY, Lot2,MarketInfo(C_âàëþòîé,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);var=2;}  
     }

   if(vkl!=0 && (Ñòîï=="0$" || Ñòîï=="0%") )
     { 
   if(ma_osnval>MarketInfo(osnval,MODE_ASK) && ma_C_âàëþòîé<MarketInfo(C_âàëþòîé,MODE_BID) && var==2)
     {CLOSEORDER();}
   if(ma_osnval<MarketInfo(osnval,MODE_BID) && ma_C_âàëþòîé>MarketInfo(C_âàëþòîé,MODE_ASK) && var==1)
     {CLOSEORDER();}
     }
   }
  
   
if(Îáðàòíàÿ_êîððåëÿöèÿ  == true)
  {
   if(vkl==0 &&  eror1!=-1 && eror2!=-1 && eror11!=-1 && eror22!=-1 )
     {
   if(ma_osnval>MarketInfo(osnval,MODE_ASK) && ma_C_âàëþòîé>MarketInfo(C_âàëþòîé,MODE_ASK) )
     {eror1=OrderSend(osnval,OP_BUY, Lot1,MarketInfo(osnval,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);
      eror2=OrderSend(C_âàëþòîé,OP_BUY, Lot2,MarketInfo(C_âàëþòîé,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);var=1;}
   if(ma_osnval<MarketInfo(osnval,MODE_BID) && ma_C_âàëþòîé<MarketInfo(C_âàëþòîé,MODE_BID) )
     {eror11=OrderSend(osnval,OP_SELL, Lot1,MarketInfo(osnval,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);
      eror22=OrderSend(C_âàëþòîé,OP_SELL, Lot2,MarketInfo(C_âàëþòîé,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);var=2;}  
     }

  if(vkl!=0 && (Ñòîï=="0$" || Ñòîï=="0%"))
     { 
   if(ma_osnval>MarketInfo(osnval,MODE_ASK) && ma_C_âàëþòîé>MarketInfo(C_âàëþòîé,MODE_ASK) && var==2)
     {CLOSEORDER();}
   if(ma_osnval<MarketInfo(osnval,MODE_BID) && ma_C_âàëþòîé<MarketInfo(C_âàëþòîé,MODE_BID) && var==1)
     {CLOSEORDER();}
     }
   }
   
  
   
  if(vkl!=0 && (Ïðîôèò!="0$" && Ïðîôèò!="0%"))
     {   
         if( StringFind(Ïðîôèò,"$",0)!=-1)
                         {
                         
                         trall=0;
                         profit=StrToInteger( Ïðîôèò);                            
                         if(Profit1>0 && Profit1>profit){CLOSEORDER();}
                         }
         if( StringFind(Ïðîôèò,"%",0)!=-1)
                         {
                         
                         trall=0;
                         profit=StrToInteger( Ïðîôèò);                             
                         if(Profit1>Ìèíèìóì && Profit1>AccountBalance( )/100*profit){CLOSEORDER();}
                         }
         if( StringFind(Ïðîôèò,"Òðàë",0)!=-1)
                         {
                         
                         profit=StrToInteger( Ïðîôèò);
                         
                         if(trall<Profit1){trall=Profit1;}                             
                         if(Profit1>Ìèíèìóì && trall>Ìèíèìóì && Profit1<trall-trall/100*profit){ trall=0;CLOSEORDER();}
                         
                         }
     }
 
   if(vkl!=0 && (Ñòîï!="0$" && Ñòîï!="0%"))
     {   
         if( StringFind(Ñòîï,"$",0)!=-1)
                         {                         
                         profitt=StrToInteger(Ñòîï);                            
                         if(Profit1<=-profitt){CLOSEORDER();}
                         }
         if( StringFind(Ñòîï,"%",0)!=-1)
                         {                         
                         profitt=StrToInteger(Ñòîï);                             
                         if(Profit1<=-AccountBalance( )/100*profitt){CLOSEORDER();}
                         }        
     }
 
//-----------------------------------------------------------------------------------------------------

if(eror1==-1 ){eror1=OrderSend(osnval,OP_BUY, Lot1,MarketInfo(osnval,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);}
if(eror11==-1 ){eror11=OrderSend(osnval,OP_SELL, Lot1,MarketInfo(osnval,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);}
if(eror2==-1 ){eror2=OrderSend(C_âàëþòîé,OP_BUY, Lot2,MarketInfo(C_âàëþòîé,MODE_ASK),2,0,0,"Çàìîê v1.4",Magic,3);}
if(eror22==-1 ){eror22=OrderSend(C_âàëþòîé,OP_SELL, Lot2,MarketInfo(C_âàëþòîé,MODE_BID),2,0,0,"Çàìîê v1.4",Magic,3);}


//----------------------------------------------------------------------------------------------------- 
 vkl=0;
 
   return(0);
  }

//--------------------------------------------------------------------
void vklutenie()
{
int tip,a;
Profit1=0;
for (int i=0; i<OrdersTotal(); i++) 
   {  
   if (OrderSelect(i, SELECT_BY_POS)==true) 
      {  
      tip = OrderType();
         if (OrderMagicNumber()==Magic)
            {
            vkl=1; a=a+1;
            Profit1=Profit1+OrderProfit( );
            if( osnval==OrderSymbol( )  && tip==OP_BUY){var=1;}
            if( osnval==OrderSymbol( )  && tip==OP_SELL){var=2;} 
            }
         
            
      }
     
   }
   
     if (a>=2)  { vkl=1;} 
     if (a==0)  {closs=0;}
     if (closs==1)  {CLOSEORDER();}
}

//-------------------------------------------------------------------------------------------------------

void CLOSEORDER()
{
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (Magic==OrderMagicNumber())
         { 
         if (OrderType()==OP_BUY)
            {OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_BID),3,CLR_NONE);
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_âàëþòîé,MODE_BID),3,CLR_NONE);}
            
         if (OrderType()==OP_SELL)
            {OrderClose(OrderTicket(),OrderLots(),MarketInfo(osnval,MODE_ASK),3,CLR_NONE);
             OrderClose(OrderTicket(),OrderLots(),MarketInfo(C_âàëþòîé,MODE_ASK),3,CLR_NONE);}
         }
            
      }   
   }
   closs=1;
}
//------------------âû÷èñëÿåì êîððåëÿöèþ-------------------------------------------------------
void correl()
{
double a1,a2;
double thisl1_2;
double sumraz_1, sumraz_2;
double znamen1_2;
for (int q=0;q<100;q++)
   {
   a1=a1+signal[q];      
   a2=a2+signal[q+100];  
   
   }
   a1=a1/100;    
   a2=a2/100;    
   
   
for (int q1=0;q1<100;q1++)
   {  
   thisl1_2=thisl1_2+(signal[q1]-a1)*(signal[q1+100]-a2);
   
   }
for (int q2=0;q2<100;q2++)
   {
   sumraz_1=sumraz_1+MathPow((signal[q2]-a1),2);
   sumraz_2=sumraz_2+MathPow((signal[q2+100]-a2),2);
   
   }
   
  
   
   if(sumraz_1!=0 && sumraz_2!=0) {znamen1_2=MathSqrt(sumraz_1)*MathSqrt(sumraz_2);}
   
   
   if(sumraz_1!=0 && sumraz_2!=0) {correl_1_2=thisl1_2/znamen1_2;}
   
  
}

//------------------------------êîìïèíñàöèÿ ëîòîì---------------------------------------------------------
void compins()
{
double osn_sv,c_val_sv;
for (int q=0;q<=100;q++)
    {
    osn_sv=osn_sv+( iHigh(osnval,timfr_rek,q)- iLow(osnval,timfr_rek,q));
    c_val_sv=c_val_sv+( iHigh(C_âàëþòîé,timfr_rek,q)- iLow(C_âàëþòîé,timfr_rek,q));
    }
    osn_sv=osn_sv/100;
    c_val_sv=c_val_sv/100;
    if(osn_sv>c_val_sv){Lot2=Lot*(osn_sv/c_val_sv);Lot1=Lot;}
    if(osn_sv<c_val_sv){Lot1=Lot*(c_val_sv/osn_sv);Lot2=Lot;}
    if(osn_sv==c_val_sv){Lot1=Lot;Lot2=Lot;}
}
//------------------------------îðïòèìèçàòîð--------------------------------------------------------------
void optimizator()
{
    punn=0;timfr_rek=0;rek_period=0;sdelok=0;
    double a,b,pun1,pun2,pun,spread_osn,spread_C_âàë,sdelok1;
    int vari,g1;
    
      ObjectCreate("c",OBJ_LABEL ,0,0,0,0,0,0,0);
      ObjectSetText("c","ÎÏÒÈÌÈÇÀÖÈß" , 50, "Times New Roman",Red );
      ObjectSet("c",OBJPROP_TIMEFRAMES,NULL);
      ObjectSet("c",OBJPROP_XDISTANCE,250);
      ObjectSet("c",OBJPROP_YDISTANCE,100);
      
      
      
    
    spread_osn=MarketInfo(osnval,MODE_SPREAD)*MarketInfo(osnval,MODE_POINT);
    spread_C_âàë=MarketInfo(C_âàëþòîé,MODE_SPREAD)*MarketInfo(C_âàëþòîé,MODE_POINT);
for (int g=1;g<=6;g++)
    {
    
for (int u=2;u<=150;u++)
    {
     pun=0;sdelok1=0;
for (int y=Áàðû_îïòèìèçàöèè;y>=0;y--)
    {
    if(g==1){g1=1;}if(g==2){g1=5;}if(g==3){g1=15;}if(g==4){g1=30;}if(g==5){g1=60;}if(g==6){g1=240;}
    double ma_osn=iMA(osnval,g1,u,0,ma_method,applied_price,y);
    double ma_C_âàë=iMA(C_âàëþòîé,g1,u,0,ma_method,applied_price,y);
    double cen_osn= iMA(osnval,g1,1,0,ma_method,applied_price,y);
    double cen_C_âàë= iMA(C_âàëþòîé,g1,1,0,ma_method,applied_price,y);

//-----------------------------------------------------------------------------------------------------------------
if(Îáðàòíàÿ_êîððåëÿöèÿ  == false)
  {    
     if(ma_osn>cen_osn+spread_osn && ma_C_âàë<cen_C_âàë-spread_C_âàë && (vari==2||vari==0))
      {
      vari=1;
      if(a==0 && b==0){a=cen_osn+spread_osn;b=cen_C_âàë-spread_C_âàë;} else
         {
         sdelok1=sdelok1+1;
         pun1=a-cen_osn;pun2=cen_C_âàë-b;pun=pun+(pun1+pun2);
         a=cen_osn+spread_osn;b=cen_C_âàë-spread_C_âàë;
         }
      }
    if(ma_osn<cen_osn-spread_osn && ma_C_âàë>cen_C_âàë+spread_C_âàë  && (vari==1||vari==0))
      {
      vari=2;
      if(a==0 && b==0){a=cen_osn-spread_osn;b=cen_C_âàë+spread_C_âàë;} else
         {
         sdelok1=sdelok1+1;
         pun1=cen_osn-a;pun2=b-cen_C_âàë;pun=pun+(pun1+pun2);
         a=cen_osn-spread_osn;b=cen_C_âàë+spread_C_âàë;
         }
      }
   }
if(Îáðàòíàÿ_êîððåëÿöèÿ  == true)
  {    
    if(ma_osn>cen_osn+spread_osn && ma_C_âàë>cen_C_âàë+spread_C_âàë && (vari==2||vari==0))
      {
      vari=1;
      if(a==0 && b==0){a=cen_osn+spread_osn;b=cen_C_âàë+spread_C_âàë;} else
         {
         sdelok1=sdelok1+1;
         pun1=a-cen_osn;pun2=b-cen_C_âàë;pun=pun+(pun1+pun2);
         a=cen_osn+spread_osn;b=cen_C_âàë+spread_C_âàë;
         }
      }
    if(ma_osn<cen_osn-spread_osn && ma_C_âàë<cen_C_âàë-spread_C_âàë  && (vari==1||vari==0))
      {
      vari=2;
      if(a==0 && b==0){a=cen_osn-spread_osn;b=cen_C_âàë-spread_C_âàë;} else
         {
         sdelok1=sdelok1+1;
         pun1=cen_osn-a;pun2=cen_C_âàë-b;pun=pun+(pun1+pun2);
         a=cen_osn-spread_osn;b=cen_C_âàë-spread_C_âàë;
         }
      }
   }
//-----------------------------------------------------------------------------------------------------------------
      
    }
    if(pun>punn && sdelok1>=sdelok){punn=pun;rek_period=u;timfr_rek=g1;sdelok=sdelok1;}
    }
    }
   
   ObjectDelete("c");  
}

Comments