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

 
BeerGod:

Traduzir a variável a ser mapeada para uma impressão ou comentário em cadeia DoubleToStr( valor duplo, dígitos int) e definir a precisão desejada.

https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


Ok, obrigado. Eu também estava pensando em fazer assim, ou construir através de ObjecCreate()...
 
okvseok:

por favor, sugira uma função que conte o número de pedidos perdidos (desde o último) até o último take profit...

Obrigado!

Você poderia tentar desta forma:
//+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
  int loss = 0;
  for(int i=OrdersHistoryTotal()-1; i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

quantas vezes preciso ligar paraOrderSelect antes de usar OrderProfit(), OrderType() etc. ? é uma vez dentro de Start suficiente ou faz cada vez antes de usar OrderProfit, OrderType etc... Preciso ligar paraOrderSelect ?

e a OrderSelect tem de ser chamada imediatamente antes da OrderProfit ou pode ser chamada em qualquer lugar no início, desde que seja ??

 
hoz:

Eu escrevi a pergunta, mas ninguém parecia notar. Não queria escrever aqui uma pergunta tão longa, para não confundir a todos. Por favor, note que...

https://www.mql5.com/ru/forum/142983

Tente desta forma:

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Porque não há garantia de que seus pedidos tenham sido abertos exatamente ao mesmo preço e ao mesmo tempo.

 
hoz:

Eu escrevi a pergunta, mas ninguém parecia notar. Não queria escrever aqui uma pergunta tão longa, para não confundir a todos. Por favor, note que...

https://www.mql5.com/ru/forum/142983

Já lhe dei um algoritmo rudimentar nessa linha (corrigi-o ligeiramente aqui para melhor compreensão de algumas das nuances) e não há necessidade de começar uma horta:


O algoritmo é tão simples quanto um pãozinho.

O fechamento parcial não muda a magia. O bilhete muda, mas a Magia não muda.

Há uma postura aberta e níveis em que esta postura deve ser parcialmente fechada.

Suponha o Nível 1, Nível 2 e Nível 3.

Se a posição Comprar está em lucro e Bid >= Level1 && Bid< Level2 ---> fechamos a primeira parte da posição (com o lote que é menor que o lote desta posição, desde que o lote restante não seja menor que o lote mínimo), então:

Se Bid >= Level2 && Bid< Level3 ---> fechar a segunda parte da posição (por um lote menor que o lote desta posição, desde que o lote restante não seja menor que o lote mínimo), mais adiante:

Se Bid >=Nível3 && Bid<Level4 ---> fechar a terceira parte da posição (por muito menor que o lote desta posição, desde que o lote restante não seja menor que o lote mínimo), mais adiante:

1. Se no fechamento parcial no nível Bid>=LevelX o lote se tornou menor que o lote mínimo ---> feche a posição inteira

2) Se após o terceiro fechamento no nível Bid>=Level3 ainda houver uma posição, ou acompanhar a posição restante com uma rede de arrasto após o nível 4 ser passado, ou fechar tudo de uma vez.

Isso é tudo.

Para Vender, olhamos Ask<==Level1 && Ask>Level2 ... etc. ...

Faça um loop em todas as nossas posições, selecione cada uma delas por índice, calcule seus níveis e lotes de fechamento para a posição selecionada e aproveite o algoritmo de trabalho ... :)

Ao mesmo tempo, não há necessidade de armazenar na memória da EA (em variáveis) os valores desses níveis, o que é muito conveniente - se a EA por algum motivo terminar seu trabalho, então após a retomada não perderá dados sobre os níveis - ela os recalculará para cada posição na mosca.

Mais uma coisa: após um fechamento parcial, não se esqueça de reapertar a parada de proteção. Após fechar no nível 1 - parar no ponto de equilíbrio, após fechar no nível 2 - parar no nível 1, após fechar no nível 3 - parar no nível 2, etc...


 
Olá a todos, alguém tem um exemplo de um Expert Advisor usando um indicador personalizado?
 
dimarik0000:
Olá a todos! Alguém tem um exemplo de um EA usando um indicador personalizado?
Qual é o problema?
 
artmedia70:
Qual é o problema?


Li o artigo sobre a transferência de um indicador personalizado para o código do Expert Advisor e fiquei confuso. Devo fazer isso ou é suficiente especificar certos parâmetros indicadores no código?
 
dimarik0000:

Eu li o artigo sobre a portabilidade de um indicador personalizado para o código do Expert Advisor e estou confuso, devo fazê-lo ou basta especificar apenas alguns parâmetros específicos do indicador no código?
Se você não tem muita experiência, é melhor usar iCustom() ou estudar e compreender completamente o princípio de funcionamento do indicador antes de adicionar sua lógica ao Expert Advisor.
 

713
borilunad 15.01.2013 12:10

Você poderia resolver um mistério: Por que quando eu inseri esta função || isCloseLastPosByTake() == Verdadeiro || o especialista no testador começou a desacelerar muito, vezes 10! Esta é uma das 4 condições mutuamente exclusivas, portanto não posso usar a cadeia como em condições somadas para fazer o código funcionar mais rápido. O que você pode me aconselhar? Agradecemos antecipadamente seus conselhos!

Razão: