Como codificar? - página 327

 

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);

 
tkuan77:
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_separate_window

#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 |

//+------------------------------------------------------------------+

mladen:
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_separate_window

#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);

}
 
tkuan77:
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

Arquivos anexados:
tk.zip  16 kb
result.gif  13 kb
 

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);

}

//+---------------------------------------------------------------+

 
Mastercash:
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.

 
mladen:
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

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 fazer é que se o indicador do equador estiver cruzando para cima indicando tendência para cima, o EA 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

 
tkuan77:
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

Terrance

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)

 
mladen:
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

 
tkuan77:
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

porque 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)