Auguri per MQL5 - pagina 39

 
ds2:
// Эти свойства задались уже при создании переменной.
// Менять их в программе, в принципе, особого смысла нет.
// Так что можно их (некоторые из них) сделать read-only
AvgType.DataType = int; 
AvgType.Value    = 0;
AvgType.Comment  = "Тип скользящей средней";

Avrebbe senso farlo in questo modo?

class ExternParam
{
    <template typename T>
    property T Value ...;
    property String Comment ...;
}
 
SK. писал (а):
ds2:
SK. ha scritto (a):

Vorrei anche una pausa da if().

Non ho visto qualcosa del genere nei linguaggi di programmazione popolari...

О. Ecco, proprio così, proprio sui soldi.

L'affermazione positiva in questa dichiarazione è che se non è in altre lingue, è male, significa che è qualcosa di straniero e non necessario.

Secondo me non è affatto vero.

Sono d'accordo. Ma bisogna guardare la situazione anche da livelli più alti di convenienza. La priorità di MQ, e anche la nostra(!) è quella di migliorare MQL come linguaggio di trading automatico, e di sviluppare le sue possibilità di trading e di analisi. E MQ ha ancora molti problemi irrisolti in questa direzione.


E l'implementazione di strutture di programmazione non standard non legate al trading - non è per questo che MQL è stato creato. Se gli sviluppatori avessero voluto in qualche modo stravolgere e distinguersi dagli altri linguaggi, avrebbero usato Prolog, per esempio, non C++. :) (Anche se, personalmente, come fan di Prolog, sarebbe stato interessante guardarlo. :) )


Penso che non importa quanto i programmatori qui chiedano un breakif, è improbabile che MQ perda tempo su di esso. E, secondo me, faranno la cosa giusta. E suggerisco a tutti di non disturbare MQ con richieste che li distraggono da compiti più urgenti di migliorare MQL come linguaggio di trading automatico.

SK. ha scritto (a):

I costrutti complessi non si formano solo sulla base di loop e liste. Si formano anche sulla base dei se. Quindi sarebbe utile una transizione controllata verso una staffa di chiusura esterna.

Io sono a favore del goto. :)


La logica di un tale programma sarebbe più trasparente. Dopo tutto, breakif è un'uscita anticipata da una costruzione if. Come ogni uscita anticipata, dovrebbe essere eseguita da qualche condizione, cioè all'interno di un altro if. Così, stiamo parlando di breakif come operatore di uscita non per uno ma per due(!) if, il che complica la comprensione della logica di un programma e rompe anche il concetto generale di break(breakfor, breakwhile, ecc.) come operatori che escono solo per un costrutto. Forse è per questo che gli sviluppatori di altre lingue non hanno ancora introdotto un operatore così dubbio...

 
ds2 писал (а):
E suggerisco a tutti di non disturbare MQ con richieste che lo distraggono da compiti più urgenti di migliorare MQL come linguaggio di trading automatico.


Sono d ' accordo. :) La logica di un tale programma sarà più trasparente.

Cari sviluppatori! Per favore non fatevi distrarre "dai compiti più urgenti di migliorare MQL come linguaggio di trading automatico".

Non vi disturberemo più.

L'unica cosa che dovete ancora fare è prendere in considerazione l'opinione di ds2.

 

Ispirato dall'articolo di Skeptic Filozov - ah, inserire il profitto medio e la perdita in pip e i trade max e min anche nel rapporto di test.

 

Richieste di sola lettura


Inserire le funzioni o permettere alle funzioni correnti di accedere a tutte le sottocartelle del terminale

dove c'è materiale da trattare: ad esempio, tronchi

modalità "sola lettura".


Pianifica un'altra cartella \servizi esperti

Dove tutti i tipi di informazioni del DM verrebbero scritte centralmente.

Per esempio un file calendario formattato e aggiornato automaticamente, notizie "in numeri", ecc...


Se hai bisogno di chiarire di cosa si tratta la richiesta, nessun problema. ;)

 

Nel grafico sarebbe bello avere
1. hairline, poiché le linee di spessore 1 sembrano grossolane.

2. sarebbe bello avere delle linee visualizzate con l'arrotondamento Digits+2.

In questo momento le linee sono arrotondate alle Cifre dello strumento, il che porta ad una pietra miliare.

-Nell'ambiente dei prodotti grafici moderni questo è impressionante e non è più conveniente nella pratica.

 
Dato che il consulente può servire l'agenda del cliente, i "tic tecnologici" sono molto necessari
per esempio sotto forma di
int servis() 
{
return(0);
}

Che riceve/avvia anche lui come Start, ma non da un server, ma da un timer locale del terminale.
Il periodo richiesto di zecche tecnologiche non danneggia nessuno: da 1 a 3 secondi.
Questo cambiamento può essere introdotto direttamente in MQL-4 senza aspettare la quinta versione. Così per dire, per il bene dei test e per il bene degli affari.
 
Korey:

ERRORE in METALANG

extern double  Lot=0.2;
int start()
{ double   Lot; }

L'iniziazione di una doppia variabile passa attraverso la compilazione senza errori o avvertimenti.


extern double  Lot=0.2;
double   Lot;   //а так ошибку - дает
int start()
{ }

Una variabile locale maschera una variabile globale. Non c'è nessun errore.

 

Korey, zero proprio perché la variabile esterna è mascherata:

double Lot;

- è una dichiarazione non inizializzata di una variabile locale all'interno della funzione start(). Per default è inizializzato a zero. Tutte le funzioni che sono chiamate in start() e hanno il parametro di input Lot ricevono il valore di una variabile locale, non una esterna. L'unica eccezione è per le funzioni all'interno di init() che sono eseguite prima di start(). Lì, il parametro Lot (se non è mascherato in modo simile) deve ottenere il valore di una variabile esterna, cioè 0,2.


Hai citato il codice sbagliato o incompleto. Da dove chiamate my_funck()?

 
Korey:

Se fosse un mascheramento, allora perché le altre funzioni ottengono 0 e non 0,2. come prescritto nell'extern?


Dovete controllare voi stessi le dichiarazioni. Ecco un semplice script:

//+------------------------------------------------------------------+
//|                                                CheckVariable.mq4 |
//|                      Copyright © 2008, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
extern double Var = 0.0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
   {
   Print("Функция init():Внешняя переменная на глобальном уровне Var=",Var);
   }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MyFunc()
   {
   Var = -100;
   Print("Функция MyFunc(): Переменная Var=",Var);
   }
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
   {
   Print("Функция deinit():Внешняя переменная на глобальном уровне Var=",Var);
   }
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   double Var = 15;
   Print("Локальная переменная на локальном уровне функции start() Var=",Var);
   MyFunc();
   Print("Локальная переменная на локальном уровне после выполнения функции MyFunc() Var=",Var);
 
   Print("Функция start() завершена");
 
//----
   return(0);
  }
//+------------------------------------------------------------------+


e i risultati dello script.

Motivazione: