Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Olá,
Há muito tempo eu não estava por aqui...
Estou trabalhando em uma idéia EA, preciso acrescentar um indicador, mas não sei como incluir isso na EA, você pode me ajudar, por favor?
O indicador é Slope Directional Line, quero que funcione no gráfico diário e que acione as ordens no gráfico TF inferior, o código do indicador é:
//+------------------------------------------------------------------+
//| linha direcional inclinada D.L.M.mq4 |
//| DANIEL LUCHINGER 2014 |
//| MQL5: negociação forex automatizada, testador de estratégia e indicadores personalizados com MetaTrader |
//+------------------------------------------------------------------+
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 2
#Indicador de propriedade_color1 Azul
#largura_do_indicador de propriedade1 3
#indicador de propriedade_color2 Vermelho
#largura_do_indicador de propriedade2 3
//---- parâmetros de entrada
período int externo=14;
método int externo=3; // MODE_SMA
preço interno externo=0; // PREÇO_CLOSE
//---- buffers
dupla Uptrend[];
duplo Dntrend[];
duplo ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
SetIndexBuffer(0, Uptrend);
SetIndexBuffer(1, Dntrend);
SetIndexBuffer(2, ExtMapBuffer);
ArraySetAsSeries(ExtMapBuffer, true);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
IndicatorShortName("Slope Direction Line");
return(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit(){return(0);}
duplo WMA(int x, int p)
{
retorno(iMA(NULL, 0, p, 0, método, preço, x)));
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
retorno(-1);
int x = 0;
int p = MathSqrt(período);
int e = Barras - contadas_barras + período + 1;
duplo vect[], tendência[];
if(e > Barras)
e = Barras;
ArrayResize(vect, e);
ArraySetAsSeries(vect, true);
ArrayResize(tendência, e);
ArraySetAsSeries(tendência, verdadeiro);
for(x = 0; x < e; x++)
{
vect[x] = 2*WMA(x, período/2) - WMA(x, período);
}
para(x = 0; x < e-periodo; x++)
ExtMapBuffer[x] = iMAOnArray(vect, 0, p, 0, método, x);
for(x = e-period; x >= 0; x--)
{
tendência[x] = tendência[x+1];
se (ExtMapBuffer[x]> ExtMapBuffer[x+1]) tendência[x] =1;
if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
if (tendência[x]>0])
{ Uptrend[x] = ExtMapBuffer[x];
if (tendência[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
Dntrend[x] = EMPTY_VALUE;
}
senão
se (tendência[x]<0)
{
Dntrend[x] = ExtMapBuffer[x];
if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
Uptrend[x] = EMPTY_VALUE;
}
}
retorno(0);
---------------
--------------
Eu codifiquei da seguinte maneira:
double UpTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,0,1); // onde 0 = UptrendBuffer
double DnTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,1,1); // onde 1 = DntrendBuffer
duplo _sl = 0,_tp = 0;
{
if(haMode == 0 || haMode == 1)
{
if(UpTrend)
{label("LONG Condition OK");
if(Close[0] >= srDown && Close[0] < srUp)
//if(StopLoss > 0) _sl = Perguntar - StopLoss;
_sl = srDownHT-StopLossShift;
if(TakeProfit > 0) _tp = Ask + TakeProfit;
if(tt & && order<MaxTrades)
{
openOrder(getLots(),MagicNumber,OP_BUY, _sl,_tp);
}
}}
}
}
Alguém pode me corrigir, por favor, porque estou baralhado, isto não está funcionando
Obrigado
Daniel1983
Muito obrigado Mistertools por sua ajuda.
Mas ...
O que eu quero fazer é aplicar uma média móvel para o #_FullSSA_normalize o mtf nmc correto.
Isto funciona sem problemas quando faço isto no M5 de maneira normal com a ajuda do MA do MT4.
É a única coisa que eu uso do MT4 ...
Na M1 às vezes funciona, outras vezes não. Talvez tenha que fazer algo com os ajustes.
Basta olhar para a foto, o SSA está bem, mas não o MA ...
Eu mesmo tenho tentado fazer isso, mas é muito complicado para mim, embora eu só tenha dois erros, depois do 'meu trabalho' ...
Deve ter sido sorte, mas mesmo assim, o SSA trabalhou sem problemas, mas o MA não estava em lugar algum para ser visto.
É claro, a SSA é uma elite ....
que eu comprei há algum tempo e vale a pena ...
Olá,
Há muito tempo eu não estava por aqui...
Estou trabalhando em uma idéia EA, preciso acrescentar um indicador, mas não sei como incluir isso na EA, você pode me ajudar, por favor?
O indicador é Slope Directional Line, quero que funcione no gráfico diário e que acione as ordens no gráfico TF inferior, o código do indicador é:
//+------------------------------------------------------------------+
//| linha direcional inclinada D.L.M.mq4 |
//| DANIEL LUCHINGER 2014 |
//| MQL5: negociação forex automatizada, testador de estratégia e indicadores personalizados com MetaTrader |
//+------------------------------------------------------------------+
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 2
#Indicador de propriedade_color1 Azul
#largura_do_indicador de propriedade1 3
#indicador de propriedade_color2 Vermelho
#largura_do_indicador de propriedade2 3
//---- parâmetros de entrada
período int externo=14;
método int externo=3; // MODE_SMA
preço interno externo=0; // PREÇO_CLOSE
//---- buffers
dupla Uptrend[];
duplo Dntrend[];
duplo ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador personalizado |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
SetIndexBuffer(0, Uptrend);
SetIndexBuffer(1, Dntrend);
SetIndexBuffer(2, ExtMapBuffer);
ArraySetAsSeries(ExtMapBuffer, true);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
IndicatorShortName("Slope Direction Line");
return(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit(){return(0);}
duplo WMA(int x, int p)
{
retorno(iMA(NULL, 0, p, 0, método, preço, x)));
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
retorno(-1);
int x = 0;
int p = MathSqrt(período);
int e = Barras - contadas_barras + período + 1;
duplo vect[], tendência[];
if(e > Barras)
e = Barras;
ArrayResize(vect, e);
ArraySetAsSeries(vect, true);
ArrayResize(tendência, e);
ArraySetAsSeries(tendência, verdadeiro);
for(x = 0; x < e; x++)
{
vect[x] = 2*WMA(x, período/2) - WMA(x, período);
}
para(x = 0; x < e-periodo; x++)
ExtMapBuffer[x] = iMAOnArray(vect, 0, p, 0, método, x);
for(x = e-period; x >= 0; x--)
{
tendência[x] = tendência[x+1];
se (ExtMapBuffer[x]> ExtMapBuffer[x+1]) tendência[x] =1;
if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
if (tendência[x]>0])
{ Uptrend[x] = ExtMapBuffer[x];
if (tendência[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
Dntrend[x] = EMPTY_VALUE;
}
senão
se (tendência[x]<0)
{
Dntrend[x] = ExtMapBuffer[x];
if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
Uptrend[x] = EMPTY_VALUE;
}
}
retorno(0);
---------------
--------------
Eu codifiquei da seguinte maneira:
double UpTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,0,1); // onde 0 = UptrendBuffer
double DnTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,1,1); // onde 1 = DntrendBuffer
duplo _sl = 0,_tp = 0;
{
if(haMode == 0 || haMode == 1)
{
if(UpTrend)
{label("LONG Condition OK");
if(Close[0] >= srDown && Close[0] < srUp)
//if(StopLoss > 0) _sl = Perguntar - StopLoss;
_sl = srDownHT-StopLossShift;
if(TakeProfit > 0) _tp = Ask + TakeProfit;
if(tt & && order<MaxTrades)
{
openOrder(getLots(),MagicNumber,OP_BUY, _sl,_tp);
}
}}
}
}
Alguém pode me corrigir, por favor, porque estou baralhado, isto não está funcionando
Obrigado
Daniel1983Isso não está funcionando simplesmente porque a linha direcional da inclinação é um indicador de repintura. Pegue qualquer média normal do casco ("linha direcional de inclinação" é a média do casco) e tudo será mais fácil
Obrigado Mladen, agradeço seu tempo...
Encontrei através dos postos sobre HMA, um que você criou com controle de velocidade,
gostaria de tentar na EA, a mesma idéia que eu queria com o Indicador Direcional de Declive,
mas com este indicador HMA você postou "Hull Moving Averages 2.0 &SR lines".
como seria o código para que isso funcionasse na minha EA?
Eu escrevi:
input int IndicatorTF = 1440 //(indicator in Daily TimeFrame)
entrada no período HMAP = 35; //(permitir-me alterar estes parâmetros)
input ENUM_HMAPrice = PRICE_CLOSE; //(permita-me alterar estes parâmetros)
entrada no HMASpeed = 2.0; //(permita-me alterar estes parâmetros)
dupla tendênciaUp = iCustom(Symbol(),IndicatorTF, "Hull moving average 2.0 & sr lines",HMAPeriod,ENUM_HMAPrice,HMASpeed,0,0);
dupla tendênciaDn = iCustom(Symbol(),IndicatorTF, "Hull moving average 2.0 & sr lines",HMAPeriod,ENUM_HMAPrice,HMASpeed,1,0);
if(trendUp > 0)
{
Compra aberta
}
O código indicador é:
//+------------------------------------------------------------------+
//| Média móvel do casco |
//| mladen |
//+------------------------------------------------------------------+
#propriedade copyright"www.forex-tsd.com"
#link da propriedade "www.forex-tsd.com"
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 3
#indicador de propriedade_color1 LimeGreen
#indicador de propriedade_color2 PaleVioletRed
#indicador de propriedade_color3 PaleVioletRed
#largura_do_indicador de propriedade1 2
#largura_do_indicador de propriedade2 2
#largura_do_indicador de propriedade3 2
//
//
//
//
//
String externo TimeFrame = "Current time frame";
Externo no período HMAP = 35;
extern int HMAPrice = "PRICE_CLOSE";
HMASpeed duplo externo = 2,0;
externa bool LinesVisible = falso;
Linhas externas int LinesNumber = 5;
cor exterior ColorUp = LimeGreen;
cor externa ColorDown = PaleVioletRed;
externa string UniqueID = "HullLines1";
alertas externos BoolOn = falso;
alertas de bool externoOnCurrent = verdadeiro;
alertas de bool externoMensagem = verdadeiro;
alertas de bool externoSound = falso;
alertas de bool externoEmail = falso;
//
//
//
//
//
duplo hma[];
duplo hmada[];
duplo hmadb[];
duplo hmada[]; duplo hmada[];
duplo hmada[]; duplo hmadb[];
em meio período;
int Período HullPeriod;
string indicatorFileName;
bool returnBars;
bool calculateValue;
int TimeFrame;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0,hma);
SetIndexBuffer(1,hmada);
SetIndexBuffer(2,hmadb);
SetIndexBuffer(3,trend);
SetIndexBuffer(4,trabalho);
//
//
//
//
//
HMAPeriod = MathMax(2,HMAPeriod);
HalfPeriod = MathFloor(HMAPeriod/HMASpeed);
HullPeriod = MathFloor(MathSqrt(HMAPeriod));
indicadorFileName = WindowExpertName();
calculateValue = TimeFrame=="calculateValue"; se (calculateValue) { return(0); }
returnBars = TimeFrame=="returnBars"; if (returnBars) { return(0); }
timeFrame = stringToTimeFrame(TimeFrame);
//
//
//
//
//
IndicatorShortName(timeFrameToString(timeFrame)+" HMA ("+HMAPeriod+")");
return(0);
}
deinit() vazio
{
deleteLines();
}
linhas de exclusão vazias()
{
int lookForLength = StringLen(UniqueID);
for (int i= ObjectsTotal()-1; i>=0; i--)
{
nome da cadeia = ObjectName(i);
if (StringSubstr(name,0,lookForLength)==UniqueID) ObjectDelete(name);
}
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int i,counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { hma[0] = MathMin(limite+1,Bars-1); return(0); }
//
//
//
//
//
se (calculateValue || timeFrame == Período())
{
if (trend[limit] == -1) CleanPoint(limit,hmada,hmadb);
for(i=limit; i>=0; i--) work = 2.0*iMA(NULL,0,HalfPeriod,0,MODE_LWMA,HMAPrice,i)-iMA(NULL,0,HMAPeriod,0,MODE_LWMA,HMAPrice,i);
for(i=limite; i>=0; i--)
{
hma = iMAOnArray(trabalho,0,HullPeriod,0,MODE_LWMA,i);
hmada = EMPTY_VALUE;
hmadb = EMPTY_VALUE;
tendência = tendência;
se (hma > hma) tendência = 1;
se (hma < hma) tendência = -1;
se (tendência == -1) PlotPoint(i,hmada,hmadb,hma);
}
deleteLines();
se (LinesVisible)
{
int k = 0;
para (i=0; i<Bars && k<LinesNumber; i++)
se (tendência!= tendência)
{
nome da cadeia = UniqueID+(cadeia)Tempo;
ObjectCreate(name,OBJ_TREND,0,Time,hma,Time+Period()*60,hma);
se (tendência===1)
ObjectSet(nome,OBJPROP_COLOR,ColorUp);
else ObjectSet(name,OBJPROP_COLOR,ColorDown);
k++;
}
}
gerenciarAlertas();
retornar(0);
}
//
//
//
//
//
limite = MathMax(limite,MathMin(Bars-1,iCustom(NULL,timeFrame,indicadorNome do arquivo, "returnBars",0,0)*timeFrame/Período()));
if (trend[limit]==-1) CleanPoint(limit,hmada,hmadb);
for (i=limite; i>=0; i--)
{
int y = iBarShift(NULL,TimeFrame,Time);
tendência = iCustom(NULL,timeFrame,indicadorNome do arquivo, "calculateValue",HMAPeriod,HMAPrice,HMASpeed,LinesVisible,LinesNumber,ColorUp,ColorDown,UniqueID,alertasOn,alertasOnCurrent,alertasMessage,alertasSound,alertasEmail,3,y);
hma = iCustom(NULL,timeFrame,indicadorNome do arquivo, "calculateValue",HMAPeriod,HMAPrice,HMASpeed,LinesVisible,LinesNumber,ColorUp,ColorDown,UniqueID,alertasOn,alertasOnCurrent,alertasMessage,alertasSound,alertasEmail,0,y);
hmada = VAZIO_VALOR;
hmadb = EMPTY_VALUE;
}
for (i=limit;i>=0;i--) if (trend===-1) PlotPoint(i,hmada,hmadb,hma);
return(0);
}
//+-------------------------------------------------------------------
//|
//+-------------------------------------------------------------------
//
//
//
//
//
alertas de gerenciamento de vazios()
{
se (alertasOn)
{
se (alertasOnCurrent)
int que Bar = 0;
senão qual barra = 1;
if (trend[qualBar] != trend[qualBar+1])
{
if (trend[whichBar] == 1) doAlert(whichBar, "up");
if (trend[whichBar] == -1) doAlert(whichBar, "down");
}
}
}
//
//
//
//
//
vazio doAlert(int para Bar, string do What)
{
string estática anteriorAlert="nada";
data estática hora anteriorTempo anterior;
mensagem de string;
if (previousAlert != do What ||| previousTime != Time[forBar]) {
anteriorAlerta = fazer o quê;
previousTime = Tempo[para Bar];
//
//
//
//
//
mensagem = Símbolo()+" "+timeFrameToString(Period())+" em "+TimeToStr(TimeLocal(),TIME_SECONDS)+" A tendência HMA mudou para "+doWhat;
if (alertasMensagem) Alerta(mensagem);
if (alertasEmail) SendMail(Symbol()+" HMA ",message);
if (alertasSom) PlaySound("alert2.wav");
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
vazio CleanPoint(int i,double& first[],double& second[])
{
se ((segundo != EMPTY_VALUE) && (segundo != EMPTY_VALUE))
segundo = VAZIO_VALOR;
senão
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first === EMPTY_VALUE))
primeiro = VAZIO_VALOR;
}
//
//
//
//
//
vazio PlotPoint(int i,double& first[],double& second[],double& from[])
{
se (primeiro == VAZIO_VALOR)
{
if (first === EMPTY_VALUE) {
primeiro = de;
primeiro = de;
segundo = VAZIO_VALOR;
}
senão {
segundo = de;
segundo = de;
primeiro = VAZIO_VALOR;
}
}
senão
{
primeiro = de;
segundo = VAZIO_VALOR;
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
string sTfTable[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"};
int iTfTable[] = {1,5,15,30,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(string tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
if (tfs==sTfTable || tfs===""+iTfTable) return(MathMax(iTfTable,Period()));
return(Period());
}
tempo de fioFrameToString(int tf)
{
para (int i=ArraySize(iTfTable)-1; i>=0; i--)
se (tf===iTfTable) retornar(sTfTable);
return("");
}
//
//
//
//
//
string stringUpperCase(string str)
{
string s = str;
para (comprimento int = StringLen(str)-1; comprimento>=0; comprimento--)
{
int tchar = StringGetChar(s, comprimento);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, comprimento, tchar - 32);
caso contrário se(tchar > -33 && tchar < 0)
s = StringSetChar(s, comprimento, tchar + 224);
}
devolução(ões);
}
Não é um problema de interferência de outro indicador (a menos que você esteja usando várias instâncias desse mesmo indicador no mesmo gráfico). Nesse caso, ele pode interferir, já que esse indicador não está escrito para ser usado como indicador de múltiplas instâncias no mesmo gráfico.
Olá MLaden , muito obrigado, mas não é um caso em que estou usando mais de uma instância em um gráfico, apenas uma. apenas linhas estão se deslocando.
se não for óbvio, não se preocupe, vou continuar como está, obrigado pela sua contribuição! tenha um bom dia...
zigflip
Olá MLaden , muito obrigado, mas não é um caso em que estou usando mais de uma instância em um gráfico, apenas uma. apenas linhas estão se deslocando.
se não for óbvio, não se preocupe, obrigado pela sua contribuição! tenha um bom dia...
zigflipEu tentei aquele que eu afixei e eles não estavam mudando
Experimente, talvez ajude
Como chamar um indicador HMA em um EA?
duplo (NULL,0, "HMA",??????)
E as condições são
se(trendUp) então compre, ou se(trendUp =1) então compre ou algo parecido com isto?
obrigado
Como chamar um indicador HMA em um EA?
duplo (NULL,0, "HMA",??????)
E as condições são
se(trendUp) então compre, ou se(trendUp =1) então compre ou algo parecido com isto?
obrigadoDepende de parâmetros indicadores, mas você tem que usar iCustom() para isso
Muito mais informações com alguns exemplos que você pode encontrar aqui : https://www.mql5.com/en/forum/173108
Depende dos parâmetros de indicadores, mas você tem que usar iCustom() para issoMuitas mais informações com alguns exemplos que você pode encontrar aqui : https://www.mql5.com/en/forum/173108
THank por me orientar, ainda estou confuso, encontrei um código HMA semelhante ao código da linha de declive, é "HMA_Russian_Color", mas ainda tenho problemas com as condições, para filtrar a tendência de compra da tendência de venda.
eu escrevi
double Uptrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0); // onde último 0 = UptrendBuffer
double Dntrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1); // onde último 1 = DntrendBuffer
//período = 20 / tipo = 3 / preço = 0 está correto?
if(Uptrend) // Como eu escrevo isto?
{
Compra aberta
}
Ordens de compra ainda abertas enquanto o HMA apresenta tendência de queda ou cor vermelha ...
Por favor, me corrija, e ou me ajude a consertar isto...
Obrigado ...
THank por me orientar, ainda estou confuso, encontrei um código HMA semelhante ao código da linha de declive, é "HMA_Russian_Color", mas ainda tenho problemas com as condições, para filtrar a tendência de compra da tendência de venda.
eu escrevi
double Uptrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0); // onde último 0 = UptrendBuffer
double Dntrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1); // onde último 1 = DntrendBuffer
//período = 20 / tipo = 3 / preço = 0 está correto?
if(Uptrend) // Como eu escrevo isto?
{
Compra aberta
}
Encomendas Compras ainda abertas enquanto o HMA apresenta tendência de queda ou cor vermelha ...
Por favor, me corrija, e ou me ajude a consertar isto...
ObrigadoPara mudança de declive tente algo assim ..:
double previous1 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,1);
double previous2 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,2);
if (current>previous1 && previous1<previous2)
{
// slope changed to up
}
if (currentprevious2)
{
// slope changed to down
}