Errori, bug, domande - pagina 2741

 
Ilyas:

Il debugger in MT4 non cambierà.

Stiamo ridisegnando completamente il sistema di debug e profiling del codice MQL. Il nuovo sistema non è compatibile con MT4

Il terminale MT4 BILD 1262 si blocca


2020.05.13 18:05:09.335 Violazione di accesso scrivere a 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 leaked strings left

2020.05.13 18:11:11.126 Violazione di accesso scrivere a 0x033403B7

2020.05.13 18:37:13.585 Violazione di accesso scrivere a 0x03093648


Ho fatto un mini codice sorgente che riproduce il problema

 
Vladimir Pastushak:

MT 4 BILD 1262 Crolli terminali


2020.05.13 18:05:09.335 Violazione di accesso scrivere a 0x0335346E

2020.05.13 18:05:09.276 VR EURUSD,H4: 1 leaked strings left

2020.05.13 18:11:11.126 Violazione di accesso scrivere a 0x033403B7

2020.05.13 18:37:13.585 Violazione di accesso scrivere a 0x03093648


Ho fatto un mini codice sorgente per riprodurre il problema.

Mandami il codice sorgente via messaggio privato e lo controllerò.

 
Ilyas:

Il debugger in MT4 non cambierà.

Stiamo ridisegnando completamente il sistema di debug e profiling del codice MQL, il nuovo sistema non è compatibile con MT4

Fico. Potete dimenticarvi di sviluppare indicatori seri per MT4.

Grazie, lo sapremo.

 
Andrey Khatimlianskii:

Indicatori nel flusso di interfaccia, finché non vengono contati, il terminale non disegna nulla. Ecco perché si blocca.

Quattro non saranno corretti, molto probabilmente.

In cinque indicatori simili funzionano, ma tutto è normale, senza blocchi.

 
MT5 (build 2419) stava lavorando con il debugger, è andato al browser per un paio di minuti, poi è tornato a MT ed era completamente vuoto per qualche motivo:
- niente finestre, niente pannelli, niente strumenti, niente di niente...

 
MT5, come faccio a disabilitare programmaticamente la scalatura dei prezzi tramite Ctrl + Ruota del mouse?
Faccio un pannello, catturo programmaticamente Ctrl + Ruota del mouse e scala gli elementi del pannello.
Tuttavia, lo stesso evento innesca il ridimensionamento dei prezzi e carica la didascalia "Waiting For Update", che sovrascrive completamente il pannello a tempo indeterminato.

Codice di esempio, ciò che è commentato è anche usato nel progetto, ma non influisce sul problema descritto sopra:
void HideChart(long achart, color BackClr){     
   //ChartSetInteger(achart, CHART_SHOW, false);
        //ChartSetInteger(achart, CHART_SHOW_OHLC, false);
        //ChartSetInteger(achart, CHART_SHOW_BID_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_ASK_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_LAST_LINE, false);
        //ChartSetInteger(achart, CHART_SHOW_PERIOD_SEP, false);
        //ChartSetInteger(achart, CHART_SHOW_GRID, false);
        //ChartSetInteger(achart, CHART_SHOW_VOLUMES, CHART_VOLUME_HIDE);
        //ChartSetInteger(achart, CHART_SHOW_OBJECT_DESCR, false);
        //ChartSetInteger(achart, CHART_SHOW_TRADE_LEVELS, false);
        //ChartSetInteger(achart, CHART_SHOW_DATE_SCALE, false);
        //ChartSetInteger(achart, CHART_SHOW_PRICE_SCALE, false);
        //ChartSetInteger(achart, CHART_FOREGROUND, false);
        //ChartSetInteger(achart, CHART_SHIFT, false);
        //ChartSetInteger(achart, CHART_MODE, CHART_LINE);

        //ChartSetInteger(achart, CHART_SCALE, 0);
        ChartSetInteger(achart, CHART_SCALEFIX, 0);
        ChartSetInteger(achart, CHART_SCALEFIX_11 , 0);
        ChartSetInteger(achart, CHART_SCALE_PT_PER_BAR, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_DELETE, 0);
        ChartSetInteger(achart, CHART_EVENT_OBJECT_CREATE, 0);

   	ChartSetInteger(achart, CHART_EVENT_MOUSE_WHEEL,1); 
        ChartSetInteger(achart, CHART_EVENT_MOUSE_MOVE, 0);
        ChartSetInteger(achart, CHART_MOUSE_SCROLL, 0);
        ChartSetInteger(achart, CHART_KEYBOARD_CONTROL, 0);
        ChartSetInteger(achart, CHART_QUICK_NAVIGATION, 0);
        
        //ChartSetInteger(achart, CHART_COLOR_BACKGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_FOREGROUND, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_CHART_LINE, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_ASK, BackClr);
        //ChartSetInteger(achart, CHART_COLOR_BID, BackClr);
        //ChartSetDouble(achart, CHART_FIXED_MAX, 1);
        //ChartSetDouble(achart, CHART_FIXED_MIN, 1);
        //ChartSetString(achart, CHART_COMMENT, "");
        //ChartSetInteger(achart, CHART_CROSSHAIR_TOOL, 0);
        //ChartSetInteger(achart, CHART_SHOW_ONE_CLICK, 0);
        //ChartSetInteger(achart, CHART_CONTEXT_MENU, 0);
        ChartRedraw(achart);
}

void OnInit() {
   HideChart(0, clrWhite);
} 
 

sembra essere un bug? la documentazione dice che è leggibile, ma

Print(i," - ",ObjectGetInteger(0,name,OBJPROP_XDISTANCE)," - ",ObjectGetInteger(0,name,OBJPROP_XSIZE));

dà fuori

c'è del testo sul grafico:

codice completo allegato

File:
 
Igor Zakharov:

sembra essere un bug? la larghezza dell'etichetta nella documentazione dice leggibile, ma

La larghezza è disponibile solo dopo che l'oggetto è stato reso completamente.
Anche io ho avuto a che fare con questo problema di recente.

Forum sul trading, sistemi di trading automatico e test di strategia

bug, errori, domande

Sergey Dzyublik, 2020.05.12 19:32

Quando si usa OBJ_EDIT è sorto un problema - la necessità di impostare le dimensioni di OBJPROP_XSIZE e OBJPROP_YSIZE in modo che tutto il testo rientri nelle dimensioni dell'oggetto corrispondente.

Domanda: come determinare le dimensioni OBJPROP_XSIZE e OBJPROP_YSIZE per adattare l'intero testo?
Ho considerato due opzioni:
1. Creare l'oggetto OBJ_LABLE, leggere le dimensioni, cancellare l'oggetto OBJ_LABLE.
Non adatto perché la quotatura è possibile solo dopo che l'oggetto è stato effettivamente creato e non è possibile quando l'oggetto è nella coda di ChartRedraw.

2. usando TextSetFont seguito da TextGetSize.
Non adatto, perché il risultato è radicalmente diverso dai risultati del metodo #1, la differenza di 2,5 - 2,9 volte, a seconda della dimensione del carattere.
Probabilmente la ragione è il monitor 4K e il 175% di DPI.

#define  PRINT(x) ; Print(#x, ":", string(x))
          
void SetLabel(long achart, string name, int wnd, string text, color clr, int x, int y, int corn=0, int fontsize=8, string font="Tahoma")
{
   ObjectCreate(achart, name, OBJ_LABEL, wnd, 0, 0); 
   ObjectSetInteger(achart, name, OBJPROP_CORNER, corn); 
   ObjectSetString(achart, name, OBJPROP_TEXT, text); ObjectSetInteger(achart, name, OBJPROP_COLOR, clr); 
   ObjectSetInteger(achart, name, OBJPROP_FONTSIZE, fontsize); ObjectSetString(achart, name, OBJPROP_FONT, font);
   ObjectSetInteger(achart, name, OBJPROP_SELECTABLE, false); 
   ObjectSetInteger(achart, name, OBJPROP_BORDER_TYPE, 0);
   ObjectSetInteger(achart, name, OBJPROP_XDISTANCE, x); ObjectSetInteger(achart, name, OBJPROP_YDISTANCE, y);
}

void OnStart(){     
   string obj_name = "test_obj";   
   string text = "AAAA::BBBB";
   int font_size = 7;
   string font_name = "Tahoma";
   
   SetLabel(0, obj_name, 0, text, clrWhite, 100, 100, 0, font_size, font_name);
   ChartRedraw(0);
   Sleep(1000);
   
   uint dx_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_XSIZE));
   uint dy_fixed_0 = int(ObjectGetInteger(0, obj_name, OBJPROP_YSIZE));
   ObjectDelete(0, obj_name);
   
   PRINT(dx_fixed_0);
   PRINT(dy_fixed_0);
   
   
   uint dx_fixed_1;
   uint dy_fixed_1;
   TextSetFont(font_name, -10 *  font_size);
   TextGetSize(text, dx_fixed_1, dy_fixed_1);
   
   PRINT(1.0 * dx_fixed_0 / dx_fixed_1);  	// Result: 1.0
   PRINT(1.0 * dy_fixed_0 / dy_fixed_1);  	// Result: 1.0
}  


Grazie aGeess per la soluzione.
Dovrei moltiplicare per -10 la dimensione di shuffle quando la passo a TextSetFont.

 
Sergey Dzyublik:

La larghezza è disponibile solo dopo che l'oggetto è completamente renderizzato.
Anche io ho avuto a che fare con questo problema di recente.

Grazie! La soluzione è allegata.


File:
 
Quali bandiere e insidie potrebbero esserci se un programma MQL deve aggiungere qualcosa al file (RAM-drive) tutto il tempo, e l'altro (e un altro Terminal) deve leggere tutti questi dati aggiunti da esso?