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

 
MakarFX #:

Você tem a condição de abrir dois ao mesmo tempo se não houver nenhum aberto.

O que é isso?

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

Esta coisa conta o lote atual.

Este parâmetro é definido nas configurações: LotControl

respectivamente, quando: GetLotSize()>LotControl - Eu preciso dele para abrir vOrderOpenSell() no sinal bSignalBuy().

Sim, eu sei que ambas as ordens são abertas pela condição. Escrevi assim no início, mas como devo fazer para que o vOrderOpenBuy() não seja aberto?

 
Mihail Matkovskij #:

Se o robô já entrou no mercado em uma direção, ele não entra novamente na mesma direção. É assim que seu algoritmo de entrada funciona?

Se esta condição forcumprida, ela aciona

Depois de

E também quando há um sinal de venda.

Então, a razão para entrar na direção oposta é porque a condição é acionada

Sim. É disso que eu preciso. MAS é preciso parar/excluir uma entrada antecipada por esta condição:

GetLotSize()>LotControl
 
Kedrov #:

Obrigado, Makar, por se meter comigo!

Aqui está uma captura de tela.

Sim, você fez uma bagunça)

Agora, em cada pasta, um a um, renomeie Experts para _Experts e Indicators para _Indicators.

Renomeado em uma pasta - iniciar terminal, se não ajudou - renomeá-lo de volta e ir para a pasta seguinte.

P.S. A primeira vez que o terminal demorará um pouco mais do que o normal para começar.

 
законопослушный гражданин #:

esta coisa conta o tamanho atual do lote

este parâmetro é definido em configurações: LotControl

respectivamente, quando: GetLotSize()>LotControl - Preciso que a vOrderOpenSell() aconteça no sinal bSignalBuy().

Sim, eu sei que ambas as ordens são abertas pela condição. Escrevi assim no início, mas como devo fazer para que o vOrderOpenBuy() não seja aberto?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

Sim. É o que eu preciso. MAS é preciso parar/excluir a entrada antecipada por esta condição:

Estou confuso com esta condição

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

com esta condição

GetLotSize()=0
 
MakarFX #:

Obrigado. Corrigido. Vou pensar sobre isso.

 
MakarFX #:

Estou confuso com esta condição

Com essa condição.

parece que você está certo.

Certo:

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

não reage de forma alguma à condição (GetLotSize()>LotControl)

 
законопослушный гражданин #:

parece que você está certo.

Certo:

não reage de forma alguma à condição (GetLotSize()>LotControl)

GetLotSize() deve ser tirado do último fechado, então em

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl) vai funcionar
 
MakarFX #:

GetLotSize() deve ser tirado do último fechado, então em

(GetLotSize()>LotControl) vai funcionar

muito obrigado!

 
законопослушный гражданин #:

Sim. É o que eu preciso. MAS, ao fazer isso, você precisa parar/excluir a entrada antecipada por esta condição:

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   for (int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }