TrendCapture





//+------------------------------------------------------------------+
//|                                                         Prev.mq4 |
//|                              Copyright © 2006, Yury V. Reshetov. |
//|                                       http://betaexpert.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yury V. Reshetov. ICQ: 282715499"
#property link      "http://betaexpert.narod.ru"

#include <stdlib.mqh>


//---- Âõîäíûå ïàðàìåòðû

// Ìû ñîãëàñíû íà òàêóþ ïðèáûëü è íàì ÷óæîãî íå íàäî
extern double     TakeProfit=180.0;
// Åñëè ìû ïðîñ÷èòàëèñü, òî òàêîé óáûòîê íàñ âïîëíå óñòðîèò
extern double     StopLoss=50.0;
// Îïòèìàëüíàÿ äîëÿ íàøèõ äåíüæàò, êîòîðóþ ìû ìîæåì ïðîäóòü 
// áåç ðèñêà îñòàòüñÿ áåç ïîðòêîâ
extern double     MaximumRisk = 0.03;
// Çäåñü ìû áóäåì çàïîìèíàòü âðåìÿ ïîñëåäíåãî ñôîðìèðîâàâøåãîñÿ áàðà
static int        prevtime = 0;

//+------------------------------------------------------------------+
//|              Ïîåõàëè!                                            |
//+------------------------------------------------------------------+
int start() {
   // Äëÿ íà÷àëà íå ìåøàåò óáåäèòüñÿ, ÷òî ñôîðìèðîâàëñÿ íîâûé áàð
   // Èíà÷å áðîêåð ìîæåò îòêðûòü ïîçèöèþ è âíå ðûíêà,
   // òîãäà õðåí äîêàæåøü, ÷òî îò áûë íåïðàâ.
   // Ê òîìó æå, èíäèêàòîðû ïðè âíóòðèáàðîâîé òîðãîâëå ìîãóò 
   // ìåíÿòü ïîêàçàíèÿ êàê èì óäóìàåòñÿ - ñåìü ïÿòíèö íà íåäåëå.
   if (Time[0] == prevtime) return(0);
   // Çàïîìíèì òåêóùèé áàð
   prevtime = Time[0];
   // Ñêîëüêî ïîçèöèé ó íàñ îòêðûòî?
   int total = OrdersTotal();
   // Íîìåð òèêåòà 
   int ticket = -1;
   for(int cnt = 0; cnt < total; cnt++) {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      // åñëè ýòî îòêðûòàÿ ïîçèöèÿ è èíñòðóìåíò ñîâïàäàåò
      if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
         ticket = OrderTicket();
      }
   }
   // Åñëè åñòü óæå îòêðûòàÿ ïîçèöèÿ, òî íîâóþ îòêðûâàòü íå ñòîèò
   if (ticket < 0) {
      int cmd = OP_BUY;
      // Ñêîëüêî ó íàñ çàêðûòûõ îðäåðîâ?
      int htotal = HistoryTotal();
      // Ïîêîïàåìñÿ â èñòîðèè ñ÷åòà
      for(int i = 0; i < htotal; i++) {
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false) { 
            Print("Îøèáêà â èñòîðèè ñ÷åòà! Îáðàòèñü ê áðîêåðó! Ìîæåò îí óêðàë íàøè äåíåæêè è ïîäòåð ñëåäû?"); 
            break; 
         }
         // Åñëè îðäåð íàøåãî ñèìâîëà è îí äî çàêðûòèÿ 
         // íå áûë ëèìèòíûì
         if ((OrderSymbol()!= Symbol()) || (OrderType() > OP_SELL)) 
            continue;
         // Åñëè îðäåð áûë çàêðûò ñ ïðèáûëüþ, òî áèøü ïî TakeProfit
         if (OrderProfit() > 0) {
            // Çíà÷èò ñëåäóþùàÿ ïîçèöèÿ áóäåò â òîì æå íàïðàâëåíèè
            cmd = OrderType();
         } else { // â ïðîòèâíîì ñëó÷àå, 
                  // ðûíîê óæå ðàçâåðíóëñÿ
                  // è íàì òóäà æå
            if (OrderType() == OP_SELL) {
               cmd = OP_BUY;
            } else {
               cmd = OP_SELL;
            }
         }
      }  
      // ×òî òàì øåï÷óò èíäèêàòîðû?
      double sar = iSAR(NULL, 0, 0.02, 0.2, 0);
      double adx = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MAIN, 0);
      if (cmd == OP_BUY) { // Åñëè îòêðûâàåì äëèííóþ ïîçèöèþ
         // Æäåì êîãäà òðåíä íåìíîãî ïðèïîäûìåòñÿ
         // è íà ðûíêå âñå ñïîêîéíî
         if ((sar < Close[0]) && (adx < 20)) { 
            // Ïîêóïàåì
            ticket=OrderSend(Symbol(),OP_BUY, LotsOptimized(), Ask, 3, Bid - StopLoss * Point, Ask + TakeProfit * Point, "TrendCapture", 16384, 0, Blue);
            // Çàïèøåì â æóðíàë, êàê îòðåàãèðîâàë áðîêåð
            if(ticket > 0) {
               if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                  Print("Äëèííàÿ ïîçèöèÿ îòêðûòà ïî öåíå : ",OrderOpenPrice());
            } else 
               Print(ErrorDescription(GetLastError())); 
            return(0); 
         }
      } else { // Åñëè îòêðûâàåì êîðîòêóþ ïîçèöèþ
         // Æäåì êîãäà òðåíä íåìíîãî ïðèñÿäåò 
         // è íà ðûíêå âñå ñïîêîéíî
         if ((sar > Close[0]) && (adx < 20)) { 
            // Ïðîäàåì
            ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Ask + StopLoss * Point,Bid-TakeProfit*Point,"TrendCapture",16384,0,Red);
            // Çàïèøåì â æóðíàë, êàê îòðåàãèðîâàë áðîêåð
            if(ticket > 0) {
               if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
                  Print("Êîðîòêàÿ ïîçèöèÿ îòêðûòà ïî öåíå : ",OrderOpenPrice());
            } else 
               Print(ErrorDescription(GetLastError())); 
            return(0); 
         }
      } 
   }
   
      // Ïðåäîõðàíèòåëü
   double    Guard = 5.0;
   OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderType()==OP_BUY) {  // äëèííàÿ îòêðûòàÿ ïîçèöèÿ
      // Åñëè òåêóùàÿ öåíà ïîçâîëÿåò âûñòàâèòü ïðåäîõðàíèòåëü             
      if(Bid-OrderOpenPrice()>Point*Guard) {
         // Åñëè çàùèòà ñòîèò â óáûòêå
         if(OrderStopLoss() < OrderOpenPrice()) {
            // Çà ÷òî êóïèë, çà òî è ïðîäàþ
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Blue);
            // Âûõîäèì
            return(0);
         }
      }
              
   }
   else // Åñëè ïîçèöèÿ êîðîòêàÿ
   {
      // Åñëè òåêóùàÿ öåíà ïîçâîëÿåò âûñòàâèòü ïðåäîõðàíèòåëü             
      if((OrderOpenPrice() - Ask) > (Point*Guard)) {
         // Åñëè çàùèòà ñòîèò â óáûòêå
         if(OrderStopLoss() > OrderOpenPrice()) {
            // Çà ÷òî êóïèë, çà òî è ïðîäàþ
            OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0, Red);
            // Âûõîäèì
            return(0);
         }
      }
   }
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Money Management                                                 |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot = 0.1;
   int    losses = 0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- return lot size
   if (lot > 100) lot = 100;
   if(lot < 0.1) lot = 0.1;
   return(lot);
}
//+----------------- Âîò è ñêàçêå çâèçäåö ----------------+





Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:

Parabolic Stop and Reverse system
Movement directional index


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders

It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

BackTest : USDJPY on H1

From 2009-11-01 to 2009-11-30 Profit Factor:1.10 Total Net Profit:16.60

BackTest : USDCHF on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.04 Total Net Profit:-1425.37

BackTest : EURUSD on H1

From 2009-12-01 to 2010-01-17 Profit Factor:0.68 Total Net Profit:-200.40

BackTest : USDCAD on H1

From 2009-12-01 to 2010-01-01 Profit Factor:0.97 Total Net Profit:-8.99

BackTest : EURUSD on H1

From 2009-08-01 to 2009-10-01 Profit Factor:0.45 Total Net Profit:-537.36

BackTest : GBPUSD on H1

From 2010-01-01 to 2010-02-27 Profit Factor:0.38 Total Net Profit:-621.00

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for TrendCapture


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: