Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 924

 

Olá, você poderia me aconselhar?

Procurando o alto igual ao alto da primeira barra da história, guardo o índice da barra encontrada na variável High_i

Euvou assim:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Agora, eu verifico se as máximas antes e depois das três barras devem ser menores do que a máxima da primeira barra.

Preciso incluir isto no laço:

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

Por um lado, eu tento verificar assim

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Por favor, ajude.




	          
 
tatianati:
Agora verificando, o hai das três barras antes e depois deve ser menor do que o hai da barra encontrada.

Poderia ser assim:

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Provavelmente, assim:



Obrigado, funciona.

Mas depois de aumentar o número de barras, como esta:

for(int x=(High_i-7); x<=(High_i+7); x++)

surge.

arrayfora do alcance em 'ta_v1_05.mq4' (174,11)

linha 174, esta aqui:

   if(High[x]>=High[High_i])

por favor, me diga como consertá-lo.

 
você tem certeza de que x é um número natural ou 0? se high_i = por exemplo 6, então x = -1, e high[-1] já é um problema. talvez acrescente um cheque na linha 173 se (x < 0) continuar;
 
tatianati

danik: você tem certeza de que x é um número natural ou 0? se high_i = por exemplo 6, então x = -1, e high[-1] já é um problema. talvez acrescente um cheque na linha 173 se (x < 0) continuar;
Para três barras, tal "cheque" foi feito:
      for(j=i+3;j<=i+m;j++)

Para os outros valores, você precisa mudá-los em todos os lugares.
Você poderia começar com isto, e depois ver se isto resolve o problema ou se há algo mais que precisa ser consertado.
 
Olá, você poderia me aconselhar, há uma função para fechar pedidos, mas os pedidos não são fechados por alguma razão, não consigo entender o que está errado?
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Olá, você poderia me aconselhar, há uma função para fechar pedidos, mas os pedidos não são fechados por alguma razão, não consigo descobrir o que está errado?

O preço não pode ser intrigante!

int ClosePrice;
 
TarasBY:

O preço não pode ser intrigante!

oh certo!!!! Obrigado!!!
 
Ajude-me a encontrar um bug no código, parece estar desenhando duas linhas baseadas nos dados do indicador ZeroLag MACD para EUR\USD e GBP\USD, mas nada acontece. Aqui está o código
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
Por favor, ajude-me a encontrar um bug no código, parece que a ZeroLag MACD deveria traçar duas linhas com dados dos indicadores EUR\USD e GBPUSD, mas nada acontece. Aqui está o código

Há rumores de que IndicatorCounted() não funciona, também o recálculo do indicador é mais correto para contar do passado para o presente, e há mais alguns erros no código.

O próprio P.S. ZeroLag MACD também deve ser "ajustado" para a nova máquina virtual.

Arquivos anexados: