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

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

Per quanto posso vedere, la differenza è questa:

Si può percorrere la storia dall'inizio o dalla fine. Non c'è differenza. Comunque, la funzione cerca l'ordine con l'ultimo orario di chiusura. E se vuoi cancellare o chiudere gli ordini, dobbiamo cercare dalla fine della lista. Altrimenti, il ciclo salterà gli ordini.

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

per quanto posso vedere, la differenza è la seguente:

In questo caso non c'è differenza. Il ciclo da OrersTotal a 0 è obbligatorio solo nel caso di chiusura di posizioni o rimozione di ordini. In altri casi è a vostro piacimento.

 
Mihail Matkovskij #:

Si può percorrere la storia dall'inizio o dalla fine. Non c'è differenza. Comunque, la funzione cerca l'ordine con l'ultimo orario di chiusura. E se vuoi cancellare o chiudere gli ordini, allora devi cercare dalla fine della lista. Altrimenti, il ciclo salterà gli ordini.

Se la funzione cerca l'ordine con l'ultimo tempo di chiusura, allora la ricerca sarà ovviamente più veloce dalla fine - dal tempo corrente al passato, piuttosto che dall'inizio della storia.

 
Artyom Trishkin #:

Se la funzione sta cercando un ordine con l'ultimo orario di chiusura, la ricerca sarà ovviamente più veloce, non dall'inizio della storia, ma dalla fine - dall'ora corrente all'ora passata.

Nella direzione opposta, la funzione troverà più velocemente l'ordine con l'ultimo tempo di chiusura, non lo cambierà fino alla fine del ciclo e restituirà il risultato. Nella direzione in avanti, cercherà attraverso tutti gli ordini e restituirà uno degli ultimi ordini. La differenza è che le variabili saranno sovrascritte ad ogni passaggio del ciclo. Sì, c'è una differenza. Ma penso che non sia molto significativo. Anche se preferirei il ciclo in senso inverso a quello in avanti. Nonostante il fatto che la funzione funzionerà in un modo o nell'altro.

 
Ciao a tutti, c'è un modo per passare tra le finestre dei grafici programmaticamente, cioè rendere attivo qualsiasi grafico dall'interno del programma?
 
Maksim Mihajlov #:
Ciao a tutti, c'è un modo per passare tra le finestre dei grafici programmaticamente, cioè rendere attivo qualsiasi grafico da un programma?

Controlla

PORTA IL GRAFICO IN ALTO

Visualizza il grafico in cima a tutti gli altri grafici

bool

 
Alexey Viktorov #:

Controlla

PORTA IL GRAFICO IN ALTO

Visualizza il grafico in cima a tutti gli altri grafici

bool

Grazie!

 
Mihail Matkovskij #:

Si può percorrere la storia dall'inizio o dalla fine. Non c'è differenza. Comunque, la funzione cerca l'ordine con l'ultimo orario di chiusura. E se vuoi cancellare o chiudere gli ordini, allora devi cercare dalla fine della lista. Altrimenti, il ciclo salterà gli ordini.

Comunque, ho fatto due EAs completamente identici, tranne che per il conteggio dei lotti d'ordine!!! ed ecco il risultato:

NON FUNZIONA (cioè non apre BAY invece di SELL)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
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;
  }

LAVORO ( (cioè apre BAY invece di SELL)


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

Comunque, ho fatto due EAs completamente identici, tranne che per il conteggio dei lotti d'ordine!!! ed ecco il risultato:

NON FUNZIONA (cioè non apre BAY invece di SELL)

LAVORANDO (cioè apre BAY invece di SELL)


Ancora una volta sottolineo la differenza

1 variante

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 variante

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

Comunque, ho fatto due EAs completamente identici, tranne che per il conteggio dei lotti d'ordine!!! ed ecco il risultato:

NON FUNZIONA (cioè non apre BAY invece di SELL)

LAVORO ( (cioè apre BAY invece di SELL)


Cercate di capire cosa state codificando, piuttosto che copiare ciecamenteOrdersTotal,OrdersHistoryTotal,

OrderSelect

pool=MODO_TRADES

[Fonte dei dati da selezionare. Usato quando il parametro di selezione è SELECT_BY_POS. Può essere uno dei seguenti valori:

MODE_TRADES (default) - l'ordine viene selezionato tra gli ordini aperti e in sospeso,
MODE_HISTORY - l'ordine viene selezionato tra gli ordini chiusi e cancellati.

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4