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

 
(NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)-Lots*(CountTrades()+1));

Composta de uma fórmula para calcular o lote, você pode me dizer onde o erro pode estar? O pedido não abre por causa de alguma incorreção.

A fórmula ainda é válida para um depósito de 100 dólares ou mais, com uma alavancagem de 1-100 ou mais. E, se o depósito sem alavancagem de 1.000$, verifica-se que a fórmula não funciona porque temos FreeMargin/Contract = 0,01 e não podemos deduzir deste valor porque não atenderemos às condições comerciais.


Por outro lado, por que deduzi-lo, se a FR&Margin já leva em conta as posições em aberto? Então pareceria assim

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2)

Eu irei testá-lo.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
 
geratdc: Composta de uma fórmula para calcular o lote, você pode me dizer onde o erro pode estar? O pedido não abre por causa de alguma incorreção.
      Лот=NormalizeDouble(0.65*AccountBalance()*AccountLeverage()/          // Использую такую формулу
                             MarketInfo(_Symbol, MODE_LOTSIZE),2);
 
STARIJ:

Saudações)) O que é 0,65? de onde veio?

Eu estava pensando em alavancagem, mas cheguei à conclusão de que o equilíbrio já está em teoria estabelecido com a alavancagem. Ou eu estou errado?


0,65 é uma reserva para um deslizamento de 35% ou o quê? A propósito, é uma boa idéia, porque se você toma muito e depois sofre perdas, então você está ferrado.

Eu gosto! A fórmula funcionou depois que eu removi a perda, é legal)) em resumo, o lote era 0,02, então quando três posições entraram em drawdown, o lote de emergência foi calculado como 0,1, ou seja, 5 vezes! Entretanto, minha função é sensível a mais perdas quando uma ordem de emergência é aberta, portanto não deve haver problemas.

Colega, obrigado pelos pensamentos valiosos! Irei testá-lo!


Decidi também verificar as condições comerciais. O que você acha deste código?


// Проверка Баланса
   if(cn==0 && TradeCheck==true && AccountBalance()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE)<SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN))
     {
      Print("Баланс счёта не обеспечивает торговые требования");
      SendMail("EA BJH","Баланс счёта не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
// Проверка Lots
   else if(cn==0 && TradeCheck==true && AccountBalance()/Lots<SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE))
     {
      Print("Lots не обеспечивает торговые требования");
      SendMail("EA BJH","Lots не обеспечивает торговые требования");
      ExpertRemove();  // Снять советник с графика
     }
Arquivos anexados:
1.gif  10 kb
 
geratdc: Colega, obrigado pelos pensamentos valiosos! Vou testá-lo!

Se você vira-lo - COMPRAR ao invés de VENDER e VENDER ao invés de COMPRAR - será melhor

Experimente, Colega!!!

Robô, ao invés de declarar um fato, tem que emitir uma recomendação: Chefe, acrescente dinheiro. Eu já desperdicei esses...

 
STARIJ:

Se a invertermos - COMPRAR ao invés de VENDER e VENDER ao invés de COMPRAR - será melhor

Experimente, Colega!!!

O robô, ao invés de declarar um fato, deveria dar recomendações: Chefe, acrescente dinheiro. Você já os desperdiçou...


Tudo bem, havia configurações especiais para acionar uma ordem de emergência - eu tinha que ver que lote iria pegar.

lot=NormalizeDouble(AccountFreeMargin()/SymbolInfoDouble(Symbol(),SYMBOL_TRADE_CONTRACT_SIZE),2);

Deixei este por enquanto. Eu tentei com equilíbrio, acredito que será mais preciso em termos de margem, mas o resultado é o mesmo. Vamos ver os resultados dos testes mais tarde.

 
geratdc: Está tudo bem.

A Internet está de volta! Posso escrever para um e-mail?

 
STARIJ:

É assim que deve ser? Níveis -0,75 e +0,75.

É mais fácil usar uma variável. Primeiro 0. Depois +1 -1 -1 +1 -1


Sim, assim. Como devo escrevê-lo no Expert Advisor de tal forma, que quando ele é lançado, se estamos em uma lacuna entre níveis, ele toma o valor do último do qual nós saltamos?

 
AlGuru: Mas como escrevê-lo no EA para que, quando começar, se estivermos no intervalo entre os níveis, ele tome o valor do último do qual nos recuperamos?

O que você quer dizer com "lutou fora"? Atacou-nos? Lutou de volta quando - antes do lançamento? Como poderíamos ripostar se tivéssemos acabado de lançar? Leia antes de enviar - tudo isso faz sentido?

 
STARIJ:

O que você quer dizer com "ripostar"? Atacou-nos? Fomos vencidos de volta antes do lançamento? Como poderíamos ripostar se acabássemos de lançar? Leia-o antes de enviá-lo - faz sentido?


OK, não se recuperou, mas produziu um ressalto da linha. Desde que a EA seja colocada em outra máquina/terminal ou em caso de desligamento do computador, reiniciando o terminal, ela (a EA) começou a funcionar imediatamente calculando em que nível o preço era o último e definindo o valor variável correto, em vez de esperar que o preço atingisse o nível desejado. Espero tê-lo descrito claramente.

 
AlGuru OK, não se recuperou, mas produziu um ressalto da linha. Desde que a EA seja colocada em outra máquina/terminal ou em caso de desligamento do computador, reiniciando o terminal, ela (a EA) começou a funcionar imediatamente calculando em que nível o preço era o último e definindo o valor variável correto, em vez de esperar que o preço atingisse o nível desejado. Espero tê-lo descrito claramente.

O que isso tem a ver com outra máquina ou terminal? Ou desligamento - reinício. Você pretende ligar o computador ou reiniciar o Expert Advisor? Por que tem que ser um ressalto, mas se sair da linha de nível e cruzar para trás? E se ele espera - é apenas saltar uma oportunidade ao ligar. Você pode descartar isso no início, e voltar a ele quando terminar. E então de onde vêm as linhas, quando aparecem, quem as coloca, ou como a EA as calcula. Se forem colocados em outro computador ou antes que o computador seja desligado, o preço pode ir muito longe. Se os níveis são calculados pelo próprio Expert Advisor, isso é outra questão. Veja agora: o preço saltou do nível superior e perambulou entre os níveis durante uma hora. E então ligamos o computador e ativamos o Expert Advisor. Obviamente, temos que atribuir o tempo de ação a este salto. Uma hora se passou e o rebote foi esquecido. Veja, há muitas perguntas! E você está claro. É claro para você, você conhece a essência da questão. Mas de fora é a escuridão. A arte da programação é a capacidade de fazer muitas perguntas e encontrar respostas. Dê uma olhada no roteiro - talvez haja um ponto racional aqui

//+-------------------------------------------------------+
//| Проверка                                     PROBA.mq4|
//+-------------------------------------------------------+
#property strict

void OnStart()
{
  bool ДостигнутПервыйУровень=false,
       ДостигнутВторойУровень=false;
  int Переменная1=0, Переменная2=0;
  double Уровень;
  int x;

  Alert("----- Снизу вверх --------");
  for(x=13; x<27; x++)
  {
    Уровень=round(sin(x)*10)/10;

    if(Уровень>0.75)
    {
      Переменная1=1;
      Переменная2=0;
    }

    if(Уровень<-0.75)
    {
      Переменная1=0;
      Переменная2=1;
    }

    Alert("  ", x, "       ", Уровень, "        ", Переменная1, "        ", Переменная2);
  }
  Alert("Номер  Уров  Пер1  Пер2");
}
Razão: