Usar valor da variavel do EA em uma classe de outro arquivo

Para adicionar comentários, por favor Faça o login ou registrar
BRUNO CONTE DE FREITAS
31
BRUNO CONTE DE FREITAS  

Ola pessoal, vi vários artigos, códigos mas ainda não consegui compreender a questão de pegar o valor de uma variável inputs do robô e transferir para uma classe que esta em outro arquivo. Vou mandar um exemplo simples abaixo. Se algum puder dar uma luz eu agradeço.


Esse Código seria do Robo:

//+------------------------------------------------------------------+
//|                                                         Robo.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <TradeEntrada.mqh>

TradeEntrada _TradeEntrada;

input double            lote = 1; //*       Qtde de Contratos
input double            takeProfit = 100; //*       Stop Gain
input double            stopLoss = 100;//*       Stop Loss

double                        mmHandleBuffer[];//Buffer do Indicador
int                           mmHandle = INVALID_HANDLE;

MqlTick                       ultimoTick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
      mmHandle = iMA(_Symbol, _Period, 7, 0, MODE_EMA, PRICE_CLOSE);

      ArraySetAsSeries(mmHandleBuffer, true);
      ChartIndicatorAdd(ChartID(), 0,mmHandle);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
     if(ultimoTick.last>mmHandleBuffer[0])
      {
         _TradeEntrada.CompraMercado();
      } 
  }
//+------------------------------------------------------------------+


Esse outro código seria do outro arquivo que chama TradeEntrada. Nele esta a classe.:

//+------------------------------------------------------------------+
//|                                                        Trade.mqh |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
class TradeEntrada
  {
private:

public:
                     TradeEntrada();
                    ~TradeEntrada();
        bool        CompraMercado();
  };
  
      double        _lote = 1; //*       Qtde de Contratos
      double        _takeProfit = 100; //*       Stop Gain
      double        _stopLoss = 100;//*       Stop Loss
      MqlTick       _ultimoTick;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TradeEntrada::TradeEntrada()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
TradeEntrada::~TradeEntrada()
  {
  }
//+------------------------------------------------------------------+

bool TradeEntrada::CompraMercado()
   {
   
      MqlTradeRequest requisicao;
      MqlTradeResult resposta;

      ZeroMemory (requisicao);
      ZeroMemory (resposta);

      requisicao.action          = TRADE_ACTION_DEAL;
      requisicao.magic           = 123;
      requisicao.symbol          = _Symbol;
      requisicao.volume          = _lote;
      requisicao.price           = 0; //A Mercado
      requisicao.sl              = _ultimoTick.ask - _stopLoss;
      requisicao.tp              = _ultimoTick.ask + _takeProfit;
      requisicao.deviation       = 0;
      requisicao.type            = ORDER_TYPE_BUY;
      requisicao.type_filling    = ORDER_FILLING_FOK;
      requisicao.type_time       = ORDER_TIME_DAY;
      requisicao.expiration      = 0;
      requisicao.comment = "1ª Compra";
      
      ResetLastError();
      bool confirmacaoOrdem = OrderSend(requisicao,resposta);
         
      if( !confirmacaoOrdem )
         {
            Print ("Erro ao enviar ordem de compra a mercado. Erro: ", GetLastError(), " Descrição: ",resposta.comment);
         }
      else
         {
            Print ("Compra a mercado enviada com sucesso");
            
            if (resposta.retcode==10008 || resposta.retcode==10009)
               {
                  Print ("Compra a mercado executada com sucesso");
               }
            else
               {
                  Print ("Erro ao executar ordem de compra a mercado. Erro: ", GetLastError(), "Retorno: ", resposta.retcode);
               }
         }
         return true;   
   }   

Reparem que as variaveis que tem no robo são as mesmas do outro arquivo, Como que faço para pegar o valor do input lote e transferir no outro arquivo sem ter q declarar denovo o valor nele?

      double        _lote = 1//*       Qtde de Contratos
      double        _takeProfit = 100; //*       Stop Gain
      double        _stopLoss = 100;//*       Stop Loss
Ivan Ronchi
266
Ivan Ronchi  
Talvez você possa definir uma variável Global, porém tem que analisar quanto a segurança do seu código já que não ficará fixo no programa.
Romeu Bertho
5431
Romeu Bertho  
BRUNO CONTE DE FREITAS:

Ola pessoal, vi vários artigos, códigos mas ainda não consegui compreender a questão de pegar o valor de uma variável inputs do robô e transferir para uma classe que esta em outro arquivo. Vou mandar um exemplo simples abaixo. Se algum puder dar uma luz eu agradeço.


Esse Código seria do Robo:


Esse outro código seria do outro arquivo que chama TradeEntrada. Nele esta a classe.:

Reparem que as variaveis que tem no robo são as mesmas do outro arquivo, Como que faço para pegar o valor do input lote e transferir no outro arquivo sem ter q declarar denovo o valor nele?

Bom dia,

sugiro que você dê uma olhada na seção functions e OOP da documentação do MQL5.

Abs.

Documentation on MQL5: Language Basics
Documentation on MQL5: Language Basics
  • www.mql5.com
The MetaQuotes Language 5 (MQL5) is an object-oriented high-level programming language intended for writing automated trading strategies, custom technical indicators for the analysis of various financial markets. It allows not only to write a variety of expert systems, designed to operate in real time, but also create their own graphical tools...
Jonathan Pereira
72
Jonathan Pereira  
BRUNO CONTE DE FREITAS:

Ola pessoal, vi vários artigos, códigos mas ainda não consegui compreender a questão de pegar o valor de uma variável inputs do robô e transferir para uma classe que esta em outro arquivo. Vou mandar um exemplo simples abaixo. Se algum puder dar uma luz eu agradeço.


Esse Código seria do Robo:


Esse outro código seria do outro arquivo que chama TradeEntrada. Nele esta a classe.:

Reparem que as variaveis que tem no robo são as mesmas do outro arquivo, Como que faço para pegar o valor do input lote e transferir no outro arquivo sem ter q declarar denovo o valor nele?

Isso é básico da programação orientado a objetos, se isso não é muito claro para você recomendo fortemente que procure materiais sobre orientação a objetos.

E mais uma dica, apenas criar classes não quer dizer que seu código é orientado a objeto, oop é um paradigma de programação. 

Abraços 
Para adicionar comentários, por favor Faça o login ou registrar