Errori, bug, domande - pagina 1954

 
Andrey Barinov:
Riportare i cartelli.
Grazie per l'idea. Avevo dimenticato tutto di loro.
 
Alexey Kozitsyn:
Grazie per l'idea. Mi ero completamente dimenticato di loro.

Questo è strano. Ricevoun errore di compilazione dal tuo codice.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sulla descrizione della funzione GetBMember (che in parole povere dice di creare una copia). È l'ultima versione del compilatore?

Quando questo problema viene risolto aggiungendo un costruttore di copia B, si può poi restituire const B dal metodo GetBMember.

Allora il compilatore imprecherà al tentativo di fare un Reset della variabile restituita:

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

Questo è strano. Ricevo un errore di compilazione dal tuo codice.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

Sulla descrizione della funzione GetBMember. È l'ultima versione del compilatore?

Quando questo problema viene risolto aggiungendo un costruttore di copia B, si può poi restituire const B dal metodo GetBMember.

Allora il compilatore imprecherà quando si cercherà di fare un Reset della variabile restituita:

'Reset' - call non-const method for constant object

Questo codice è solo un esempio scritto nel browser. Mi stavo solo chiedendo perché il compilatore non riporta nulla. Ma l'ho già capito.

E non ci sono affatto costruttori nel mio esempio:)

 

Ciao! 2017.08.03_18:45 GMT+3. Ho scritto un file OOP SignalIchimoku.mqh . Ma quando ho bisogno di fare semplici calcoli a LongCondition() e ShortCondition() in una funzione separata, la funzione viene scritta, il compilatore dà 0 errori, 0 avvertimenti. Ma questa funzione non funziona, non viene eseguito alcun calcolo. Il programma non apre le transazioni. Ho controllato: ho inserito il valore della variabile Print() nella funzione. Questa funzione è simile alle funzioni StateStoch(int ind), ExtStateStoch(int ind) e CompareMaps() in SignalStoch.mqh , un file standard della libreria standard. Tutto funziona nel file standard, ma non funziona per me. Perché? Si tratta ancora di "regole semplici"? Chi lo sa... me lo dica. Se avete bisogno di dettagli o avete domande, -- scrivete. 18:59 GMT+3.

File:
 

CCanvas. C'è un piccolo bug nell'implementazione della funzione FillCircle. È un pixel più stretto, come si può vedere in questa animazione GIF:

Inoltre, l'algoritmo è costruito in modo molto irragionevole, poiché circa il 30% dei punti sono disegnati due volte. Questo si risolve facilmente spostando due righe di codice, con un aumento di velocità del 30% in media.
Ecco la versione originale di FillCircle:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

Ed ecco la versione corretta:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

L'ordine in sospeso viene cancellato (non ci sono abbastanza soldi)

Un lavoro valido dell'Expert Advisor è quando non si verificano errori durante il suo funzionamento.

L'ordine pendente viene cancellato (non ci sono abbastanza soldi) è un errore.

La questione è che è teoricamente impossibile rintracciare il margine necessario per aprire un ordine, se questo viene aperto con uno slippage.

Per esempio, abbiamo stabilito e calcolato che c'è abbastanza denaro per aprire un ordine di vendita pendente stop a 1,500. (A 1.499 non ce n'è più).

Il prezzo attuale è 1,501.

Il prossimo tick e abbiamo un prezzo di 1,499.

Un tentativo di aprire un ordine e un errore.

Pertanto, abbiamo inizialmente considerato la situazione in cui questo errore non può essere evitato al 100%.

O mi sono perso qualcosa?

 

Non riesco a capire come estrarre i file mqh da una sottodirectory della cartellaExperts.

come tirare i file mqh dalla cartella One alla cartella Two?

 
Vladimir Pastushak:

Non riesco a capire come estrarre i file mqh da una sottodirectory della cartellaExperts.

come tirare i file mqh dalla cartella One alla cartella Two?


soluzione trovata. Se il file a cui volete collegare l'iniettore si trova in Test\Uno, e l'iniettore in Test\Due, allora...

Funziona così:

#include "..\Two\name.mqh""
Risulta: ..\ - da One vai a Test e Two\name.mqh - da Test vai a Two e seleziona il nome del file.mqh
 
il profilo non mostra "i miei messaggi"

e nei profili di altre persone
 
Vladimir Pastushak:

soluzione trovata. Se un file a cui volete collegare un inluder è in Test\One, e un inluder in Test\Two, allora...

Come questo:

Risulta: ..\ - da One vai a Test e Two\name.mqh - da Test vai a Two e seleziona nome file.mqh

Ci sono questi costrutti:

#include "..\..\Two\name.mqh"