Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1938

 
DanilaMactep #:

que valor deve ser escrito em OldTime? O_o

A própria seta é desenhada no momento em que a barra zero se abre.

Eu fiz esta condição.

Não funciona corretamente - mesmo no testador, há muitos alertas no registro.

Eu também recebo um monte de alertas - eu não entendo como escrever esta coisa (((

 
static datetime OldTime=0;
if(iTime(NULL,0,0)!=OldTime)
      {
      Alert("ДИВЕРГЕНЦИЯ НА "+Symbol()); OldTime=iTime(NULL,0,0);
      }

Assim, quando você arranca, você também recebe um alerta. Quando uma nova barra apareceriTime(NULL,0,0) será mudada e não haverá igualdade uma vez, então haverá igualdade e o se será falso.

Você também pode fazê-lo desta maneira.

static bool FlagNewBar=false;
   if(BarTime!=Time[0])
     {
      BarTime=Time[0];
      FlagNewBar=true;
     }

Ou podemos conseguir um novo bar a qualquer momento.

bool FlagNewBarF(int prd, datetime &ArgBarTime,bool &FlagNbar)
  {
   FlagNbar=false;
   if(ArgBarTime!=iTime(NULL,prd,0))
     {
      ArgBarTime=iTime(NULL,prd,0);
      FlagNbar=true;
     }

   return(FlagNbar);
  }

A chamada seria a seguinte

 if(FlagNewBarF(1, BarTime1,FlagNewBar1))
     {
      Alert("FlagNbar1 ",FlagNewBar1,"BarTime1 ",TimeToStr(BarTime1,TIME_DATE|TIME_SECONDS));
      
     }

   if(FlagNewBarF(5, BarTime5,FlagNewBar5))
     {
      Alert("FlagNbar5 ",FlagNewBar5,"BarTime5 ",TimeToStr(BarTime5,TIME_DATE|TIME_SECONDS));
     
     }
 
Valeriy Yastremskiy #:

Desta forma, haverá também um alerta ao carregar. Quando uma nova barra apareceriTime(NULL,0,0) será mudada e não haverá igualdade uma vez, então haverá igualdade e o se será falso.

Muito obrigado pela ajuda - eu a lixei - deu 1 alerta na compilação - vamos ver o que acontece a seguir:-)
 

A "nova barra" é maligna, neste evento você pode obter dados do indicador "última barra", ou seja, newbar-1.

Se você executar 3 terminais em um servidor e, dependendo da freqüência de negociação, o sinal pula em alguns terminais, ou seja, antes de enviar a impressão do conjunto de pedidos (sinal de compra, por exemplo), e o valor da impressão do indicador mostrará o valor da barra anterior.

É claro, você pode fazer algumas verificações...

 
Valeriy Yastremskiy #:
A pasta de metaquotas gerais é a pasta terminal, ela contém as pastas terminais gerais, ali os logs terminais, os dados e a pasta de teste, ela tem seus próprios logs e pastas de arquivos. A pasta mcl contém logs de EAs, scripts, indicadores, janelas, subwindows.
tudo. Spc. Ontem eu a limpei. Vou verificar isso novamente hoje. Limpeza de 30GB. A partir de cerca de 10 terminais e história, a maioria em ferramentas e troncos...
 
Artyom Trishkin:

Nesta linha eu quero começar a ajudar aqueles que realmente querem entender e aprender programação na nova MQL4 e querem mudar facilmente para a MQL5 - as linguagens são muito semelhantes.

Este blog será um bom lugar para discutir problemas, algoritmos de sua solução e quaisquer outras questões relativas à programação MT de uma forma ou de outra.

Espero que outros membros experientes do nosso fórum se juntem à discussão e que a filial seja interessante para todos.

Olá, ninguém pode me ajudar com a função de ordem próxima, estou tentando o seguinte,

para (int i=1; i<=OrdensTotal(); i++)

{

if(OrderSelect(i-1,SELECT_BY_POS)==verdadeiro)

{

if( Pergunte<= OrderOpenPrice())CloseBay();

}

}

Quando a Ask está acima do bay da ordem, tudo está bem, assim que a Bid fica acima do bay da ordem a ordem é removida, e deve ser removida quando a Ask está abaixo do preço aberto. Por favor, ajude-me a entender isto, serei muito grato a você. Atenciosamente, Alexandre.

 
Alexandr Spravchikov #:

Olá, ninguém pode me ajudar com a função de ordem próxima, estou tentando desta maneira,

Você já tentou isso?

void CloseBuy()
{
   for(int i= OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if((OrderSymbol()==_Symbol) && (OrderMagicNumber()==Magic) && (OrderType()==OP_BUY))
         {
            if( Ask<= OrderOpenPrice())
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Green))
            {
               Print("Error closing a buy order!"+  IntegerToString(_Period,0) +" Error code = " + IntegerToString(GetLastError(),0));
            }
         }
      }
   }
   return;
}
 

Saudações. Você pode me dizer como fazer uma consulta de api comercial para "BTCUSDT" para indicar o número de lotes não em BTC mas em USDT?

 

Olá a todos! Uma palavra de conselho, por favor.


A idéia é simples. Escrever um EA que abrirá uma posição e fechará a posição oposta ao romper uma das fronteiras do canal global. O canal é construído pelo indicador.

Eu fiz uma variante usando guias da Internet. Este bot abre/fecha posições no testador de estratégia, mas se você olhar para o gráfico, ele não atende em nada às minhas condições. Verifiquei todas as variáveis no buffer e verifiquei a existência de erros. Eu não obtive nenhum resultado.


Se alguém puder, por favor, me avise o que está errado, que direção tomar para cavar. :3


Anexei um arquivo com variáveis do buffer, demonstração de indicador, suas variáveis iniciais, minha variante de Expert Advisor.

Arquivos anexados:
9.png  14 kb
f2.png  26 kb
second.mq4  15 kb
 
E1Macho1 #:

Olá a todos! Você pode me dar uma dica, por favor?

Qual o caminho a seguir. :3

Escavar na direção do uso do depurador

 
Olá a todos. Você poderia me dizer como funciona a chamada indicadora em mql4. Mudo o período para a CCI em loop, mas se o número de iterações se tornar superior a 205, então a CCI começa a desenhar zeros, e em outro buffer. Se num=204, então o período pode ser até 500, mas se num=205, então o período máximo pode ser 207, e então ele conterá zero. Há vários milhares de barras na tabela. Se não mudarmos o período do loop, tudo está bem, é claro. Qual pode ser a razão? Eu enfrento constantemente problemas com múltiplas chamadas de indicadores. Por favor, informe como lidar com isso, talvez leia alguns artigos?
   if(rates_total>prev_calculated)
   {
      int num=205;
      period =2;   

         for(int i=0; i<=num; i++)
         {
            cci[i] = iCCI(NULL,0,period,PRICE_CLOSE,i);   
            period++;
         }
      ////////////
      period=208;

      for(int i=0; i<100; i++)
      {
         CCI[i] = iCCI(NULL,0,period,PRICE_CLOSE,i);
      }
    
   }
Se num=300, o período máximo é 66
Arquivos anexados:
iCCI.mq4  10 kb
Razão: