Discussão do artigo "Guia prático do MQL5: Consultor Especialista multi-moeda - Abordagem simples, organizada e rápida"" - página 3

 
//+------------------------------------------------------------------+
//|| Calcula o nível do Trailing Stop
//+------------------------------------------------------------------+
double CalculateTrailingStop(int symbol_number,ENUM_POSITION_TYPE position_type)
  {
//--- Variáveis para cálculos
   double    level       =0.0;
   double    buy_point   =low[symbol_number].value[1];  // Valor baixo para Buy
   double    sell_point  =high[symbol_number].value[1]; // Valor alto para Sell

Não será correto fazer isso. Se a posição e o preço da barra abrirem com um gap, o StopLoss não será definido corretamente.

 
Jose:

O artigo é bem organizado e fácil de seguir, além de fornecer as configurações nos arquivos .set. Tive um problema com os modos de execução do símbolo, especificamente com a condição que verifica se era instantânea ou de mercado, e só depois disso permite a abertura de ordens, o que tive de remover, mas tudo funcionou bem.

Tenho uma pergunta. Vi muitas abordagens avançadas diferentes, como esta, que são construídas do zero, negligenciando a estrutura Expert, ExpertSignal, ExpertTrade.... fornecida, embora gastem muito código (e tempo, suponho) replicando alguns de seus recursos. Alguém poderia me justificar isso, por favor?

Olá a todos!

Estou tentando testar este EA, mas acabei de receber a seguinte mensagem no Strategy Tester: "Erro ao abrir a posição: 4753 - 1 A posição não foi encontrada". Não entendo o motivo. Isso acontece quando a função "trade.PositionOpen" é executada na linha 159 do arquivo "TradeFunctions.mqh". Alguém pode me ajudar, por favor?

 

Você poderia me dizer onde ocorre a inversão de posição, conforme descrito pelo autor? Aqui está o código dele com a descrição

//--- Se houver uma posição
   else
     {
      //--- Obter o tipo de posição
      GetPositionProperties(symbol_number,P_TYPE);
      //--- Se a posição for oposta ao sinal e a inversão de posição estiver ativada
      if(pos.type==opposite_position_type && Reverse[symbol_number])
        {
         //--- Obter o volume da posição
         GetPositionProperties(symbol_number,P_VOLUME);
         //--- Ajuste o volume
         lot=pos.volume+CalculateLot(symbol_number,Lot[symbol_number]);
         //--- Vamos inverter a posição
         OpenPosition(symbol_number,lot,order_type,position_open_price,sl,tp,comment);
         return;
        }

Dê uma olhada na função OpenPosition(symbol_number,lot,order_type,position_open_price,sl,tp,comment);

//+------------------------------------------------------------------+
//|| Abre uma posição|
//+------------------------------------------------------------------+
void OpenPosition(int symbol_number,
                  double lot,
                  ENUM_ORDER_TYPE order_type,
                  double price,
                  double sl,
                  double tp,
                  string comment)
  {
//--- Definir o número principal na estrutura comercial
   trade.SetExpertMagicNumber(MagicNumber);
//--- Defina o tamanho da derrapagem em pontos
   trade.SetDeviationInPoints(CorrectValueBySymbolDigits(Deviation));
//--- Modo de execução instantânea e execução de mercado
*** A partir do build 803, níveis de Stop Loss e Take Profit ***
*** pode ser definido ao abrir uma posição no modo SYMBOL_TRADE_EXECUTION_MARKET ***
   if(symb.execution_mode==SYMBOL_TRADE_EXECUTION_INSTANT ||
      symb.execution_mode==SYMBOL_TRADE_EXECUTION_MARKET)
     {
      //--- Se a posição não estiver aberta, imprima uma mensagem sobre isso
      if(!trade.PositionOpen(Symbols[symbol_number],order_type,lot,price,sl,tp,comment))
         Print("Erro ao abrir uma posição: ",GetLastError()," - ",ErrorDescription(GetLastError()));
     }
  }
É apenas um bloqueio! Não há reversão... o mesmo acontece com o incremento de lote! Você pode me explicar, talvez eu esteja errado?
 
Tango_X:

Você poderia me dizer onde ocorre a inversão de posição, conforme descrito pelo autor? Aqui está o código dele com a descrição

Dê uma olhada na função OpenPosition(symbol_number,lot,order_type,position_open_price,sl,tp,comment);

É apenas um bloqueio! Não há reversão... o mesmo acontece com o incremento de lote! Você pode me explicar, talvez eu esteja errado?

Há dois tipos de contas de negociação: compensação e hedge.

HaviaAçãoFoi na Netting.Está em alta no Hedge.
Comprar 1,0Venda 2.0Vender 1.0Comprar 1,0 e vender 2,0
 
Vladimir Karputov:

Há dois tipos de contas de negociação: compensação e hedge.

HouveAçãoTornou-se líquidaTornou-se um Hedge
Compra 1.0Vender 2,0Vender 1,0Comprar 1,0 e vender 2,0

Entendi! Muito obrigado!

 
"TimeframeToString" não existe e não está declarado no artigo. Por favor, substitua-o por "EnumToString".