[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 317

 
gyfto:

Como posso simplificar esta expressão?

é do algoritmo ADX da MetaQuotes. As próprias MetaQuotes usam esta expressão:

- como simplificá-lo?


Por que a opção mais simples não lhe convém?

z=0;
if(y>x && y>0) z=y;
 
Roger:


Por que a opção mais simples não é boa o suficiente para você?


Acho que às vezes você tem que olhar para um problema de um ângulo diferente. Certo, obrigado.
 
gyfto:

hoz, em eu estava me perguntando como encurtar ainda mais o prazo.Veja: se colocarmos uma variável

temos cnt=cnt+step, onde

Mas 1=cnt/cnt, a -cnt=cnt/(-1), a única diferença é o denominador. Agora lembre-se que x^0=1, x^1=x, ou seja, podemos colocar nossa variável booleana _if no expoente, ou seja,step=cnt/a*(cnt^_if); onde

Mas ±a é supostamente 2*_if-1, ou seja

Ou simplificamos


Uau, você simplificou as coisas. Eu não entendo sua lógica.
 
Imaginei que desceríamos a se... :-)))
 
zoritch:
Imaginei que desceríamos a se... :-)))

Eu também entendi que não entendia nada. Nem mesmo aqueles ícones que eu não entendo... :)
 
hoz:

As barras de um sinal 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 quando um parâmetro de tendência é passado para esta função, que será responsável pela transferência da tendência principal assumida 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, para que as condições fossem observadas. Nesse caso, o preço de fechamento da barra será menor que o preço aberto e a diferença será negativa.

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

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

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

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

Ou para simplificá-lo ainda mais

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

   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      bool _if=((2*trend-1)*(Close[i] - Open[i])>=i_sizeOfSequentialCorrectionBar * pt); cnt=cnt+cnt/((2*_if-1)*MathPow(cnt, _if));
      
/*      if (i == 1)
      Print("i = ", i,"; cnt = ", cnt);*/
   }

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

Δ é a diferença, ou seja,Fechar[i] - Abrir[i], ^ é o sinal de potência. const - constante nesta expressão, ou seja,i_sizeOfSequentialCorrectionBar * pt, notação matemática padrão, eu não inventei nada. 2*bVar-1 é semelhante a±1, bVar aqui é qualquer bool-variável. E a expressão 2*bVar-1 toma valores não 0 e 1, mas -1 e +1.≥ é MQL4 >=, também uma notação matemática padrão.passo é um passo, ou seja, em cnt++ passo é 1, e em cnt=0 passo é -cnt. O que mais não ficou claro a partir das notações?

 
Eu não sei como criar logs, como posso conseguir que o MT4 apague automaticamente (ou não os crie de forma alguma) os logs livres? Algumas corretoras com 5 dígitos, estes troncos para o dia crescem até o tamanho assustador (1,6 gb), e o espaço no vps é limitado. Obrigado de antemão.
 
M2012K:
Como posso sugerir - como fazer o MT4 apagar automaticamente os logs livres (ou não criá-los de forma alguma)? Tenho que usar algumas corretoras com 5 dígitos, estes troncos começam a crescer em um dia (por 1,6 gb), e a colocação em vps é limitada. Obrigado de antemão.

Você mesmo pode fazer isso:

Biblioteca1, biblioteca2.

==============

Embora, o último arquivo (atual) seja aberto pelo terminal. Não é fácil apagá-lo. Mas você pode apagar o conteúdo, que está escrito no início.

A criação de toras não é desativada.

==============

1. Criar um link simbólico (biblioteca1) para a pasta de logs na pasta de arquivos.

2. Eliminar todos os arquivos desnecessários usando as ferramentas MQL4.

Abrir arquivo atual usando MQL4. Edite-o como você precisar.

4. Feche o arquivo.

5. Você pode apagar o link. Não é necessário. Virá a calhar mais tarde.

==============

Você também pode criar um arquivo de roteiro (BAT) e executá-lo no Expert Advisor. O roteiro é o mesmo que o anterior. Somente sem criar um vínculo. Trabalhando com arquivos, é claro, usando ferramentas do Windows.

 
M2012K:

Como posso aconselhar como apagar automaticamente (ou não criar) os logs livres?

Porque em alguns CDs com 5 dígitos, esses troncos por um dia crescem até um tamanho horrível (em 1,6 gb), e o espaço no vps é limitado. Obrigado de antemão.

registra o que?

qual é o erro?

 

Oi! preciso de ajuda para refinar um robô primitivo. Para começar, vou explicar minha estratégia simples para deixar mais claro onde a ajuda é necessária e com que finalidade.

A essência do TS:

1. Se o preço aberto for inferior ao MA e o preço fechado for superior, nós compramos.

2. Se o preço de abertura for maior que o MA e o preço de fechamento for menor, devemos vender.

Se o preço mudou em X% em relação ao preço mais favorável, então fechamos o pedido. Isto é semelhante a uma parada de arrasto, mas em vez de pips X% da distância de abertura do pedido e o melhor preço. Como é mostrado na foto:

AB - distância da abertura do pedido até o preço mais favorável; BC=X% do AB; C - fechamento do pedido.

Itens 1 e 2 que eu escrevi no programa:

extern int period=50;
extern int ma_shift=0;
extern int Magic=666;
extern double lot=0.1;
extern int SL=150;


//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  int kolpos=0;
  double ma=iMA (NULL,0,period,ma_shift,MODE_SMMA,PRICE_MEDIAN,0);
//----
   for (int pos=0; pos<OrdersTotal(); pos++)
   {
   OrderSelect (pos, SELECT_BY_POS, MODE_TRADES);
   if (OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
   kolpos++;
   }
   if (kolpos==0)
   {
 
   if(Open[1]>ma && Close[1]<ma)  
   OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+SL*Point,0,NULL,Magic,0,Red);
   if(Open[1]<ma && Close[1]>ma)  
   OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-SL*Point,0,NULL,Magic,0,Green);
   
   }
   
   
  
//----
   return(0);
  }

Geralmente, eu preciso de ajuda para escrever uma função para fechar pedidos para meu TS (ponto 3) e adaptar o código existente à função.

P.S. E eu sei que o TS não é bom.