Buffer de MACD

 

Boa noite.

Estava tentando fazer o macd cruzar a linha de sinal e comprar mas não consegui... oque está errado? fiz um teste simples e nada acontece... alguem me ajuda?

Segue meu código:

//+------------------------------------------------------------------+
//|                                   Hedgind_5_0_By_MaylonSales.mq5 |
//|                                                     Maylon Sales |
//|                                              nolyam@yahoo.com.br |
//+------------------------------------------------------------------+
#property copyright "Maylon Sales"
#property link      "nolyam@yahoo.com.br"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>


input int    MACD_PeriodFast  =12;
input int    MACD_PeriodSlow  =26;
input int    MACD_PeriodSignal=9;
input ENUM_APPLIED_PRICE   MACD_Applied=PRICE_CLOSE;

double   BufMACDMainLine[];
double   BufMACDSignalLine[];
int MACD_handle;
int   contador;

CTrade GoTrade;
CSymbolInfo mysymbol;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MACD_handle=iMACD(_Symbol,_Period,MACD_PeriodFast,MACD_PeriodSlow,MACD_PeriodSignal,MACD_Applied);
   if(MACD_handle<0)
     {
      Print("Maylon a criação do iMACD falhou cara :(",INVALID_HANDLE);
      Print("Erro em tempo de execução Maylon :(",GetLastError());
      return(-1); //--- término do programa forçado
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(MACD_handle);

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Preenchimento do array BufMACDMainLine e o BufMACDSignalLine com os valores atuais de iMACD
//--- 100 elementos devem ser escritos para o array
//--- se houver um erro, nós encerramos a execução do programa
   if(CopyBuffer(MACD_handle,0,0,100,BufMACDMainLine)) return;
   if(CopyBuffer(MACD_handle,1,0,100,BufMACDSignalLine)) return;
   ArraySetAsSeries(BufMACDMainLine,true);
   ArraySetAsSeries(BufMACDSignalLine,true);

   if(BufMACDMainLine[0]>BufMACDMainLine[1])
     {
      GoTrade.Buy(0.01,NULL,NULL,mysymbol.Ask()-0.100,mysymbol.Bid()+0.100,NULL);
     }

  }
 

Olá Mimilon

 

Vi que no seu código esta assim:

if(BufMACDMainLine[0]>BufMACDMainLine[1]) 

 E o parâmetro de sinal de compra ou venda do MACD é comparando o Valor do MACD com o Sinal dele, no caso do seu código seriam as variáveis  BufMACDMainLine e BufMACDSignalLine!

Espero ter ajudado!

 
Marcos Azevedo:

Olá Mimilon

 

Vi que no seu código esta assim:

if(BufMACDMainLine[0]>BufMACDMainLine[1]) 

 E o parâmetro de sinal de compra ou venda do MACD é comparando o Valor do MACD com o Sinal dele, no caso do seu código seriam as variáveis  BufMACDMainLine e BufMACDSignalLine!

Espero ter ajudado!

Boa noite.

 Eu testei assim também :   MAs não funcionou. mudei os numeros dos buffer e nada acontece... tem algum artigo que esplica oque vem nos buffer do macd? oque eu faço?

   if(BufMACDMainLine[0]>BufMACDSignalLine[1])
     {
      GoTrade.Buy(0.01,NULL,NULL,mysymbol.Ask()-0.100,mysymbol.Bid()+0.100,NULL);
      Print("oi    jjjjjjjjjjjjjjj gggggggggggggggggg");
     }
Razão: