[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 311

 

Pergunta sobre o funcionamento do testador: Depois deexecutar um teste, você muda os parâmetros (datas, par de moedas, período de tempo), executa novamente o teste - ele é executado, mas quando está sobre as informações nas guias como "gráfico" e "relatório" não muda em nada - tudo permanece do teste anterior. O relatório salvo também se revela velho. Qual é a razão e como consertá-la? Talvez haja alguma função para redefinir os resultados?

Li o manual, os artigos, procurei no fórum - não encontrei nenhuma menção a tal problema...

 

Acho que preciso usar um arquivo externo para exibir o indicador para que eu possa usá-lo como um Expert Advisor, não consigo descobrir o que está acontecendo.Eu preciso de ajuda, por favor, só falta um pouco, sem dinheiro, infelizmente o último agora na conta comercial, mas o sistema está lavrando, verificado, se alguém precisar fazer um pequeno relatório sobre o comércio manual.

1) com o relatório

Quem vai ajudar a terminar o que ele começou com eles vai compartilhar a estratégia (Indicator crunch apenas parte da estratégia, mas não menos importante). Graduação real (não pode por tanto tempo, não pode por sorte, cortar apenas nossa energia e que não põe um loop stop, até lá, tudo vai em alta e você vê com que progresso).

Arquivos anexados:
 
mas aqui estão os pedaços de código
Arquivos anexados:
 

Você pode me dizer o que está errado? Quatro ordens seguidas modificam-se normalmente, mas no quarto tick começa a escrever OrderModify error 1.

Após uma inversão de tendência, a primeira ordem está bem, a segunda ordem se modifica normalmente, mas mais uma vez o mesmo absurdo é escrito...

A normalização não desempenha um papel.

Eu tenho lutado por vários dias!

   for (x=0;x<OrT;x++)
   {
   if (OrderSelect(x,SELECT_BY_POS)==true)
    {
     if (OrderMagicNumber() == magic)
      {
       if (OrderType = OP_BUY)
       {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (High[m]-OrderOpenPrice() >= TS*Point)
        {
         if (OrderOpenPrice()+spread*Point != OrderStopLoss())
         {
          OrderModify(OrderTicket(),OrderOpenPrice(),                           //переводит SL в безубыток
          OrderOpenPrice()+spread*Point,OrderTakeProfit(),0,CLR_NONE);
          return;
         }
        }
       }
      }
     if (OrderMagicNumber() == magic)
     {
      if (OrderType = OP_SELL)
      {
       shift = iBarShift(Symbol(),30,OrderOpenTime());                           //запомнил свечу открытия
        for (m=shift;m>=1;m--)
        if (OrderOpenPrice()-Low[m] >= TS*Point)
        {
         if (OrderOpenPrice()-spread*Point != OrderStopLoss())
         {
           OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),dig),     //переводит SL в безубыток
           NormalizeDouble(OrderOpenPrice()-spread*Point,dig),
           NormalizeDouble(OrderTakeProfit(),dig),0,CLR_NONE);
           return;
         }
        }
       } 
      }
    }
   }

Agradecemos antecipadamente.

 
CYBOPOB:

Você pode me dizer o que está errado? Quatro ordens seguidas modificam-se normalmente, mas no quarto tick começa a escrever OrderModify error 1.

Depois de uma inversão de tendência, a primeira ordem é OK, a segunda a modifica, mas novamente exibe o mesmo erro...

A normalização não desempenha um papel.

Tenho lutado com isso há vários dias!

Agradecemos antecipadamente.

Considere você mesmo as regras (ao escrever o código), ou use soluções prontas onde estas regras já são levadas em conta.
 
CYBOPOB:

Você pode me dizer o que está errado? Quatro ordens seguidas modificam-se normalmente, mas no quarto tick começa a escrever OrderModify error 1.

Após uma inversão de tendência, a primeira ordem está bem, a segunda ordem se modifica normalmente, mas mais uma vez o mesmo absurdo é escrito...

A normalização não desempenha um papel.

Eu tenho lutado por vários dias!

Agradecemos antecipadamente.

Antes da modificação, é necessário verificar se o parâmetro de ordem de parada não é igual à nova parada. Se eles forem iguais, não há nada a modificar. Portanto, erro 1.
 

Sobre a classificação de matrizes.
Estou tentando ordenar duas matrizes: a primeira em ordem ascendente(ArraySort(num_array);função), e a segunda de acordo com a primeira, de modo que se o quinto elemento da primeira matriz se mover para a primeira posição, então a segunda matriz fará o mesmo (quinto elemento na primeira posição).
Se houver uma função MQL para classificar arrays juntos, por favor, me dê o link.
Cumprimentos. Shurkin.

 
artmedia70:
Antes de modificar, você precisa verificar se o parâmetro de ordem de parada não é igual à nova parada. Se eles forem iguais, não há nada a modificar. Portanto, erro 1.


Não é isso?

if (OrderStopLoss() != OrderOpenPrice()-spread*Point)

Artem, não considere isso um problema, escreva o código, eh? Ou me dê aquilo que você tem na mão, eu vou terminar este tormento...

 
CYBOPOB:

Não é isso?

Artem, não considere isso um problema, escreva o código, eh? Ou me dê aquilo que você tem na mão, eu vou terminar este tormento...


Não é isso. Eu lhe disse:

Antes de modificar, você precisa verificar se o parâmetro de ordem de parada não é igual à nova parada. Se eles forem iguais, não há nada a modificar. Daí o erro 1.

 

Tenho uma pergunta para os profissionais. Eu quero tornar a função universal. A função conta quantas barras de uma característica (em alta ou em baixa, que correspondem ao tamanho, talvez algo mais que eu acrescentei) seguem umas às outras e se houver uma barra que não corresponda a esta característica, ou seja, apontada em outra direção, o contador é reinicializado.

Aqui está um código, onde eu estou calculando em uma das variantes. Isto é, se as barras de uma característica estão subindo, ou seja, em alta.

int LastCandlesType(int trend)
{
   int cnt,                            // Счётчик идущих друг за другом свечей с требуемыми признаками

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)     // Если бар соответствует требуемым признакам..
          cnt++;                                                                     // .. прибавим 1 к счётчику

      if (Close[i] < Open[i])                                                        // Если бар, не соответствует основному признаку..
          cnt = 0;                                                                   // .. счётчик обнуляем
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

   if (cnt == 3)                                                                     // Если 5 баров вподряд бычьи..
    return (REQUIRED_SEQUENTIAL_CANDLE_GOT);                                         //..Выходим из функции
}

Como fazer para que ao passar o parâmetro de tendência para esta função, que será responsável por passar a suposta tendência principal no momento, o cálculo se baseie neste parâmetro.

Isto é, se a tendência == para baixo, a função no loop era como agora, e se atendência == para cima, o Aberto[i] e o Fechado[i] eram trocados no loop, de modo que as condições fossem observadas. Porque, nesse caso, o preço fechado da barra será menor que o preço aberto e a diferença será negativa.