Советники: Pips Close Multicurrency

 

Pips Close Multicurrency:

Советник-утилита: закрывает позицию по любому символу и с любым Magic number если эта позиция убыточна на N- points

Pips Close Multicurrency

Автор: Vladimir Karputov

 

Добрый День Владимир !

Возможно в этом коде - чуть подправить, что бы он закрывал на той паре, где прикреплён ?

не Вы , переделывать. я спрашиваю, возможно ли такое - что бы я не зря тыкал.

 
Aleksandr Klapatyuk:

Добрый День Владимир !

Возможно в этом коде - чуть подправить, что бы он закрывал на той паре, где прикреплён ?

не Вы , переделывать. я спрашиваю, возможно ли такое - что бы я не зря тыкал.

Нужно чуть переписать

   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties

поставить 

   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name())


и вынести расчёт Стоп Лосс в OnInit() - тогда строка

         if(!SymbolInfoDouble(m_position.Symbol(),SYMBOL_POINT,points))
            continue;

окажется лишней

 
Vladimir Karputov:

Нужно чуть переписать

поставить 

Огромное Вам Спасибо!!! 

 
Vladimir Karputov:

Нужно чуть переписать

поставить 


и вынести расчёт Стоп Лосс в OnInit() - тогда строка

окажется лишней

Вот так - вроде работает !

Спасибо! Здоровья и Всех Благ!!! 

//+------------------------------------------------------------------+
//|                                     Pips Close Multicurrency.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
/*
   barabashkakvn Trading engine 3.104
*/
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position;                   // object of CPositionInfo class
CTrade         m_trade;                      // object of CTrade class
CSymbolInfo    m_symbol;                     // object of CSymbolInfo class
//--- input parameters
input ushort   InpStopLoss          = 15;          // Stop Loss, in pips (1.00045-1.00055=1 pips)
input ushort   InpTakeProfit        = 46;          // Take Profit, in pips (1.00045-1.00055=1 pips)
input ulong    InpDeviation         = 10;          // Deviation, in points (1.00045-1.00055=10 points)
input ulong    InpMagic             = 56390818;    // Magic number
//---
double m_adjusted_point;    // point value adjusted for 3 or 5 points
double m_stop_loss   = 0.0; // Stop Loss               -> double
double m_take_profit = 0.0; // Take Profit             -> double
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- initialize common information
   m_symbol.Name(Symbol()); // symbol
   m_trade.SetExpertMagicNumber(InpMagic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetDeviationInPoints(InpDeviation);
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;

   m_stop_loss   = InpStopLoss*m_adjusted_point;
   m_take_profit = InpTakeProfit*m_adjusted_point;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   OnTicktake_profit();
   OnTickstop_loss();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTicktake_profit()
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name())
           {
            double price_current = m_position.PriceOpen();
            double price_open    = m_position.PriceCurrent();

            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if((price_open-price_current)>=m_take_profit) // if the loss
                  m_trade.PositionClose(m_position.Ticket());
              }
            else
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if((price_current-price_open)>=m_take_profit) // if the loss
                     m_trade.PositionClose(m_position.Ticket());
                 }
           }
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTickstop_loss()
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name())
           {
            double price_current = m_position.PriceCurrent();
            double price_open    = m_position.PriceOpen();

            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if((price_open-price_current)>=m_stop_loss) // if the loss
                  m_trade.PositionClose(m_position.Ticket());
              }
            else
               if(m_position.PositionType()==POSITION_TYPE_SELL)
                 {
                  if((price_current-price_open)>=m_stop_loss) // if the loss
                     m_trade.PositionClose(m_position.Ticket());
                 }
           }
//---
  }
//+------------------------------------------------------------------+