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

 
EVGENII SHELIPOV #:

Bom dia!!!

Por favor, ajude a escrever o código para fechar ordens min e max em uma grade EA quando um certo nível de saque é atingido

Escrevi duas funções para calcular o lucro dos pedidos máximo e mínimo

Eu tenho uma função que calcula o valor dessas ordens. Parece não haver aqui nenhum problema.

A questão é como fechar somente estas duas ordens, eu encontrei a função ClosseAll().

A questão é como mudar a função OrderTicket() que fecha todos os pedidos

para anexar variáveis max_ticket e min_ticket que determinam bilhetes de apenas ordens min e max na grade

Ou VOCÊ tem a SUA solução para este problema

void ClosseAll()
{
  int slip = MarketInfo(_Symbol,MODE_SPREAD)*2;
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      if (OrderClose(max_ticket , OrderLots(), Bid, slip)&&OrderClose(min_ticket , OrderLots(), Bid, slip))
            Print("OK");
      else
            Print("Не удалось закрыть ордер! ",GetLastError());
     }
  }
}

e consertá-lo.

if(OrderTicket() > max_ticket) max_ticket = OrderTicket();
 
makssub #:

Desculpe, estou escrevendo errado novamente. Deixe-me tentar novamente)

Há uma grade de ordens em aberto. Preciso encontrar o preço de abertura (OrderOpenPrice) do pedido mais próximo do preço atual. A fim de continuar a construir a grade, mas minhas ordens são quase caóticas.

Eu entendo como escrever o excesso, mas não consigo expressá-lo corretamente no idioma (sou como um cão, entendo tudo)).

Se você tiver exemplos ou link para exemplos, coloque-os, por favor. MQL4

em um loop:

if (MathAbs(OrderOpenPrice()-Bid)<previous_value)
   {
   previous_value=MathAbs(OrderOpenPrice()-Bid);
   nearest_order=OrderTicket();
   }

antes de inicializar o_valor_anterior=DBL_MAX a_ordem_próxima=0

 
PapaYozh #:

A propósito, como é diferente, além do fato de que é chamado implicitamente quando o objeto é criado?

e, além disso, quando você a chama no construtor ainda não há memória alocada, ela não compila:

class A
{
public:
   int               val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public:
   A                 a;
                     B():a(),a.val(10) {} //
};

mas no corpo do construtor, não há problema:

class A
{
public:
   int               val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public:
   A                 a;
                     B():a() {a.val=10;}
};



sobre construtores de classes base - eles podem ser chamados explicitamente:

class A
{
public:
   int               val;
                     A(const int v): val(v) {}
                     A() {}
};
//+------------------------------------------------------------------ +
class B: public A
{
public:
                     B(): A(100) {}
};
 
MakarFX #:

Conserte isso também.

Sobre o escorregamento que já tenho no início do assessor

MakarFX #:

e consertar isso.

MakarFX #:

consertar isto

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init() 
{
   Spread = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   MinLot = MarketInfo(Symbol(),MODE_MINLOT);
   return (0);
}

Somente as ordens máximas são fechadas de acordo com os resultados do fechamento


 
Taras Slobodyanik #:

no laço:

initialise previous_value=DBL_MAX a nearest_order=0 before the loop

MakarFX #:

e corrigir isto

MakarFX #:

e consertar isso.

Para erros no registro


 
Boa tarde Alguém já ouviu falar da MirachLtd-Real. Alguém tem algum retorno?

 
EVGENII SHELIPOV #:

Sobre o escorregamento que já tenho no início da EA

Este deslize é exatamente para esta função...assim você não tem que passar por COMPRAR ou VENDER

//--- global parameters
int max_ticket = 0;
int min_ticket = INT_MAX;
//+----------------------------------------------------------------------------+
void ClosseAll()
{
  int slipp = MarketInfo(_Symbol,MODE_SPREAD)*2;
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
      if (OrderClose(max_ticket , OrderLots(), Bid, slipp)&&OrderClose(min_ticket , OrderLots(), Bid, slipp))
            Print("OK");
      else
            Print("Не удалось закрыть ордер! ",GetLastError());
     }
  }
}
//+----------------------------------------------------------------------------+
//| Расчет профита максимального ордера в сетке                                |
//+----------------------------------------------------------------------------+
double GetProfitMaxOrder()
{
   double max_ticket_profit = 0 ;
      {
      for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
         {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
            {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                  if(OrderTicket() > max_ticket) 
                     {
                     max_ticket = OrderTicket();
                     max_ticket_profit =  OrderProfit();
                     }
                  }
               }
            }
         }
      }
   return( max_ticket_profit);
}
//+----------------------------------------------------------------------------+
//| Расчет профита минимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
double GetProfitMinOrder()
{
   double min_ticket_profit = 0;
      {
      for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
         {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
            {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                  if(OrderTicket() < min_ticket)
                     {
                     min_ticket = OrderTicket();
                     min_ticket_profit = OrderProfit(); 
                     }
                  }
               }
            }
         }
      }
   return(min_ticket_profit);
 
Como criar melhor um objeto de classe: após a descrição da classe ou localmente, por exemplo, em OnTick()? A segunda opção provavelmente não é muito econômica: carga de CPU e RAM.
 
MakarFX #:

Este deslize é apenas para esta função...assim você não tem que passar por COMPRAR ou VENDER

int slipp = MarketInfo(_Symbol,MODE_SPREAD)*2;

Você não precisa multiplicar por um ponto aqui

possível perda de dados devido à conversão do tipo NEVALASHKA.mq4 376 13

Recebo um aviso no momento da compilação


 
EVGENII SHELIPOV #:

Não há necessidade de multiplicar por um ponto

possível perda de dados devido à conversão do tipo NEVALASHKA.mq4 376 13

Recebo um aviso no momento da compilação


Não multiplique MODE_SPREAD - Espalhe em pips

você pode verificar

   Print(MarketInfo(_Symbol,MODE_SPREAD)," / ",MarketInfo(_Symbol,MODE_SPREAD)*Point);

e fazer assim

int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
Razão: