Errori, bug, domande - pagina 934

 
uncleVic:
Le cose stanno così.

Grazie mille per tutto il vostro aiuto! Tutto è semplice e bello)

Inizialmente ho provato con Event map ma non l'ho capito fino in fondo, così ho deciso di sovraccaricare OnEvent() da solo...

P.S. Sarebbe bello se in qualsiasi codice che viene fornito con il terminale, o nella sua documentazione ci fossero alcuni esempi di utilizzo della mappa degli eventi (da ON_EVENT a ON_EXTERNAL_EVENT) - sarebbe molto più facile da capire. Ci sono solo esempi ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 e Indicators/Examples/Panels/PanelDialog.mq5 - almeno non ho trovato altri esempi. E una ricerca sul sito web, a parte alcune parole dell'articolo, non ha prodotto nulla.

 
Rone:

Grazie mille per tutto il vostro aiuto! Tutto è semplice e bello)

Originariamente e provato Event map, ma non l'ho capito completamente, quindi ho deciso di sovraccaricare OnEvent() io stesso...

P.S. Sarebbe bello se in qualsiasi codice che viene fornito con il terminale, o nella sua documentazione ci fossero alcuni esempi di utilizzo della mappa degli eventi (da ON_EVENT a ON_EXTERNAL_EVENT) - sarebbe molto più facile da capire. Ci sono solo esempi ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 e Indicators/Examples/Panels/PanelDialog.mq5 - almeno non ho trovato altri esempi. E una ricerca sul sito web, a parte alcune parole dell'articolo, non ha prodotto nulla.


1. Per favore. Non esitate a contattarmi.

2. Da aggiungere.

 
CTrade::OrderSend: buy stop 0.94 USDCHF a 0.93366 sl: 0.93016 tp: 0.94816 [volume non valido]

Perché ho ricevuto un errore di volume di 0,94 lotti su USDCHF ?

Questo è un volume non valido o non avevo abbastanza soldi per piazzare questo volume?

 
Konstantin83:
CTrade::OrderSend: buy stop 0.94 USDCHF a 0.93366 sl: 0.93016 tp: 0.94816 [volume non valido]

Perché ho ricevuto un errore di volume di 0,94 lotti su USDCHF?

Questo è un volume non valido o non avevo abbastanza soldi per piazzare questo volume?

Qual è il passo del volume nelle impostazioni dello strumento? 0,10 o 0,01 di lotto? Se è 0,10, allora tutto è corretto - volume non valido
 
Renat:
Qual è il passo del volume nelle impostazioni dello strumento? 0,10 o 0,01 lotto? Se 0,10, hai ragione - volume sbagliato

server demo da metaquotes, avete 0,01 passo.

il lotto è controllato



CSymbolInfo       Exp_Symbol_Info;              // symbol info object

...
double CBaseTrade::GetCorrectLot(double pLot)
 {
      double   dLot   = pLot;
      double   dLotMin   = Exp_Symbol_Info.LotsMin();
      double   dLotMax   = Exp_Symbol_Info.LotsMax();
      double   dLotStep  = Exp_Symbol_Info.LotsStep();
    
      dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
      if(dLot < dLotMin) dLot=dLotMin;
 
      if(dLot > dLotMax && dLotMax !=0) dLot=dLotMax;

 
  return(dLot);
 }

 

Stampare il valore del volume a 4-8 cifre, per favore.

Un chiaro errore di non arrotondamento alla seconda cifra qui:

dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
Renat:

Stampare il valore del volume a 4-8 cifre, per favore.

Un chiaro errore di non arrotondamento alla seconda cifra qui:

Sì, ma perché non c'è l'arrotondamento?

Diciamo che il passo del lotto è 0,01

Lotto di ingresso 2.111

risultato = 0.01 * NormalizeDouble(2.111/0.01)=0.01*NormalizeDouble(211.1)=0.01*211=2.11

Oppure ci sono broker dove l'incremento del lotto è 0,25, non si può semplicemente arrotondare il risultato al 2° segno.

Supponiamo che il passo del lotto sia 0,25

Lotto in arrivo 2.3

Risultato = 0.25 * NormalizeDouble(2.3/0.25)=0.25*NormalizeDouble(9.2)=0.25*9=2.25


Nessun problema nel tester. Ho ricevuto questo errore un paio di volte oggi nella demo.

Il passo di volume della classe CSymbolInfo è normalizzato?

 

Per favore, consigliatemi!

Come cambiare il colore di sfondo delle coppie di valute nella panoramica del mercato

O rimuovere del tutto il colore!

Grazie in anticipo!

 
Konstantin83: risultato = 0.01 * NormalizeDouble(2.111/0.01)=0.01*NormalizeDouble(211.1)=0.01*211=2.11
Il prodotto di due numeri doppi è un numero non normalizzato. 0.01*NormalizeDouble(211.1)=0.01*211.***********=2.11*************
 
Konstantin83:

Sì, ma perché non è arrotondato?

Perché il risultato delle operazioni mat dei valori normalizzati più alti non è un numero normalizzato.

Per questo è un luogo di errore.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5