Errori, bug, domande - pagina 2218

 
fellow:

cosa sono quei numeri tra virgolette?

probabilmente il valore del campo

 
Georgiy Merts:

Esattamente.

Secondo me, tutte le parti strutturali dei programmi dovrebbero essere fatte in blocchi indipendenti dalla piattaforma (le interfacce virtuali, secondo me, sono molto adatte per questo), in modo che i cambiamenti nelle piattaforme influenzino piccole aree isolate di codice. In più c'è il bonus di poter inserire nuove piattaforme.

Per quanto riguarda le nuove i-Funzioni, ne guardo solo una: la ricerca di un bar per un'ora specifica. Forse questa funzione funzionerà più velocemente della mia. Il resto - sono sicuro - non darà un aumento di velocità rispetto al mio, il che significa che non si cerca il buono dal cattivo.

Ho scritto la mia libreria sulle barre molto tempo fa e difficilmente userò le innovazioni

 
Alexey Volchanskiy:

Ho scritto la mia libreria sulle barre molto tempo fa e difficilmente userò innovazioni

La ricerca nativa di bar per tempo può essere davvero più veloce.

Ora si limita a calcolare l'indice della barra richiesta in base al tempo della prima barra, dell'ultima barra e del tempo richiesto, con successiva correzione.

Anch'io usavo la ricerca binaria, ma il calcolo diretto con la correzione si è rivelato più veloce.

E gli sviluppatori potrebbero avere un indice che trova la barra giusta molto più velocemente di entrambe queste opzioni.

 
fellow:

cosa sono quei numeri tra virgolette?

una stringa è un array uchar

Tra virgolette c'è un carattere e a sinistra delle virgolette c'è un codice di carattere.


più precisamente :

void OnStart()
  {
   string s;
   uchar u[1];
   for(int i=32; i<=255; i++)
     {
      u[0]=(uchar)i;
      if(i%16==0) s="";
      s+=IntegerToString(u[0],3)+"-"+CharArrayToString(u)+"  ";
      if (i==152) s+=" ";
      if(i%16==15)  Print(s);
     }
  }
 

che ha aggiornato alla 1860, conferma il problema indicato in precedenza da diversi utenti durante i test?

perché questa è la seconda volta che il broker Otkritie ha inviato questo aggiornamento ))

 
Vitaly Muzichenko:

Se usate un software libero, allora tenetelo aggiornato, e se ci sono annunci pubblicitari in futuro, va bene anche quello (software libero). Nessuno ti deve niente.

Il software non è gratuito - costa al broker un sacco di soldi. Io, come trader, pago al broker una commissione, dalla quale vengono pagati gli sviluppatori. Sono un commerciante e voglio essere trattato in modo appropriato.

Non mi importa delle funzioni (al diavolo loro - le ho riscritte), ma il tester ha iniziato ad avere dei glitch e ad andare in crash ogni 2-3 esecuzioni, avresti potuto caricare una versione stabile

 
Come minimo, prendete il fatto che in 10 anni non hanno mai insegnato al software come calcolare correttamente i drawdown. Ho dovuto scrivere tutto da solo
 
// Воспроизведение ситуации, когда OrderSend успешно выполнилась, но ордера нет ни среди живых, ни среди мертвых.

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
/*
  // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() &&
         (OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0) != -1) &&
         OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ;
*/

  MqlTradeResult Result;
  MqlTradeRequest Request = {0};

  Request.action = TRADE_ACTION_DEAL;
  Request.symbol = _Symbol;
  
  do
  {
    Request.position = PositionSelect(Request.symbol) ? PositionGetInteger(POSITION_TICKET) : 0;  
    Request.type = Request.position ? (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)) : ORDER_TYPE_SELL;
    Request.price = Request.position ? PositionGetDouble(POSITION_PRICE_CURRENT) : Bid;
    Request.volume = Request.position ? PositionGetDouble(POSITION_VOLUME) : 1;
          
  } // Посылаем поочередно ордера на открытие/закрытие позиций
  while (!IsStopped() && (OrderSend(Request, Result) ? OrderSelect(Result.order) || HistoryOrderSelect(Result.order) : true));
  
  PRINT(Result.order);
  PRINT(OrderSelect(Result.order));
  PRINT(HistoryOrderSelect(Result.order));
}


Risultato suForexTimeFXTM-Demo01

Result.order = 2210942086
OrderSelect(Result.order) = false
HistoryOrderSelect(Result.order) = false


Lo script apre e chiude le posizioni finché non rileva un "ordine fantasma" - né tra quelli attuali né nella storia. Devo considerarlo un bug o una caratteristica della piattaforma?


Lo script è scritto in modo tale che diverse posizioni possono aprirsi a causa di questa sfumatura. Ma non impedisce di ricevere un "ordine fantasma".

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.02.08
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Era lo stesso a BCS forex un anno fa, dopo che il dtz ha cambiato qualcosa nel loro consulente
 

Salve. Oggi ho aggiornato alla versione 1860 e durante l'ottimizzazione dell'Expert Advisor ho riscontrato questo problema:

Ritardo nell'ottimizzazione

Il ritardo tra i passaggi è di 1 minuto! Potete per favore consigliarmi quale può essere il problema?

p.s. Prima dell'aggiornamento tutto funzionava alla perfezione.