Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 232

 
Rustam Bikbulatov:
Segundo. O comando para abrir uma ordem

Não faz nenhum sentido. O que isso tem a ver com uma ordem de mercado? Talvez seja a chamada indicadora? Em seguida, modifique o indicador e chame-o usando iCustom em vez de iMACD.

Talvez, não haja necessidade de modificar nada, a kodobase está cheia de coisas boas.

 
Vitalie Postolache:

Não faz nenhum sentido. O que isso tem a ver com uma ordem de mercado? Talvez seja a chamada indicadora? Em seguida, modifique o indicador e chame-o usando iCustom em vez de iMACD.

Talvez eu não precise modificar absolutamente nada, Kodobase está cheio de coisas boas.


Eu tentei através do iCustom, mas ele funciona lentamente. Eu tentei viaiMAOnArray, mas tive um problema com os arrays. Eu não consegui ligar todos eles em um só. É mais fácil fazer o iMACD, mas essa é a questão

 
Rustam Bikbulatov:

Eu tentei o iCustom, mas ele funciona lentamente. Experimentei oiMAOnArray, mas há um problema com os arrays. Não foi possível unir tudo durante alguns dias. É mais fácil fazer oiMACD, mas essa é a questão.


Você não pode, o iMACD padrão calcula a linha de sinal usando a fórmula SMA, somente o personalizado irá ajudar.

 
Vitalie Postolache:

De jeito nenhum, o iMACD padrão calcula a linha de sinal usando a fórmula SMA, somente o personalizado ajudará.


Ok, eu descobri que é impossível fazer isso. muito obrigado pela informação

 
Rustam Bikbulatov:

Percebi que isso é impossível. Muito obrigado pela informação.


Nada é impossível, você só precisa ampliar um pouco o escopo ))))

 
Rustam Bikbulatov:

É isso, eu percebi que não é possível. muito obrigado pela informação

Aqui está o código do MACD padrão

//+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Averages Convergence/Divergence"
#property strict

#include <MovingAverages.mqh>

//--- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property   indicator_color1  Silver
#property   indicator_color2  Red
#property   indicator_width1  2
//--- indicator parameters
input int InpFastEMA=12;   // Fast EMA Period
input int InpSlowEMA=26;   // Slow EMA Period
input int InpSignalSMA=9;  // Signal SMA Period
//--- indicator buffers
double    ExtMacdBuffer[];
double    ExtSignalBuffer[];
//--- right input parameters flag
bool      ExtParameters=false;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   IndicatorDigits(Digits+1);
//--- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,InpSignalSMA);
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMacdBuffer);
   SetIndexBuffer(1,ExtSignalBuffer);
//--- name for DataWindow and indicator subwindow label
   IndicatorShortName("MACD("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")");
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
//--- check for input parameters
   if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA)
     {
      Print("Wrong input parameters");
      ExtParameters=false;
      return(INIT_FAILED);
     }
   else
      ExtParameters=true;
//--- initialization done
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
  {
   int i,limit;
//---
   if(rates_total<=InpSignalSMA || !ExtParameters)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
      ExtMacdBuffer[i]=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
                    iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
   //ExponentialMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- done
   return(rates_total);
  }
//+------------------------------------------------------------------+

A linha marcada em rosa eu adicionei.

Se eu descomentar a linha marcada em rosa e comentar a linha marcada em verde, o MACD deve ser calculado usando todos os MACDs exponenciais.

 
Artyom Trishkin:

Aqui está o código para o MACD padrão

A linha marcada em rosa I adicionada.

Se eu descomentar a linha marcada em rosa e comentar a linha marcada em verde, o MACD deve ser calculado usando todos os MACDs exponenciais.


A questão era como fazer isso na EA. O EA calculaautomaticamente usando a fórmula SMA

 
Rustam Bikbulatov:

A questão era como fazer isso na EA. O EA calculaautomaticamente oSMA usando a fórmula

Eu lhe mostrei como fazer um MACD personalizado.

Isso é o que você deve usar em seu Expert Advisor através do iCustom()

 
Artyom Trishkin:

Eu lhe mostrei como fazer um MACD personalizado.

Isso é o que você deve usar em seu Expert Advisor via iCustom()


Tenho muitos dados e o mato está ficando mais lento. Eu já tentei. Afeta os resultados. De qualquer forma, obrigado.

 
Rustam Bikbulatov:

Tenho muitos dados e o mato está ficando mais lento. Eu já tentei. Isso está afetando os resultados. Mesmo assim, obrigado.

Verifique suas configurações, talvez você tenha muitas barras para exibir, daí os atrasos.