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á a todos, tenho este erro particular com minha EA no Stocastic.
Este é meu critério é assim:
Quando meu stocEquator cruza para cima (Uptrend), somente o longo será acionado quando meu stocTrigger cruza para cima e quando meu stocEquator cruza para baixo (Downtrend), somente o curto será acionado quando meu stocTrigger cruza para baixo.
No entanto, quando eu executo o EA para testes, não há nenhuma profissão acionada e estava me perguntando qual poderia ser o problema aqui e apreciaria se alguém pudesse me ajudar aqui.
Obrigado antecipadamente pela ajuda.
Cumprimentos
Terrance
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Trigger= shortStoc1Trigger-longStoc1Trigger;
duplo dif2Trigger= shortStoc2Trigger-longStoc2Trigger;
se ((dif1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
ou isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Equator = curtoStoc1Equator-longoStoc1Equator;
duplo dif2Equator = curtoStoc2Equator-longoStoc2Equator;
se ((dif1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
ou isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Compre
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Venda
}
retorno(0);
}
retorno(0);
Olá a todos, tenho este erro particular com minha EA no Stocastic.
Este é meu critério é assim:
Quando meu stocEquator cruza para cima (Uptrend), somente o longo será acionado quando meu stocTrigger cruza para cima e quando meu stocEquator cruza para baixo (Downtrend), somente o curto será acionado quando meu stocTrigger cruza para baixo.
No entanto, quando eu executo o EA para testes, não há nenhuma profissão acionada e estava me perguntando qual poderia ser o problema aqui e apreciaria se alguém pudesse me ajudar aqui.
Obrigado antecipadamente pela ajuda.
Cumprimentos
Terrance
int isCrossedTrigger= 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Trigger= shortStoc1Trigger-longStoc1Trigger;
duplo dif2Trigger= shortStoc2Trigger-longStoc2Trigger;
se ((dif1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
ou isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Equator = curtoStoc1Equator-longoStoc1Equator;
duplo dif2Equator = curtoStoc2Equator-longoStoc2Equator;
se ((dif1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
ou isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Compre
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Venda
}
retorno(0);
}
retorno(0);Terrance
A única coisa que não pude verificar é a variável "total".
O código deve funcionar se a variável total for definida corretamente. Aqui está um indicador de teste que usei com suas condições e que está levantando sinais válidos de compra e venda (execute o indicador em modo visual e você verá quando ele alerta) para que o erro esteja em outro lugar
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}Oi mladen, obrigado pelo destaque. Eu voltei e dei uma olhada nos meus códigos e não consegui entender o que você quis dizer com variável "total". Qual poderia ser a causa do meu erro?
Atenciosamente
Terrance
//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| TK|
//| MetaTrader 4 Trading Platform / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#propriedade copyright "TK
#link da propriedade "http://www.metaquotes.net"
//--- parâmetros de entrada
duplo TakeProfit externo=500,0;
duplo externo Lots=0,1;
duplo StopLoss externo=500,0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
datatime newbar;
int start()
{
if(newbar==Time[0])return(0);
else newbar=Time[0];
int ticket, total;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0);
}
//+------------------------------------------------------------------+
//| função de partida especializada | Gatilho Estocástico
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); // movimento orignial Stoc
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // movimento orignial Stoc
//+--------------------------------------------------------------------------------------+
//| função de início especializado | Definir o acionamento do comércio somente quando a linha é cruzada e a vela é fechada |//
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1 = curtoStoc1-longoStoc1;
duplo dif2 = curtoStoc2-longoStoc2;
se ((dif1*diff2)<0)
{
se (shortStoc1>longStoc1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
// Partida do Equador -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Equator = curtoStoc1Equator-longoStoc1Equator;
duplo dif2Equator = curtoStoc2Equator-longoStoc2Equator;
se ((dif1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
ou isCrossedEquator = 2;
}
// Final do Equador Stoc -------------------------------------
//+------------------------------------------------------------------------------------+
///| função final expert | Definir o comércio de gatilho somente quando a linha é cruzada e a vela é fechada |//
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| função final expert | Gatilho Estocástico
//+------------------------------------------------------------------+
//| função de partida especializada | Ordem de acionamento
//+------------------------------------------------------------------------------------------------------------+
total = EncomendasTotal();
se(total < 2) // restringir o número de negócios abertos
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
retorno(0);
}
//+------------------------------------------------------------------+
//| função final de especialista |
//+------------------------------------------------------------------+
Terrance
A única coisa que não pude verificar é a variável "total".
O código deve funcionar se a variável total for definida corretamente. Aqui está um indicador de teste que usei com suas condições e que está levantando sinais válidos de compra e venda (execute o indicador em modo visual e você verá quando ele alerta) para que o erro esteja em outro lugar
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}Oi mladen, obrigado pelo destaque. Eu voltei e dei uma olhada nos meus códigos e não consegui entender o que você quis dizer com variável "total". Qual poderia ser a causa do meu erro?
Cumprimentos
Terrance
//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| TK|
//| MetaTrader 4 Trading Platform / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#propriedade copyright "TK
#link da propriedade "http://www.metaquotes.net"
//--- parâmetros de entrada
duplo TakeProfit externo=500,0;
duplo externo Lots=0,1;
duplo StopLoss externo=500,0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
datatime newbar;
int start()
{
if(newbar==Time[0])return(0);
else newbar=Time[0];
int ticket, total;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0);
}
//+------------------------------------------------------------------+
//| função de partida especializada | Gatilho Estocástico
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); // movimento orignial Stoc
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); // movimento orignial Stoc
//+--------------------------------------------------------------------------------------+
//| função de início especializado | Definir o acionamento do comércio somente quando a linha é cruzada e a vela é fechada |//
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1 = curtoStoc1-longoStoc1;
duplo dif2 = curtoStoc2-longoStoc2;
se ((dif1*diff2)<0)
{
se (shortStoc1>longStoc1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
// Partida do Equador -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
duplo longoStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
duplo curtoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
duplo longoStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
duplo dif1Equator = curtoStoc1Equator-longoStoc1Equator;
duplo dif2Equator = curtoStoc2Equator-longoStoc2Equator;
se ((dif1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
ou isCrossedEquator = 2;
}
// Final do Equador Stoc -------------------------------------
//+------------------------------------------------------------------------------------+
///| função final expert | Definir o comércio de gatilho somente quando a linha é cruzada e a vela é fechada |//
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| função final expert | Gatilho Estocástico
//+------------------------------------------------------------------+
//| função de partida especializada | Ordem de acionamento
//+------------------------------------------------------------------------------------------------------------+
total = EncomendasTotal();
se(total < 2) // restringir o número de negócios abertos
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
retorno(0);
}
//+------------------------------------------------------------------+
//| função final de especialista |
//+------------------------------------------------------------------+Terrance
Em meus testes que a EA trabalha
Aqui está o resultado do teste mais o relatório do teste posterior. Testado em um período de 1 minuto
Olá a todos, pls, alguém pode me ajudar com este código abaixo,,,,, continuando a me dar um alerta sonoro a cada tic em vez de apenas quando as condições de negociação exigidas são acionadas! Eu não quero que o alerta seja emitido a cada tique ou quando um novo castiçal estiver se formando.
#janela_do_código de propriedade
#property indicator_buffers 2
#indicador de propriedade_color1 Lime
#indicador de propriedade_color2 Vermelho
//---- parâmetros de entrada
ADXbars externo int=14;
Exterior int CountBars=350;
//---- buffers
duplo val1[];
duplo val2[];
duplo b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int init()
{
//-- nome curto indicador
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- linha indicadora
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |
//+------------------------------------------------------------------+
int start()
{
se (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars);
int i,shift,counted_bars=IndicatorCountBars();
//---- verificação de possíveis erros
if(counted_bars<0) return(-1);
//---- zero inicial
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0,0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0,0;
}
para (turno = CountBars; turno>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alerta("Seta de Compra","\n", "Tempo atual é ",TimeToStr(CurTime()),"\n", Símbolo());
i++;
}
se (b4plusdinowminusdi && i!=1)
{
val2[shift]=Alto[shift]+5*Ponto;
// Alerta("Seta de Venda", "\n", "Hora atual é ",TimeToStr(CurTime()),"\n", Símbolo());
i++;
}
}
retorno(0);
}
//+---------------------------------------------------------------+
Olá a todos, pls alguém pode simplesmente me ajudar com este código abaixo,,,,, continuando a me dar um alerta sonoro a cada tique em vez de apenas quando as condições de negociação necessárias são acionadas! Eu não quero que o alerta seja emitido a cada tique ou quando um novo castiçal estiver se formando.
#janela_do_cartão_indicador de propriedade
#property indicator_buffers 2
#indicador de propriedade_color1 Lime
#indicador de propriedade_color2 Vermelho
//---- parâmetros de entrada
ADXbars externo int=14;
Exterior int CountBars=350;
//---- buffers
duplo val1[];
duplo val2[];
duplo b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//| Função de desinicialização de indicador personalizada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int init()
{
//-- nome curto indicador
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- linha indicadora
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |
//+------------------------------------------------------------------+
int start()
{
se (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars);
int i,shift,counted_bars=IndicatorCountBars();
//---- verificação de possíveis erros
if(counted_bars<0) return(-1);
//---- zero inicial
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0,0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0,0;
}
para (turno = CountBars; turno>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alerta("Seta de Compra","\n", "Tempo atual é ",TimeToStr(CurTime()),"\n", Símbolo());
i++;
}
se (b4plusdinowminusdi && i!=1)
{
val2[shift]=Alto[shift]+5*Ponto;
// Alerta("Seta de Venda", "\n", "Hora atual é ",TimeToStr(CurTime()),"\n", Símbolo());
i++;
}
}
retorno(0);
}
//+---------------------------------------------------------------+Mastercash, há uma versão desse indicador aqui https://www.mql5.com/en/forum/173574/page320 talvez ajude.
Terrance
Em meus testes que a EA trabalha
Aqui está o resultado do teste mais o relatório do teste posterior. Testado em um período de 1 minutoOi mladen, revisei o código de acordo com seus comentários e notei que a troca só será acionada quando ambas as minhas linhas estocásticas forem acionadas para cima ou para baixo na mesma vela.
Entretanto, o que estou tentando fazer é que se o indicador do equador estiver cruzando para cima indicando tendência para cima, o EA só acionará por muito tempo quando o indicador rápido for acionado para cima e vice-versa, em vez de ter tanto o equador quanto o indicador rápido acionados na mesma direção na mesma vela.
Eu havia tentado afinar o EA para atender a esse critério, mas não fui capaz de obter os resultados desejados. Há algo que eu estou fazendo errado? Por favor, ajude-me. Mais uma vez, obrigado.
Cumprimentos
Terrance
Oi mladen, revisei o código de acordo com seus comentários e notei que a troca só será acionada quando ambas as minhas linhas estocásticas forem acionadas para cima ou para baixo na mesma vela.
Entretanto, o que estou tentando conseguir é que se o indicador do equador estiver cruzando para cima indicando tendência de subida, a EA só acionará por muito tempo quando o indicador rápido for acionado para cima e vice-versa, em vez de ter tanto o equador quanto o indicador rápido acionados na mesma direção na mesma vela.
Eu havia tentado afinar o EA para atender a esse critério, mas não fui capaz de obter os resultados desejados. Há algo que eu estou fazendo errado? Por favor, ajude-me. Mais uma vez, obrigado.
Cumprimentos
TerranceTerrance
Você provavelmente terá que escrever um indicador personalizado para conseguir isso (algumas coisas em EAs você simplesmente não pode fazer da mesma forma que você faz indicadores)
Terrance Você provavelmente terá que escrever um indicador personalizado para conseguir isso (algumas coisas em EAs você simplesmente não pode fazer da mesma forma que você faz indicadores)
Oi mladen, uma coisa que eu não entendo é porque eu sou capaz de fazer isso com MA e não com iMA, apesar de ser o mesmo tipo de critério? Poderia ser algum tipo de ajuste de indicador?
Cumprimentos
Terrance
Oi mladen, uma coisa que eu não entendo é porque eu sou capaz de fazer isso com MA e não com iMA, apesar de ser o mesmo tipo de critério? Poderia ser algum tipo de ajuste de indicador?
Cumprimentos
Terranceporque com o indicador personalizado você pode salvar estados (tendências) entre os dois ticks, e quando você usa iMA você não pode (apenas um exemplo)