Author: Copyright � 2008, ������ ������� ����������
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicator
12 Views
0 Downloads
0 Favorites
FutureMA
//+------------------------------------------------------------------+
//|                                               FurureFractals.mq4 |
//|                     Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷ |
//|                                             vitalya_1983@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Äåì¸õèí Âèòàëèé Åâãåíüåâè÷"
#property link      "vitalya_1983@list.ru"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
extern int  Kol_vo_sovpadenii =  5,
            tocnost           =  10,
            analiz_bars       =  8,
            poisk_fractals    =  4,
            minTP             =  30;
extern bool TrailingStop      =  false,
            Ruchnik           =  false,
            dokupka           =  true;

extern double  Stat_Take_Profit  =  0.5,
               zabyvaemost    =  1.5;
bool Proverka_buy,Proverka_sell;
string nash_grafik;
static datetime New_time;
int i,magic_number,shethik;
int init()
  {
//----
   shethik  =1;
   magic_number = Period();
   nash_grafik = Symbol() +"_"+ Period ();
      New_time=Time[0];
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   nash_grafik = NULL;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
//----------------------------------------------ñîñòàâëåíèå ïîñëåäîâàòåëüíîñòè áàðîâ
   if (TrailingStop)
      Trailing_start ();
   if (New_time!=Time[0])
   {
      int history1 [1000];
      int history2 [1000];
      
      for (int i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         history1 [i] = NormalizeDouble((tocnost*(iMA(NULL,0,24,0,MODE_SMMA,PRICE_MEDIAN,i)-iMA(NULL,0,6,0,MODE_SMMA,PRICE_MEDIAN,i)))/(100*Point),0);
         }
      /*for (i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         history2 [i] = NormalizeDouble((tocnost*(iMA(NULL,0,24,0,MODE_SMMA,PRICE_MEDIAN,i+1)-iMA(NULL,0,6,0,MODE_SMMA,PRICE_MEDIAN,i+1)))/(100*Point),0);
         }*/
   //--------------------------------îòêðûâàåì èëè ñîçäàåì ôàéë ñ äàííîé ïîñëåäîâàòåëüíîñòüþ
      
      for (i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         string posledovatelnost =posledovatelnost+history1 [i]+"_";
         }
      /*for (i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         posledovatelnost =posledovatelnost+history2 [i]+"_";
         }*/
      posledovatelnost = posledovatelnost +".csv";
      int nash_file=FileOpen ("FutureMA_"+nash_grafik+"/"+posledovatelnost, FILE_CSV|FILE_READ,',');
      if (nash_file<0)
         {
         bool new_file=true;
         shethik ++;
         }
      else 
         {
         new_file=false;
         FileClose (nash_file);
         }
      nash_file=FileOpen ("FutureMA_"+nash_grafik+"/"+posledovatelnost, FILE_CSV|FILE_READ|FILE_WRITE,',');
   
   //---------------------------------------------------------îïðåäåëÿåì ñðåäè íèõ ôðàêòàëû
      double MaxHighPik = High [poisk_fractals]; //Íà÷èíàåì ñðàâíèâàòü áàðû
      double MaxLowPik = Low [poisk_fractals];  
      for (i=poisk_fractals; i>=1; i--)
         {
         if (MaxHighPik < High [i])
            {
            MaxHighPik = High [i];     
            }
         if (MaxLowPik > Low [i])
            {
            MaxLowPik = Low [i];       
            }
         }
         
      double Fractal_Up = (MaxHighPik - Open [poisk_fractals])/Point;
      double Fractal_Down = (Open [poisk_fractals]-MaxLowPik)/Point;
   //-------------------------------------------------ðåäàêòèðóåì íàø ôàéë
      double setka [1] [1];
   /*
         |êîë-âî îáðàùåíèé |Òåéêïðîôèò |
         |                 |           |
   ------------------------------------|
   Buy   |        0        |     0     |
   ------------------------------------|
   Sell  |        0        |     0     |
   */ if (!new_file)
         {
         FileSeek (nash_file, 0,SEEK_SET);
         int Buy_Kol_vo_obraschenii    = FileReadNumber (nash_file);
         int Buy_Take_Profit           = FileReadNumber (nash_file);
         int Sell_Kol_vo_obraschenii   = FileReadNumber (nash_file);
         int Sell_Take_Profit          = FileReadNumber (nash_file);
         }
      if (new_file)
         {
         Buy_Kol_vo_obraschenii        = 0;
         Buy_Take_Profit               = 0;
         Sell_Kol_vo_obraschenii       = 0;
         Sell_Take_Profit              = 0;
         }
   //----------------------------------------------------Ðàáîòà ñ äàííûìè
      if (Fractal_Up>=Fractal_Down)
         {
         Buy_Kol_vo_obraschenii++;
         Buy_Take_Profit=NormalizeDouble((Buy_Take_Profit+Fractal_Up*zabyvaemost)/(1+zabyvaemost),0);
         Sell_Take_Profit=NormalizeDouble((Sell_Take_Profit-Fractal_Up*zabyvaemost)/(1+zabyvaemost),0);
         }
      if (Fractal_Down>=Fractal_Up)
         {
         Sell_Kol_vo_obraschenii++;
         Sell_Take_Profit=NormalizeDouble((Sell_Take_Profit+Fractal_Down*zabyvaemost)/(1+zabyvaemost),0);
         Buy_Take_Profit=NormalizeDouble((Buy_Take_Profit-Fractal_Down*zabyvaemost)/(1+zabyvaemost),0);
         }
//-------------------------------------------------------------------çàïèñü â ôàéë
      FileSeek (nash_file,0,SEEK_SET);
      FileWrite (nash_file,
                           Buy_Kol_vo_obraschenii,
                           Buy_Take_Profit);
                        
      FileWrite (nash_file,
                           Sell_Kol_vo_obraschenii,
                           Sell_Take_Profit);
      FileClose (nash_file);
      
         
//------------------------------------------------------------------èùåì ñîâïàäåíèÿ â ãðàôèêå         
      for (i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         history1 [i] = NormalizeDouble((tocnost*(iMA(NULL,0,24,0,MODE_SMMA,PRICE_MEDIAN,i)-iMA(NULL,0,6,0,MODE_SMMA,PRICE_MEDIAN,i)))/(100*Point),0);
         }
      /*for (i=analiz_bars+poisk_fractals;i>poisk_fractals;i--)
         {
         history2 [i] = NormalizeDouble((tocnost*(iMA(NULL,0,24,0,MODE_SMMA,PRICE_MEDIAN,i+1)-iMA(NULL,0,6,0,MODE_SMMA,PRICE_MEDIAN,i+1)))/(100*Point),0);
         }*/
      
//---------------------------------------------------îòêðûâàåì ôàéë ñ äàííîé ïîñëåäîâàòåëüíîñòüþ
      
      
      for (i=analiz_bars;i>=1;i--)
         {
         string nasha_posledovatelnost=nasha_posledovatelnost+history1 [i]+"_";
         }
      /*for (i=analiz_bars;i>=1;i--)
         {
         nasha_posledovatelnost=nasha_posledovatelnost+history2 [i]+"_";
         }*/
      nasha_posledovatelnost= nasha_posledovatelnost +".csv";
      nash_file=FileOpen ("FutureMA_"+nash_grafik+"/"+nasha_posledovatelnost, FILE_CSV|FILE_READ,',');
      if (nash_file>0)
         {
         FileClose (nash_file);
         nash_file=FileOpen ("FutureMA_"+nash_grafik+"/"+posledovatelnost, FILE_CSV|FILE_READ|FILE_WRITE,',');
         FileSeek (nash_file, 0,SEEK_SET);
         Buy_Kol_vo_obraschenii    = FileReadNumber (nash_file);
         Buy_Take_Profit           = FileReadNumber (nash_file);
         Sell_Kol_vo_obraschenii   = FileReadNumber (nash_file);
         Sell_Take_Profit          = FileReadNumber (nash_file);
         FileClose (nash_file);
         if (!Proverka_buy ()||(dokupka&&New_time!= Time [0])) 
            {
            if (!Ruchnik&& Buy_Take_Profit>=Sell_Take_Profit)// Åñëè Àëëèãàòîð äàë êîìàíäó èëè íå ìåøàåò...
               {
               double TP = NormalizeDouble ((Buy_Take_Profit*Stat_Take_Profit)*Point,Digits);
               for (i=OrdersTotal();i>=1;i--)
                  {
                  OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
                  if (OrderType () == OP_SELL&&OrderSymbol() == Symbol()&& OrderMagicNumber () == magic_number)
                     {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
                     }
                  }
               if (Buy_Kol_vo_obraschenii>Kol_vo_sovpadenii&&Buy_Take_Profit>minTP)
                  {
                  OrderSend (Symbol(),OP_BUY, 0.1,Ask,3,Bid-Buy_Take_Profit*Point,Bid+TP,0,magic_number);
                  }
               }
            }
         if (!Proverka_sell()||(dokupka&&New_time != Time[0])) //Åñëè îòêðûòûõ îðäåðîâ íåò...
            {
            if (!Ruchnik&& Buy_Take_Profit<=Sell_Take_Profit)
               {
               for (i=OrdersTotal();i>=1;i--)
                  {
                  OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
                  if (OrderType () == OP_BUY&&OrderSymbol() == Symbol()&& OrderMagicNumber () == magic_number)
                     {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Blue);
                     }
                  }
               if (Sell_Kol_vo_obraschenii>Kol_vo_sovpadenii&&Sell_Take_Profit>minTP)
                  {
                  TP = NormalizeDouble ((Sell_Take_Profit*Stat_Take_Profit)*Point,Digits);
                  OrderSend (Symbol(),OP_SELL, 0.1,Bid,3,Ask+Sell_Take_Profit*Point,Ask-TP,0,magic_number);
                  }
               }
            }
         }
      }
//----
   return(0);
  }
//+------------------------------------------------------------------+
   bool Proverka_buy()
   {
   bool Otkryt_orders_buy = false; //ôëàã "îòêðûòûõ îðäåðîâ íåò"
   for (i = OrdersTotal(); i>=1; i--)
      {
      OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() == OP_BUY && OrderSymbol () ==Symbol() && OrderMagicNumber() == magic_number)
      Otkryt_orders_buy = true; //Ïîïàëñÿ!!!
      }
   if (Otkryt_orders_buy==true)
      return(true);
   else 
      {
      return (false);
      }
   }
//--------------------------

bool Proverka_sell()
   {
   bool Otkryt_orders_sell = false;
   for (i = OrdersTotal() ; i>=1; i--)
      {
      
      OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() == OP_SELL && OrderSymbol () ==Symbol() && OrderMagicNumber() == magic_number)  
      Otkryt_orders_sell= true;
      }
   if (Otkryt_orders_sell==true)
      return(true);
   else 
      {
      return (false);
      }
   }

//------------------------------------------------------------
int Trailing_start ()
   {
   
   for (i = OrdersTotal(); i>=1; i--)
      {
      RefreshRates();
      OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES);
      
      if(OrderType() == OP_BUY && OrderSymbol () ==Symbol() && OrderMagicNumber() == magic_number)
         {
         int Trailing = NormalizeDouble ((OrderTakeProfit()-OrderOpenPrice())/4,0);
         if(Bid>Point*Trailing +OrderOpenPrice()&&OrderStopLoss()<Bid-Point*Trailing)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,0);
            Sleep (1000);
            }
         }
      if(OrderType() == OP_SELL && OrderSymbol () ==Symbol() && OrderMagicNumber() == magic_number)
         {
          Trailing = NormalizeDouble ((OrderOpenPrice()-OrderTakeProfit())/4,0);
         if(OrderOpenPrice()-Ask>Point*Trailing&&OrderStopLoss()>Ask+Point*Trailing)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0,0);
            Sleep (1000);
            }
         }  
      }
   return (0);
   }

Comments