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 644

 
tara:
Não.

Seria mais útil para você responder 'dez'! Caso você não o faça!
 
Got:

Explique onde estou errado, não encontra a ferramenta no Market Watch.

Tente também colocar "=" na condição i>=0

for(int i=SymbolsTotal(true)-1; i>=0; i--){
 
borilunad:

Clique em Gráficos, na parte inferior de Propriedades e, na parte superior esquerda, desmarque o Gráfico na parte superior! E em geral, use mais dela, ela virá a calhar!

Obrigado! funcionou.
 

O depurador não funciona - o que está errado?

Metatrader bild 646, editor bild 934. Aqui está o indicador mais simples:


Eu o administro no EURUSD, M1, e isto é o que eu recebo:

1

Ou seja, tudo é como deveria ser.

E agora faço um ponto de parada antes de Alertar e executar o Debugger:

O gráfico USDCHF,H1 aparece. De onde ele vem? SomenteEURUSD ,M1 está aberto.

Estou dirigindo-o e é isto que vejo:

Isto é, o indicador retira dados exatamente deste USDCHF,H1. Qual é o problema aqui?

A segunda pergunta. O Editor não coloca o script escrito na pasta Scripts mas na pasta MQL4 e coloca o arquivo compilado lá também. Tenho que arrastar e soltar manualmente o código fonte para a pasta Scripts, depois compilá-lo e o script aparecerá no Navigator somente então. Não tenho esse bug com indicadores, eles vão para suas pastas instantaneamente. É algo que estou fazendo errado ou o Editor está cometendo um erro?

Terceira pergunta. Eu ainda tenho 646 Bild, embora alguém no Fórum tenha dito cerca de 650 em maio. Não houve realmente nenhuma atualização desde então, ou novamente eu tenho algo errado?

Boa sorte a quem quer que me responda.

 
Obrigado pela sorte! Mas apenas respondendo à terceira pergunta! Eu também tenho um bild 646 até que o servidor nos atualize para um mais novo. Isto acontece quando eu o ligo depois de um descanso. Faço isso uma vez por semana antes do início da sessão. Boa sorte para você também!
 

Como colocar o SendMail e o Alert no indicador para que ele não reaja aos sinais antigos ao recalcular os valores do indicador, mas mostre o Alert e envie o correio somente nos novos?

Se for assim:

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
//////////////////

      string dir="";
      datetime tim=0;

int OnInit()
  {

   SetIndexStyle(0, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(0, 176);
   SetIndexBuffer(0, Up);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,3);
   SetIndexArrow(1, 176);
   SetIndexBuffer(1, Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }

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;
   double ma0,ma1,atr;
//---
      if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated; //period+shift;
   else
      limit=rates_total-(period+shift);

   for(i = 1; i < limit; i++)
  {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
            Up[i] = (Close[i]+Open[i])/2;
            dir="up";
            tim=Time[i];
            alerts(dir,tim);
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {   
            Down[i] = (Close[i]+Open[i])/2;
            dir="down";
            tim=Time[i];
            alerts(dir,tim);
        }
  }
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d, datetime t)
{
if(!IsTesting() && (TimeLocal()-t)>60)
{
if(alert==true) Alert("New ",d," arrow");
if(mail==true) SendMail("New signal",StringConcatenate("A new ",d, "signal detected by indicator"));
if(not==true) SendNotification(StringConcatenate("A new ",d, "signal detected by indicator"));
}
return;
}

então em qualquer efeito sobre o indicador (ajuste no gráfico, ajuste, mudança de TF, salto no lugar ou som agudo), ele reemana alertas e tenta enviar o mesmo correio para TODAS as flechas, desde o início do gráfico até o atual.

Pergunta em adição - o correio no log é marcado como"Mail: 'Test message' has been sent", mas nem uma única carta caiu na caixa (((

 
evillive:

Como escrevo SendMail e Alert no indicador, para que ele não reaja aos sinais antigos ao recalcular os valores do indicador, mas mostre Alert e envie correio somente nos novos?

Se for assim:

então em qualquer influência sobre o indicador (instalação no gráfico, ajuste, mudança de TF, salto no lugar ou som agudo), mostra novamente os alertas e tenta enviá-los pelo correio para TODAS as setas, desde o início do gráfico até o atual.

Pergunta adicional - o correio no registro é marcado como"Correio: 'Mensagem de teste' foi enviada", mas nem uma única carta caiu na caixa (((.


Eu o teria feito

//+------------------------------------------------------------------+
//|                                                       simple.mq4 |
//|                                                         evillive |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "evillive"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Magenta
#property indicator_color2 Aqua

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
double Up[];
double Down[];
extern int period = 2;
extern int method = 1;
extern int price = 0;
extern int shift = 4;
extern string _alerts_="alerts section";
input bool alert=false;//show alert
input bool mail=false;//send mail
input bool not=false;//send push notification
                     //////////////////

char dir=0;
datetime tim=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   SetIndexStyle(0,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(0,176);
   SetIndexBuffer(0,Up);
   SetIndexStyle(1,DRAW_ARROW,EMPTY,3);
   SetIndexArrow(1,176);
   SetIndexBuffer(1,Down);
   SetIndexLabel(0,"BUY!");
   SetIndexLabel(1,"SELL!");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
   double ma0,ma1,atr;
//---
   if(rates_total<=(period+shift))
      return(0);
//--- counting from 0 to rates_total
//--- initial zero
   if(prev_calculated<1)
     {
      for(i=0; i<=rates_total-(period+shift); i++)
        {
         Up[i]=0.0;
         Down[i]=0.0;
        }
     }
//--- starting calculation
   if(prev_calculated>0)
      limit=rates_total-prev_calculated-1; //period+shift;
   else
      limit=rates_total-(period+shift)-1;

   for(i=limit; i>=0; i--)
     {
      ma0 = iMA(NULL,0,period,0,method,price,i);
      ma1 = iMA(NULL,0,period,0,method,price,i+shift);
      atr = iATR(NULL,0,period,i);
      if(ma0>ma1 && Close[i]<Close[i+shift] && Close[i]>Close[i+period+shift])
        {
         Up[i]=(Close[i]+Open[i])/2;
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         Down[i]=(Close[i]+Open[i])/2;
        }
     }
      if(ma0>ma1 && Close[0]<Close[shift] && Close[0]>Close[period+shift])
        {
         if (dir!=1) {
            dir=1;
            alerts("UP",Time[0]);
         }
        }
      if(ma0<ma1 && Close[i]>Close[i+shift] && Close[i]<Close[i+period+shift])
        {
         if (dir!=-1){
            dir=-1;
            alerts("DOWN",Time[0]);
         }
        }

   

   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void alerts(string d,datetime t)
  {
   if(!IsTesting() && (TimeLocal()-t)>60)
     {
      if(alert==true) Alert("New ",d," arrow");
      if(mail==true) SendMail("New signal",StringConcatenate("A new ",d,"signal detected by indicator"));
      if(not==true) SendNotification(StringConcatenate("A new ",d,"signal detected by indicator"));
     }
   return;
  }
//+------------------------------------------------------------------+
 
Vinin:


Eu o teria feito

As linhas adicionadas devem estar fora do laço ou isso é uma gralha?
Certo, entendi, é assim que deve ser.
 

Olá, alguém tem um modelo para obter a média de uma posição?

Ou seja, se uma ordem está aberta e está perdendo, então abrindo uma segunda ordem na mesma direção, colocamos um ponto final no meio entre estas ordens e assim por diante, três ordens, quatro...?

 
Top2n:

Olá, alguém tem um modelo para obter a média de uma posição?

Ou seja, se uma ordem está aberta e está perdendo, então abrindo uma segunda ordem na mesma direção, colocamos um ponto final no meio entre estas ordens e assim por diante, três ordens, quatro...?


Pegue todos os preços abertos e calcule a média aritmética