Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1402

 

Ciao a tutti,

Sto cercando di fare un EA molto semplice che confronta due prezzi di chiusura e in base a questo apre un ordine di acquisto o di vendita.

Tutto va bene per il primo ordine, ma non appena la condizione passa da vendere a comprare, piazza più ordini contemporaneamente.

m_trade è un oggetto Ctrade.

// Current position information

bool Buy_openend = false;
bool Sell_openend = false;

double currentVolume = 0;

if(PositionSelect(_Symbol) == true)
  {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      Buy_openend = true;
     }
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      Sell_openend = true;
      }   
        currentVolume = PositionGetDouble(POSITION_VOLUME);   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[1].time == startTime;
bool BuyCondition = close >= closeprev && bar[1].time == startTime;


// Entering trade

if(SellCondition)
  {
   if(Sell_openend)
   {
   Print("We already have a sell open");
   return;
   }
   m_trade.Sell(TradeVolume+currentVolume,_Symbol,m_symbol.Ask(),NULL,NULL,NULL);
  }
if(BuyCondition)
  {
   if(Buy_openend)
     {
      Print("We already have a buy open");
   return;
     }
     m_trade.Buy(TradeVolume+currentVolume,_Symbol,m_symbol.Bid(),NULL,NULL,NULL);
  }
 
Divania111 oggetto Ctrade.

Hai dimenticato che il tempo 'startTime' deve essere resettato.

 
Vladimir Karputov #:

Hai dimenticato che il tempo 'startTime' deve essere resettato.

Grazie Vladimir, cercherò di risolvere il problema in base al tuo suggerimento.

Tuttavia, sono ancora sorpreso. Perché nell'istruzione if per l'inserimento di un trade, controlliamo se c'è un ordine esistente dello stesso tipo. Se questo è vero, allora l'ordine non dovrebbe essere piazzato. Così ho pensato che con questa dichiarazione solo 1 tipo di ordine può essere inserito allo stesso tempo.

Questo pensiero non è corretto?

 
Divania111 # :

Grazie Vladimir, cercherò di risolvere il problema in base al tuo suggerimento.

Tuttavia, sono ancora sorpreso. Perché nell'istruzione if per l'inserimento di un trade, controlliamo se c'è un ordine esistente dello stesso tipo. Se questo è vero, allora l'ordine non dovrebbe essere piazzato. Così ho pensato che con questa dichiarazione solo 1 tipo di ordine può essere inserito allo stesso tempo.

Questo pensiero non è corretto?

Tu non controlli gli ORDINI in nessun modo, tu controlli il numero e il tipo della POSIZIONE nel codice. Inoltre - lavorate erroneamente con le POSIZIONI (errore di usare 'PositionSelect(_Symbol)' se il vostro tipo di conto è di copertura). Il tuo algoritmo ha gravi errori di progettazione.

Cosa dovreste fare:

1. Lavorare ESCLUSIVAMENTE al momento della nascita di una nuova barra. Se non c'è una nuova barra - non fare nulla, non fare movimenti inutili.

2. Questo punto sarà divulgato dopo aver completato il punto 1.

 
Salve. Potete dirmi se il commento in void OnTick() sta rallentando l'EA. Metterlo in int OnInit() funziona molto più velocemente.
 
Marco Nicholas il commento in void OnTick() sta rallentando l'EA. Metterlo in int OnInit() funziona molto più velocemente.

Sì, in MT5 rallenta notevolmente l'operazione.

In OnInit funziona solo una volta durante l'inizializzazione e non più.

 
Marco Nicholas commento in void OnTick() sta rallentando l'EA. Metterlo in int OnInit() funziona molto più velocemente.

State parlando della funzione Comment()?

Se sì, allora è ovvio. In OnInit(), il commento si aggiornerà solo una volta, mentre in OnTick() il commento potrebbe finire per essere aggiornato ad ogni tick.

La soluzione è di aggiornare il commento solo quando necessario. Se è statico, allora aggiornalo solo su OnInit() e cancellalo in OnDeinit(), ma se è dinamico, allora in OnTick() aggiorna il commento solo quando deve essere cambiato.

EDIT: Questo post è stato originariamente fatto sul forum inglese.

 
Ciao professori, quando uso la funzione SocketConnect() lato client , non riesco a stabilire una connessione con il server anche dopo aver compilato correttamente i parametri secondo le istruzioni dell'utente, ma il server è normalmente disponibile dopo il test.
 

Buona giornata a tutti.

Ho una domanda

come fare una query a sqlite per selezionare una riga da un biglietto.

La struttura del database è la seguente:

simbolo-testo

biglietto - testo

pirce- reale

s_l - reale

t_p - reale

bisogno di portare l'intera stringa del biglietto nella struttura

 
Ciao, puoi usare Comment() in switch() invece della stessa Print.