Как начать работу с MQL5 - страница 26

 

Отмена последней позиции

Код: 'Reverse the last position.mq5'

//+------------------------------------------------------------------+
//|                                    Reverse the last position.mq5 |
//|                              Copyright © 2021, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2021, Vladimir Karputov"
#property version   "1.000"
//---
#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 uint     InpStopLoss       = 150;      // Stop Loss
input uint     InpTakeProfit     = 300;      // Take Profit
//---
double               m_stop_loss       = 0.0;         // Stop Loss         -> double
double               m_take_profit     = 0.0;         // Take Profit       -> double
ENUM_POSITION_TYPE   m_last_positions  = WRONG_VALUE; // last position type
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- forced initialization of variables
   m_stop_loss       = 0.0;         // Stop Loss         -> double
   m_take_profit     = 0.0;         // Take Profit       -> double
   m_last_positions  = WRONG_VALUE; // last position type
//---
   ResetLastError();
   if(!m_symbol.Name(Symbol())) // sets symbol name
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: CSymbolInfo.Name");
      return(INIT_FAILED);
     }
   RefreshRates();
//---
   m_stop_loss       = InpStopLoss     * m_symbol.Point();
   m_take_profit     = InpTakeProfit   * m_symbol.Point();
//--- initialize the generator of random numbers
   MathSrand(GetTickCount());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check if a position is present and display the time of its changing
   if(!PositionSelect(Symbol()))
     {
      if(m_last_positions==WRONG_VALUE)
        {
         if(!RefreshRates())
            return;
         int math_rand=MathRand();
         if(math_rand<32767/2)
           {
            //--- stop loss
            double sl=(m_stop_loss==0.0)?0.0:m_symbol.Ask()-m_stop_loss;
            if(m_stop_loss>0.0)
               sl=m_symbol.NormalizePrice(sl);
            //--- take profit
            double tp=(m_take_profit==0.0)?0.0:m_symbol.Ask()+m_take_profit;
            if(m_take_profit>0.0)
               tp=m_symbol.NormalizePrice(tp);
            //--- open buy
            Print("Start BUY ...");
            m_trade.Buy(1.0,m_symbol.Name(),m_symbol.Ask(),sl,tp);
           }
         else
           {
            //--- stop loss
            double sl=(m_stop_loss==0.0)?0.0:m_symbol.Bid()+m_stop_loss;
            if(m_stop_loss>0.0)
               sl=m_symbol.NormalizePrice(sl);
            //--- take profit
            double tp=(m_take_profit==0.0)?0.0:m_symbol.Bid()-m_take_profit;
            if(m_take_profit>0.0)
               tp=m_symbol.NormalizePrice(tp);
            //--- open sell
            Print("Start SELL ...");
            m_trade.Sell(1.0,m_symbol.Name(),m_symbol.Bid(),sl,tp);
           }
        }
      else
        {
         if(m_last_positions==POSITION_TYPE_BUY)
           {
            if(!RefreshRates())
               return;
            //--- stop loss
            double sl=(m_stop_loss==0.0)?0.0:m_symbol.Bid()+m_stop_loss;
            if(m_stop_loss>0.0)
               sl=m_symbol.NormalizePrice(sl);
            //--- take profit
            double tp=(m_take_profit==0.0)?0.0:m_symbol.Bid()-m_take_profit;
            if(m_take_profit>0.0)
               tp=m_symbol.NormalizePrice(tp);
            //--- open sell
            Print("Start SELL ...");
            m_trade.Sell(1.0,m_symbol.Name(),m_symbol.Bid(),sl,tp);
           }
         else
           {
            if(!RefreshRates())
               return;
            //--- stop loss
            double sl=(m_stop_loss==0.0)?0.0:m_symbol.Ask()-m_stop_loss;
            if(m_stop_loss>0.0)
               sl=m_symbol.NormalizePrice(sl);
            //--- take profit
            double tp=(m_take_profit==0.0)?0.0:m_symbol.Ask()+m_take_profit;
            if(m_take_profit>0.0)
               tp=m_symbol.NormalizePrice(tp);
            //--- open buy
            Print("Start BUY ...");
            m_trade.Buy(1.0,m_symbol.Name(),m_symbol.Ask(),sl,tp);
           }
        }
     }
   else
     {
      //--- receive position type
      m_last_positions=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
     }
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol.RefreshRates())
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","RefreshRates error");
      return(false);
     }
//--- protection against the return value of "zero"
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
     {
      Print(__FILE__," ",__FUNCTION__,", ERROR: ","Ask == 0.0 OR Bid == 0.0");
      return(false);
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
Файлы:
 
У меня возникают проблемы с подпиской на торговый сигнал, который я хочу скопировать
 
ifyboya:
У меня проблемы с подпиской на торговый сигнал, который я хочу скопировать
Как подписаться на сигналы MT4/MT5 -
https://www.mql5.com/en/forum/189731
(MT4)
https://www.mql5.com/en/forum/336422
(MT5)
How to Subscribe to a MT4 Signal (new instructions, after 1065 version upgrade)
How to Subscribe to a MT4 Signal (new instructions, after 1065 version upgrade)
  • 2017.04.10
  • www.mql5.com
Below are step by step instructions, of how to subscribe to a MΤ4 signal: 1. Register a MQL5 account: https://www.mql5.com/en/auth_register 2...
 
Владимир, не подскажете, как проверить, находится ли текущая цена на уровне поддержки и сопротивления?
 
Ahmad861 :
Владимир, подскажите, как можно проверить, находится ли текущая цена на уровне поддержки и сопротивления?

Это просто. Только сначала определитесь, что это за "уровни" :)

 
Vladimir Karputov:

Это просто. Только сначала решите, что это за "уровни" :)

Я не могу знать уровни, мне нужно проверять вручную, как мне автоматизировать эту процедуру

 
Ahmad861 :

Я не хочу знать уровни, мне нужно проверять вручную, как автоматизировать эту процедуру?

Начните с небольшой проблемы: опишите алгоритм "уровня". Начните воплощать свою идею в MQL5-коде. Тогда я помогу.

 

Я хочу закодировать следующую картинку для своего советника.

Вы можете видеть, что он формирует V-образную форму, но свечи не образуют четкого V

Я могу закодировать свечи так, чтобы они образовывали идеальную V-образную форму, но не могу понять, как это сделать.

 
Ahmad861 :

Я хочу закодировать следующий рисунок для своего эксперта

Вы можете видеть, что он формирует V-образную форму, но свечи не формируют очень четкую V

Я могу закодировать свечи так, чтобы они образовывали идеальную V-образную форму, но не могу понять, как это сделать.

Возможная идея: применить фракталы. Возможно, с фракталами картина станет более ясной ...

 
Vladimir Karputov:

Возможная идея: применить фракталы. Возможно, с фракталами картина станет яснее...

О, я должен изучить этот вопрос.