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

 
gyfto:

Ou simplifique-a ainda mais.

Aqui Δ é o significado da diferença, ou seja,Fechar[i] - Abrir[i], e ^ é um sinal de grau. 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, passo igual a 1 em cnt++, e passo igual a -cnt em cnt=0. O que mais não ficou claro a partir das anotações?

gyfto, obrigado pela explicação. Mas há um ponto. De qualquer forma, não podemos resolver o problema alterando o dígito de saída da expressão. No momento, onde ocorre a zeragem, os preços de abertura e fechamento devem ser "trocados". Isto é, do meu ponto de vista, a universalidade não pode ser alcançada. Isto é o que tenho me intrigado.

Vadim escreveu há algum tempo que colocar uma função dentro do laço torna o código mais lento por uma ordem de magnitude. Será que se aplica apenas a casos em que uma função calcula seus valores a cada iteração de loop ou a qualquer outro caso? Por exemplo, até terminar de escrever o Expert Advisor, eu reescrevi a função que estava tentando simplificar usando o seguinte esquema:

//+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType(int directionMA)
{
   int cntUp,                                                                            // Счётчик идущих друг за другом свечей с..
       cntDn;                                                                                // .. требуемыми признаками
       
   for (int i=i_AnyBarsToHistory; i>=1; i--)
   {
      if (directionMA == CROSS_UP)
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)              // Если бар соответствует требуемым признакам..
             cntDn++;                                                                     // .. прибавим 1 к счётчику

         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0;                                                                   // .. счётчик обнуляем

         if (cntDn == i_sequentBarsСount)                                                   // Если cnt баров в подряд медвежьи..
             return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                         // .. Выходим из функции
      }

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

         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0;                                                                   // .. счётчик обнуляем
     
         if (cntUp == i_sequentBarsСount)                                                   // Если cnt баров в подряд бычьи..
             return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                         // .. Выходим из функции
      }
   }
}

Eu fiz os contadorescntUp ecntDn diferentes, porque podeter um valor de uma vez e depois outro quando as barras de cálculo são usadas em um ciclo.E o contador pode somar um valor e continuar somando outro valor. E se a variável for a mesma, o número de barras de uma característica será adicionado ao contador de barras de outra característica.

É aqui que o conselho é necessário, talvez seja melhor resumir de alguma outra forma?

A questão é que o Expert Advisor ainda não é um dos grandes. Eu tenho as carroças e esta função. Tenho a sensação de que em vez de longo, a coruja vende e vice versa. Estou tentando entender como isso pode acontecer. Talvez haja algo errado aqui?

 

Olá, comecei a aprender o mql4, escrevi um roteiro que bloqueia a perda de pedidos. Não posso resolver um problema: o roteiro bloqueia todas as encomendas com perdas a partir de -10, mas continua bloqueando-as enquanto o preço estiver abaixo de -10. Como fazer para que o travamento aconteça apenas uma vez? Ou seja, se a perda chegar a -10, o roteiro bloqueou essa ordem e a deixa lá mesmo que a perda continue aumentando.

stopLoss duplo externo=150;

duplo lucro externo=-10;

//+ +

//----
void start()
{
double profit=Profit;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continue;

if(OrderType()==OP_BUY && OrderProfit()<Profit*Point)
Lots+=OrderLots();
if(OrderType()==OP_SELLL && OrderProfit()<Profit*Point)
Lots-=OrderLots();


}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);
//

return(0); }

 

Boa tarde.

Por favor, veja o código, eu quero calcular o tempo médio de uma negociação ( negociação de ordem pendente)

//+------------------------------------------------------------------+
//| Расчет среднего времени сделки            |
//+------------------------------------------------------------------+
double Sredneevremyasdelky(){
datetime Tsd=0; // общее время сделок
datetime Tsvsd=0; // среднее время сделки 
int n=0;
int orders=HistoryTotal();  // history orders total

        for(  int i=orders-1;i>=0;i--)
                  {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
                   { 
                        Print("Ошибка в истории!"); 
                        break;
                   }
                if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
                  continue;
                  n++;
                 Tsd=Tsd+(OrderCloseTime()-OrderOpenTime());
                   }
            if (n>0) Tsvsd=Tsd/n/60;


            return(Tsvsd);
         }

Desde o acionamento do pedido até o fechamento.

 
Stells:

Boa tarde.

Por favor, veja o código, eu quero calcular o tempo médio de uma negociação (negociação de ordem pendente)

Desde o acionamento do pedido até o fechamento.


Por que você calcula o tempo médio no ciclo? Talvez fosse melhor fazer isso após o ciclo. E seria uma boa idéia definir o período de cálculo
 
Vinin:

Por que você calcula o tempo médio no ciclo? É uma operação desnecessária. Talvez fosse melhor fazer isso após o ciclo. E seria bom definir o período de cálculo
Você o tirou do laço. Como você define o período de cálculo?
 
Stells:
Tirei-a do ciclo. Como faço o período de cálculo?

Variáveis externas, por exemplo
 

Entendo, a data precisa ser trazida à tona de alguma forma

Qual é a sua função?

 
Stells:

Entendo, a data precisa ser trazida à tona de alguma forma

Qual é a sua função?


Por que complicar as coisas quando há um exterior
 

hoz ,eu me mudarei assim que estiver livre.

Eu tenho esta pergunta sobre otimização. Estou lidando com o algoritmo EMA. Como você sabe, é a recorrência que realmente economiza tempo. Referindo-se ao código original:

...

Transferido parahttps://www.mql5.com/ru/forum/144691

 
gyfto:

hoz ,eu me mudarei assim que estiver livre.

Tenho esta pergunta sobre otimização. Estou lidando com o algoritmo EMA. Como você sabe, é a recorrência que realmente economiza tempo. Referindo-se ao código original:

Eu levei o Matcad especificamente para lidar com pesos gerados pela EMA:

A propósito, agora está claro para mim por que os indicadores que usam EMA (que eu acho que deveria ser chamado de função de potência em vez de expotencial) usam um período de 14. Então, por que levar o último peso tão alto quando você pode simplesmente embrulhar uma função de potência se o próximo peso é mais importante do que o anterior? Eu não pergunto mais porque usar a recorrência quando os pesos finais após a recorrência podem ser derivados por uma fórmula (ver F(n,x) e y(n,x)).


Talvez você devesse abrir sua própria filial. Por que você precisa de um "Ramo para iniciantes"?