exp_tocloseloss

Author: Copyright � 2011, Nikolay Kositsin
0 Views
0 Downloads
0 Favorites
exp_tocloseloss
//+------------------------------------------------------------------+
//|                                              Exp_ToCloseLoss.mq5 |
//|                             Copyright © 2011,   Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Nikolay Kositsin"
#property link      "farria@mail.redcom.ru"
#property version   "1.00"
//+------------------------------------------------+
//| Expert Advisor input parameters                |
//+------------------------------------------------+
input double MaxLoss=1000.00;  //Maximum profit 
//+------------------------------------------------+

//+------------------------------------------------------------------+
//  Trading algorithms                                               | 
//+------------------------------------------------------------------+
#include <TradeAlgorithms.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//----
   Comment("");
   GlobalVariableDel(GetMaxLossLevelName());
//----
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//----
   double profit=AccountInfoDouble(ACCOUNT_PROFIT);
   MaxLossLevelSet(profit,MaxLoss);
   MaxLossLevelDel();
   string info;
   StringConcatenate(info,"Loss = ",DoubleToString(profit,2),"; MaxLoss = ",DoubleToString(MaxLoss,2),";");
   Comment(info);

//+----------------------------------------------+
//| Performing deals                             |
//+----------------------------------------------+
   if(MaxLossLevelCheck(profit))
      for(int pos=PositionsTotal()-1; pos>=0; pos--)
        {
         string symbol=PositionGetSymbol(pos);
         //---- Closing a long position
         bool BUY_Close=true;
         BuyPositionClose(BUY_Close,symbol,10);

         //---- Closing a short position 
         bool SELL_Close=true;
         SellPositionClose(SELL_Close,symbol,10);
        }
  }
//+------------------------------------------------------------------+
//| GetMaxLossLevelName() function                                   |
//+------------------------------------------------------------------+
string GetMaxLossLevelName()
  {
//----
   string G_Name_;
   StringConcatenate(G_Name_,"MaxLoss_",AccountInfoInteger(ACCOUNT_LOGIN));
//----
   return(G_Name_);
  }
//+------------------------------------------------------------------+
//| MaxLossLevelCheck() function                                     |
//+------------------------------------------------------------------+
bool MaxLossLevelCheck(double Loss)
  {
//---- Getting the name of a global variable
   string G_Name_=GetMaxLossLevelName();

//---- Checking for the profit level triggering 
   if(GlobalVariableCheck(G_Name_) && GlobalVariableGet(G_Name_)==1) return(true);
//----
   return(false);
  }
//+------------------------------------------------------------------+
//| MaxLossLevelSet() function                                       |
//+------------------------------------------------------------------+
void MaxLossLevelSet(double Loss,double Max_Loss)
  {
//----
   string G_Name_=GetMaxLossLevelName();
   if(Loss<=-Max_Loss) GlobalVariableSet(G_Name_,1);
//----
  }
//+------------------------------------------------------------------+
//| MaxLossLevelDel() function                                       |
//+------------------------------------------------------------------+
void MaxLossLevelDel()
  {
//---- Getting the name of a global variable
   string G_Name_=GetMaxLossLevelName();
   if(GlobalVariableCheck(G_Name_) && !PositionsTotal()) GlobalVariableDel(G_Name_);
//----
  }
//+------------------------------------------------------------------+

Comments