CurrentInfo





//+------------------------------------------------------------------+
//|                                                Donchian.mq4 |
//|                                                   Andrei Andreev |
//|                                             http://www.andand.ru |
//+------------------------------------------------------------------+

// BASED ON:
//+------------------------------------------------------------------+
//|                                                   ^X_Sensors.mq4 |
//|                                                    Version 2.0.1 |
//|------------------------------------------------------------------|
//|                     Copyright © 2007, Mr.WT, Senior Linux Hacker |
//|                                     http://w-tiger.narod.ru/wk2/ |
//+------------------------------------------------------------------+
#property copyright "Andrei Andreev"
#property link      "http://www.andand.ru"

#property indicator_chart_window

extern int ForDays=10;



int _N_Time, ObjectId;
string OBJECT_PREFIX = "LEVELS";
int _My_Period=PERIOD_D1;
//-------------------------------------------------------------------------------------------
int init() {
_N_Time = 0;
return(0);
}
//-------------------------------------------------------------------------------------------
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {

//if ( _N_Time == Time[0] ) return(0);

double _rates[][6];

double open,close, high, low;
double AverageRange;

ArrayCopyRates(_rates, NULL, _My_Period);
int err = GetLastError();
if(err == 4066) 
  {
  Sleep(1000);
  if(iClose(NULL, _My_Period, 0) != Close[0]) 
    {
     Sleep(1000);
     return(0);
     }
  }
close = _rates[1][4];
high = _rates[0][3];
low = _rates[0][2];
open = _rates[0][1];

AverageRange=0;
for (int i=1;i<ForDays+1;i++)
    {
    AverageRange=AverageRange+(_rates[i][3]-_rates[i][2])/Point;
    }
AverageRange=NormalizeDouble(AverageRange/ForDays,0); 

double Risk=0.05;
double N=NormalizeDouble(iATR(Symbol(),0,96,1)/Point,0);
double pips=MarketInfo(Symbol(),MODE_TICKVALUE);
double NUS=NormalizeDouble(N*pips,0);

Comment( "\nÏðèáûëüíûõ ñäåëîê  : ",TotalProfitableDeals()," íà ",ProfitableDealsAmount()," òóãðèêîâ",
         "\nÓáûòî÷íûõ ñäåëîê    : ",TotalLoosingDeals()," íà ",-LoosingDealsAmount()," òóãðèêîâ",
         "\nÏðèáûëü ïî ñòîïàì  : ", NormalizeDouble(TotalProfitByStops(),0)," òóãðèêîâ",
         "\nÎòëîæåííûõ ñäåëîê : ",CalculatePendingTotal(),
         "\n",
         "\nÄíåâíîé äèàïàçîí:",
         "\nÑåãîäíÿ   :  ",(high-low)/Point," ïèïñîâ",
         "\nÂ÷åðà       : ",(_rates[1][3]-_rates[1][2])/Point," ïèïñîâ",
         "\nÑðåäíèé   :  ",AverageRange," ïèïñîâ"," çà ",ForDays," äíåé",
         "\nÎäèí ïèïñ : ",pips," òóãðèêîâ"
         );  
              



   
_N_Time = Time[0];
//---- End Of Program
return(0);
}
//+------------------------------------------------------------------+
double TotalProfitByStops()
{
int cnt, ticket, total;
double Profit=0;
   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if (OrderStopLoss()!=0)
      {   
      if(OrderType()==OP_BUY)  Profit=Profit+(OrderStopLoss()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)+OrderSwap();
      if(OrderType()==OP_SELL) Profit=Profit+(OrderOpenPrice()-OrderStopLoss())/MarketInfo(OrderSymbol(),MODE_POINT)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE)+OrderSwap();
      }
     } 
return (Profit);    
} 




double TotalProfitableDeals()
{
int cnt, ticket, total;
double ProfitableDeals=0;
   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if (OrderProfit()>0)
      {  
      ProfitableDeals=ProfitableDeals+1; 
      }
     } 
return (ProfitableDeals);    
} 

double ProfitableDealsAmount()
{
int cnt, ticket, total;
double Amount=0;
   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if (OrderProfit()>0)
      {   
      Amount=Amount+(OrderProfit()+OrderSwap());
      }
     } 
return (Amount);    
} 

double LoosingDealsAmount()
{
int cnt, ticket, total;
double Amount=0;
   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if (OrderProfit()<0)
      {
      Amount=Amount+(OrderProfit()+OrderSwap());
      }
     } 
return (Amount);    
} 


double TotalLoosingDeals()
{
int cnt, ticket, total;
double LoosingDeals=0;
   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
  if (OrderProfit()<0)
      {  
      LoosingDeals=LoosingDeals+1; 
      }
     } 
return (LoosingDeals);    
} 

int CalculatePendingTotal()
  {
   int cmd;
   int orders=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         cmd=OrderType();
         if(cmd!=OP_BUY && cmd!=OP_SELL) orders++;

     }
//---- return orders volume
  return(orders);
  
  }   

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





Sample





Analysis



Market Information Used:

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


Indicator Curves created:


Indicators Used:

Indicator of the average true range


Custom Indicators Used:

Order Management characteristics:
Checks for the total of open orders


Other Features: