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

 
Artyom Trishkin:

Obrigado.

 
Boa tarde! Por favor, me ajude com uma pergunta sobre um simples loop.
A essência do laço é que a variável I é incrementada por uma.
O valor é impresso.
O laço em si:

para (int i=0; i<100000;i++)
{
Imprimir("I =",i);
if(i>3000)
{
Imprimir("I =",i);
pausa;
}

A questão é que se o número na condição if(i>3000) for aproximadamente superior a 100 (no meu caso três mil),
então a impressão produz valores diferentes. Constantemente.
Meu ponto é que se o laço for parecido com este
para (int i=0; i<100000;i++)
{
Imprimir("I =",i);
if(i>100)
{
Imprimir("I =",i);
pausa;
}

A impressão no testador mostra o valor I = 0, depois 1, depois 2, depois 3, depois 4, ... e assim por diante até 100.
Mas! se a condição é por exemplo if(i>3000), Print mostrará o valor desde... Eu nem sei como dizer corretamente...
a partir de um único número, por exemplo 2895 e depois adiciona um!

Aqui está um exemplo de como ele pode parecer:

se i > 100

100


se i >3000

3000



Qual é o problema? Eu tenho lutado o dia todo e não consigo entender(((( Por favor AJUDA!







 
eflaer:
Qual é o problema? Eu tenho lutado o dia todo e não consigo entender(((( Por favor, ajude-me!

abrir o arquivo de registro, há um relatório completo

 
Taras Slobodyanik:

abrir o arquivo de registro, há um relatório completo

Obrigado, abriu o arquivo de log, de fato toda a contagem regressiva começa com zero................ por que não está tudo escrito no log?

Como faço para que tudo apareça no registro, preciso de todo o tempo, estou procurando por um bug no algoritmo.

 
Só não é conveniente abrir um arquivo txt de 7+GB cada vez.......
 
eflaer:

Obrigado, abriu o arquivo de log, de fato toda a contagem regressiva começa com zero................ por que não está tudo no logbook?

Como faço para que tudo apareça no registro, preciso de toda a linha do tempo, estou procurando por um bug no algoritmo.

Como o registro e o trabalho com objetos gráficos consome muitos recursos (tempo), a MT é otimizada para isso e pode "engolir" parte do registro, mas rapidamente executar o próprio corpo do roteiro

adicionar Sleep(120) após a impressão().


eflaer:
Não é conveniente abrir cada vez que um arquivo de log, txt que pesa 7+GB.......

Apague o arquivo de registro periodicamente, ele é registrado por data, se você só escreve experiências nele hoje, por que você precisa de um arquivo tão grande?

 
Muito obrigado! Realmente útil! Vou continuar procurando o erro...
 
Vitali Vakulin:
Olá.Eu gostaria de fazer um drawdown de 10% para que, se eu tiver um drawdown, por exemplo, meu consultor especializado não abra novas ordens, ele apenas pegará as abertas para TP e pronto, apenas as médias abrirão. Isto me ajudará a não cair em um grande drawdown, se minha negociação for realizada em vários pares. Eu entendo a função, eu gostaria de poder implementá-la.

Pessoal, por favor, ajudem.

 

Boa noite.

Primeiras tentativas de escrever um EA. Você pode me dizer por que meu Expert Advisor abre apenas Buy? Onde está o erro?

extern double volume     = 0.05;   // Volume
extern int    stopLoss   = 1;      // StopLoss
extern int    takeProfit = 3;      // TakeProfit
extern int    slippage  = 10;          // Slippage
extern int    Period_bars  = 100;    // Period
extern int    magic      = 321;    // Magic
extern int    ATR_Period = 50;      // ATR Period

datetime newCandle;
double ABS_High=0;
double ABS_Low=1000000;

int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {
//---
 

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {

        double TD_Close=Close[1];

        double ATR=iATR(Symbol(),Period(),ATR_Period,0);

        double bsl=NormalizeDouble(Ask-(stopLoss*ATR),_Digits);

        double btp=NormalizeDouble(Ask+(takeProfit*ATR),_Digits); 

        double ssl=NormalizeDouble(Bid+(stopLoss*ATR),_Digits);

        double stp=NormalizeDouble(Bid-(takeProfit*ATR),_Digits); 

        for (int i=2; i<=Period_bars; i++)
        {
                if (Period_bars<=Bars-1)
                {
                        if (ABS_High<High[i]) ABS_High=High[i];
                        if (ABS_Low>Low[i]) ABS_Low=Low[i];
                }

                break;
        }

        if (TD_Close>ABS_High)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippage,bsl,btp,"Система пробоя открыла ордер BUY ",magic,0);

                else newCandle = Time[0];
        }
        else
        if (TD_Close<ABS_Low)
        {
                if (OrdersTotal () < 1 && newCandle != Time[0]) int tiket=OrderSend(Symbol(),OP_SELL,volume,Bid,slippage,ssl,stp,"Система пробоя открыла ордер SELL ",magic,0);
                else newCandle = Time[0];
        }
}

 
Andrey.Sabitov:

Boa noite.

Primeiras tentativas de escrever um EA. Você pode me dizer por que meu Expert Advisor abre apenas Buy? Onde está o erro?



Insira (em) o código com mais cuidado :-)

Não consigo ver onde ABS_High é alterado, parece ser constante 0 e o TD_Close>ABS_High condição é sempre correta

Razão: