Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1776

 
MakarFX #:

Avete la condizione di aprirne due in una volta se non ce ne sono di aperte.

Che cos'è?

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;
  }    

Questa cosa conta il lotto attuale.

Questo parametro è impostato nelle impostazioni: LotControl

rispettivamente, quando: GetLotSize()>LotControl - ho bisogno di aprire vOrderOpenSell() sul segnale bSignalBuy().

Sì, so che entrambi gli ordini sono aperti dalla condizione. L'ho scritto in questo modo all'inizio, ma come faccio a non far aprire vOrderOpenBuy()?

 
Mihail Matkovskij #:

Se il robot è già entrato nel mercato in una direzione, non entra di nuovo nella stessa direzione. È così che funziona il vostro algoritmo di ingresso?

Se questa condizione èsoddisfatta, si innesca

Dopo

E anche quando c'è un segnale di vendita.

Poi, il motivo per entrare nella direzione opposta è perché la condizione è innescata

Sì, è quello di cui ho bisogno. MA ha bisogno di fermare/escludere un'entrata in avanti da questa condizione:

GetLotSize()>LotControl
 
Kedrov #:

Grazie, Makar, per avermi preso in giro!

Ecco uno screenshot.

Sì, hai fatto un casino)

Ora in ogni cartella, una per una, rinominate le cartelle Esperti in _Esperti e Indicatori in _Indicatori.

Rinominate in una cartella - avviate il terminale, se non è servito - rinominatelo di nuovo e passate alla cartella successiva.

P.S. La prima volta il terminale impiegherà un po' più tempo del solito per avviarsi.

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

questa cosa conta la dimensione attuale del lotto

questo parametro è impostato in impostazioni: LotControl

rispettivamente, quando: GetLotSize()>LotControl - ho bisogno che vOrderOpenSell() avvenga al segnale bSignalBuy().

Sì, so che entrambi gli ordini sono aperti dalla condizione. L'ho scritto in questo modo all'inizio, ma come faccio a non far aprire vOrderOpenBuy()?

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

Sì, è quello di cui ho bisogno. MA ha bisogno di fermare/escludere l'ingresso in avanti da questa condizione:

Sono confuso da questa condizione

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

con questa condizione

GetLotSize()=0
 
MakarFX #:

Grazie, corretto, ci penserò.

 
MakarFX #:

Sono confuso da questa condizione

Con questa condizione.

sembra che tu abbia ragione.

Giusto:

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

non reagisce affatto alla condizione (GetLotSize()>LotControl)

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

sembra che tu abbia ragione.

Giusto:

non reagisce affatto alla condizione (GetLotSize()>LotControl)

GetLotSize() deve essere preso dall'ultimo chiuso, quindi a

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

(GetLotSize()>LotControl) funzionerà
 
MakarFX #:

GetLotSize() dovrebbe essere preso dall'ultimo chiuso, quindi a

(GetLotSize()>LotControl) funzionerà

grazie mille!

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

Sì, è quello di cui ho bisogno. MA nel fare ciò, è necessario fermare/escludere l'ingresso in avanti da questa condizione:

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;
  }