Errori, bug, domande - pagina 2470

 
Igor Zakharov:

Quindi non è in secondi...

Questo è ciò che la descrizione della lingua dovrebbe essere in primo luogo.

Non in articoli che devi cercare. L'ultima cosa che dovresti cercare sul forum è questa.

Altrimenti, si scopre: guardo in un libro, ma vedo una figura...

 

Perché questo dovrebbe essere il caso?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Ho scoperto oggi che il volume minimo nella specifica dello strumento è 100 e anche il passo è 100. Tuttavia, non apre le posizioni con l'errore"Invalid volume". Se imposto 0,01, i pulsanti sono inattivi.

Cambiato la versione in una versione più "giovane".

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

nessun cambiamento.

Poi l'ho sostituito con la versione di rilascio.

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Ed ecco il risultato.



Perché succede solo ad una società? Se fosse diffuso, il problema sarebbe stato risolto da tempo.

Che direzione devo inviare al supporto dell'azienda?


Aggiunto: è molto strano che la build 2025 funzioni bene su un account cent della stessa azienda. Tutti i parametri degli utensili sono come dovrebbero essere.

Puoi fare trading su cent. L'ho capito da solo... ...ma voglio di più.

 
Ilyas:

Grazie per il suo messaggio.
È un rudimento, lo sistemeremo.

@Ilyas, c'è un problema simile con la struttura NonPOD.

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
Qualcuno sa come, a parte aspettare una nuova build con il supporto dei namespace per le classi, aggirare questa limitazione:
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

Problema nell'area di dichiarazione dello spazio dei nomi globale nella funzionalitàtypedef

 
MT5 (build 2057)

Errore di compilazione sull'uso ripetuto della stessa firma di funzione all'interno di typedef:
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5 (build 2057)

Bug con "divieto" di riutilizzare la stessa firma all'interno di typedef:

E houno script essenzialmente simile di oltre 2 anni fa che dà un risultato di 2056x32: EX5 loading failed

 
Sergey Dzyublik:
Qualcuno sa come, a parte aspettare una nuova build con il supporto dei namespace per le classi, aggirare questa restrizione:

Compilare

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

è possibile (e funzionerà anche), ma non più di questo: poi, diciamo, non si può scrivere

   int_value.eq = f;
}

quindi non scrivere come

 
A100:

Compilare quindi non scrivere come

No, è ancora difficile, ma funziona...
Il tipo bool si è perso nel typedef dell'esempio.

#define PRINT(x) ; Print(#x, ":", string(x))

#define  CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type  eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
Fino a quando le correzioni dei typedef e gli aggiornamenti dei namespace, se ce ne sono, saranno rilasciati,
dovremo dichiarare l'uso di ogni tipo separatamente tramite macro, e poi usare le macro per ottenere il nome delle classi generate per creare un oggetto classe...
 

Spiega perché quando creoCChartObjectLabel non sto cancellando gli oggetti nell'indicatore quando deinizializzo in questo codice:

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

quando cambio TF ottengo la voce del diario: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 oggetti di tipo CChartObjectLabel rimasti

se si decommenta in OnInit() la creazione di etichette di testo (CChartObjectLabel), allora tutto funzionerà correttamente

Passo un puntatore alla funzioneCreateLabel(), manon possocancellarlo dopo inOnDeinit()