Erro na ordem de Compra

 

O objetivo do EA e fazer uma compra no rompimento do indicador de Suporte e Resistencia 

Ele leu o indicador mas nao envia a ordem alguem pode me ajudar

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh> //Biblioteca para ordens de compra e venda
CTrade trade;//Da nome a classe da biblioteca de compra e venda
double SRArray[];
int SRHandle;
MqlTick ultimoTick;  //CLASSE PARA PUXAR AS INFORMACOES DE PRECO
MqlRates rates[];//CLASSE ARMAZENA OS VALORES DE OPEN CLOSE HIGH LOW ETC
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   SRHandle=iCustom(_Symbol,_Period,"Support_and_Resistance");
   CopyBuffer(SRHandle,0,0,1,SRArray);

   trade.SetTypeFilling(ORDER_FILLING_RETURN);//FUNCAO QUE ARMAZENA O TIPO DE ORDEM
   trade.SetDeviationInPoints(5);//TAMANHA MAXIMO DO DESVIO PARA E EXECUCAO DA ORDEM
   trade.SetExpertMagicNumber(12356);//FUNCAO PARA O NUMERO MAGICO
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
if(!SymbolInfoTick(_Symbol,ultimoTick))//FUNCAO PARA CLASSE QUE PUXA INFORMACOES DE PRECO
     {
      Alert("Erro Ao Obter Ultimo Tick",GetLastError());
      return;
     }

   CopyRates(_Symbol,_Period,0,3,rates);//COPIA OS DADOS DE PRECO HISTORICO PARA A FUNCAO RATES

   if(rates[0].high>SRArray[0] && rates[0].high>SRArray[0] && PositionsTotal()==0)
     {

      trade.Buy(1,_Symbol,ultimoTick.ask,ultimoTick.ask-80,ultimoTick.ask+50,"");
      


     }
  }
//+------------------------------------------------------------------+
 
Bruno Gonçalves:


Olá Bruno,

deve ter uma posição de algum instrumento em aberto, não necessariamente do instrumento que está rodando no EA.

 
Rogerio Giannetti Torres:

Olá Bruno,

deve ter uma posição de algum instrumento em aberto, não necessariamente do instrumento que está rodando no EA.

Não tem posição aberta ele não está executando a  ordem 
 
Bruno Gonçalves:
Não tem posição aberta ele não está executando a  ordem 

Bom, 

dá um print no retcode() dentro do If.

Print(" Erro: ",trade.ResultRetcode()," ", trade.ResultRetcodeDescription());

 
Bruno Gonçalves:

O objetivo do EA e fazer uma compra no rompimento do indicador de Suporte e Resistencia 

Ele leu o indicador mas nao envia a ordem alguem pode me ajudar

Ele não enviou a ordem porque o IF falhou... simples Lógica Booleana.

Inclusive teu IF é bem doido:

if(rates[0].high>SRArray[0] && rates[0].high>SRArray[0] && PositionsTotal()==0)

Você não tem a MÍNIMA checagem pra erros..  Pelo teu código você acredita cegamente que tudo VAI DAR CERTO...


Cuidado!!! O mundo real é de longe assim...

;)