Zamok_v1_4_1

Author: Copyright � 2012, ������ ������ �������
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
0 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

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