Il grande e terribile MT4 per sempre (o come strategizzare una transizione) - pagina 25

 
Igor Makanu:

nel PM ha abbandonato il server

Questo server (o meglio il software del broker) ha una protezione contro lo spam. Hanno intenzione di aggiornarlo entro la prossima settimana e poi il rallentamento andrà via.

 
fxsaber:

Dovrò dare un'occhiata a questo server. Sarebbe bene controllare la stampella suggerita qui, per chi sembra importante.

Non vorrei tornare su questo argomento dopo un po' di tempo. Sarebbe meglio segnalare i bug, se ce ne sono.

Non c'è ancora un'opzione in stile MT4?

Basta eseguire lo script aprendo 100 posizioni su diversi server?

 
Andrey Khatimlianskii:

Nessuna opzione in stile MT4?

Non è ancora iniziato. Molto probabilmente, l'utente non cambierà nulla nel codice. La funzionalità aggiuntiva sarà attivata attraverso una macro.

Basta eseguire lo script aprendo 100 posizioni su diversi server?

Sì, su server diversi, ma solo uno script diverso. Se non si verifica alcun raddoppio durante un minuto di esecuzione, il controllo è stato superato con successo. Altrimenti - fallimento.

Библиотеки: TradesID
Библиотеки: TradesID
  • 2021.03.29
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: TradesID
 
fxsaber:

Non è ancora iniziato. Molto probabilmente, l'utente non cambierà nulla nel codice. La funzionalità extra sarà attivata tramite una macro.

Capito.

Библиотеки: MT4Orders
Библиотеки: MT4Orders
  • 2021.02.09
  • www.mql5.com
MT4Orders: Автор: fxsaber...
 

Lo era.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Il grande e terribile MT4 per sempre (o come costruire una strategia di migrazione intelligente)

fxsaber, 2021.05.11 09:05

Senza aspettare una posizione - risultati immediatamente.

#include <fxsaber\TradesID\ByPass.mqh>
#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  BYPASS ByPass;
  
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    if (ByPass.Is())
      ByPass += OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}

L'ha fatto.

#define  MT4ORDERS_BYPASS_MAXTIME 1000000 // Максимальное время (в мкс.) на ожидание синхронизации торгового окружения
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  MT4ORDERS::OrderSend_MaxPause = 0; // Запрет на ожидание позиции после OrderSend
  
  while (OrdersTotal() < 30)
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0);      
    
  Print(OrdersTotal());
}


Ora non è diverso dalla variante MT4, compresa l'affidabilità.

Tutti gli esempi che sono così difficili da scrivere in MT5 sono diventati facilmente implementabili, come dovrebbero essere.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Il grande e terribile MT4 per sempre (o come costruire la tua strategia di migrazione)

Igor Makanu, 2021.05.10 10:28

sembra funzionare:

#include <Trade\Trade.mqh>
void OnStart()
{
   CTrade Trade;
   while(PositionsTotal() < 10)
   {
      if(OrdersTotal() > 0) continue;
      if(!Trade.Buy(0.01)) continue;
      if(OrdersTotal() == 0 && PositionsTotal() >= 10) return;
   }
}

ma molto lento, e la soluzione è così così.

Cosa succederà se dopo l'ordine di apertura della 10a posizione, all'iterazione successiva, se il

while(PositionsTotal() < 10)

PositionTotal non ha avuto il tempo di aggiornarsi (=9), e l'ordine è già riuscito ad andare in history e OrdersTotal()==0.

In questo caso, ci sarà un altro Trade.Buy()?

Teoricamente, può accadere più volte di seguito?

O mi sono perso qualcosa?

 
mktr8591:

Cosa succede se, dopo che l'ordine di aprire la decima posizione è stato piazzato, alla prossima iterazione del

PositionTotal non ha avuto il tempo di aggiornarsi (=9), e l'ordine è già riuscito ad andare in history e OrdersTotal()==0.

In questo caso, ci sarà un altro Trade.Buy()?

Teoricamente, può accadere più volte di seguito?

O mi manca qualcosa?

è il suo interesse ad alta frequenza, il resto ha abbastanza timeout e nessun problema con un secondo tentativo

Sono sicuro che è così che è costruito in MT4, aspetta e vedrai
 
mktr8591:

Cosa succede se, dopo che l'ordine di aprire la decima posizione è stato piazzato, alla prossima iterazione del

PositionTotal non ha avuto il tempo di aggiornarsi (=9), e l'ordine è già riuscito ad andare in history e OrdersTotal()==0.

In questo caso, ci sarà un altro Trade.Buy()?

Certo, sarà così. Il ragionamento nel codice è esattamente lo stesso.

Teoricamente, può ripetere diverse iterazioni successive?

Se Buy è vero, allora c'è quasi zero probabilità che la prossima iterazione abbia OrdersTotal() == 0. Cioè, aprire 12 posizioni è impossibile in pratica.


Questo è un caso molto primitivo. Una voce doppia spesso assomiglia a questa:

  1. Limit OrdersTotal = 1, PositionsTotal = 0.
  2. I limitatori vengono eseguiti. OrdiniTotale = 0, PosizioniTotale = 0.
  3. Le posizioni sono aperte. OrdiniTotale = 0, PosizioniTotale = 1.

Al secondo passo, l'Expert Advisor vede che non c'è niente e imposta un Limite. Di conseguenza, abbiamo due posizioni aperte.

Il secondo punto è l'overshoot di MT5. E ora la stampella lo scavalca.

 

Grazie.

A proposito di questo:

fxsaber:

Il raddoppio non è una difficoltà di MT5, ma un bug architettonico, quando le funzioni Total()- mostrano falsi positivi.

Puoi dire che è un bug, o puoi presentarlo in modo diverso :-)

PositionsTotal() non è il numero di posizioni aperte, ma la dimensione della tabella delle posizioni aperte. La tabella delle posizioni - è in effetti una cache, come la cache della storia degli affari, solo che viene aggiornata non su richiesta, ma automaticamente, ma non istantaneamente, e con un leggero ritardo. Per questo motivo, potrebbe non contenere posizioni già aperte, o contenere posizioni già chiuse.

La stessa cosa con OrdersTotal().

Se spieghiamo l'aiuto in questo modo, ci saranno meno domande, lamentele e malintesi.

E nell'articolo "Ordini, posizioni e compravendite in MetaTrader 5", potete prestare attenzione a questo (ora è ambiguo - "Il risultato della funzione PositionsTotal() non dipende dal fatto che la cache delle posizioni sia piena - restituisce sempre il numero effettivo di posizioni aperte nel terminale base per tutti i simboli").


P.S. Ma allora sorge una domanda legittima - perché non fare una funzione/flag di sistema per determinare lo stato di sincronizzazione delle tabelle degli ordini live, delle posizioni, dei trade e degli ordini eseguiti, per non creare stampelle?
 
mktr8591:

P.S. Ma allora sorge una domanda legittima - perché non fare un sistema fi/flag per determinare lo stato di sincronizzazione delle tabelle degli ordini live, delle posizioni, dei trade e degli ordini eseguiti, per non creare stampelle?

Molto probabilmente non c'è questa bandiera all'interno.

Motivazione: