Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 646

 
valeryk:


No, ho appena controllato. È vero, il timer è spento quando internet è spento.
Ecco, pensavo di essere l'unico ad avere dei glitch). Come risolveresti questo problema?
 
Meno male che non sto usando innovazioni che i più esperti non hanno ancora scoperto! :)
 
Megan:
Ecco, pensavo di essere l'unico ad avere dei glitch). Come risolveresti questo problema?



Se gli sviluppatori non hanno inteso questo comportamento del timer come "infallibile", allora il bug è inequivocabile. Dopo tutto, il timer inizia nell'inite, e da quel punto dovrebbe funzionare autonomamente. Dovete fare una richiesta a servicedesk.
 
il moderatore sembra averlo letto. barabashkakvn- può confermare che c'è un problema e dovrebbe scrivere a servicedesk?
 
Megan:
EventSetTimer(1); stand. E quando c'è una connessione, tutto funziona, stranamente. Non c'è alcuno scarico a OnInit() . Non so perché è così(...

MetaTrader 4 build 660. In realtà, se non c'è connessione al momento dell'avvio del terminale, OnInit() non avviene.

Rimedio: riattaccare l'esperto o scambiare il timeframe due volte.


 
barabashkakvn:

MetaTrader 4 build 660. Infatti, se non c'è connessione al momento dell'avvio del terminale, OnInit() non avviene.

Questo può essere curato con una mezza misura: riattaccare l'Expert Advisor o cambiare due volte il timeframe.


C'è un problema con esso) Il mio EA è progettato per lavorare offline(
 
Megan:
ho un EA progettato per il funzionamento autonomo (


Dovete scrivere una richiesta a servicedesk.
 

Salve. Amici, per favore aiutate un principiante. Non riesco a capire come caricare le citazioni nel terminale, pre-editate nel file .xls. Ho lottato con questo tutto il giorno.

Posso scaricare le citazioni per il terminale?

 

Salve di nuovo. Me lo sono chiesto da solo, mi sono risposto da solo: quando ho modificato il nome, ho scelto qualsiasi nome tranne quello originale. Corretto in - RTSI1440.csv e caricato.

Grazie.

 
Top2n:

Buona giornata!

L'obiettivo è quello di scrivere un algoritmo per calcolare la media dei trade.

Ho deciso di implementarlo riempiendo i valori dei prezzi delle posizioni aperte in un array. Di conseguenza, riempie l'array senza cambiare. Ho perso qualcosa da qualche parte.

Azzeramento dell'array prima dell'inizio:

  if (ArrayResize(array, 0) != 0) {
    return false;
  }

A proposito, se OrderSelect() restituisce un errore in almeno un'iterazione del ciclo, i risultati non sono affidabili. In altre parole, non dovremmo cercare di gestire gli ordini rimanenti se alcuni di essi sono falliti. Sarebbe invece più ragionevole restituire subito l'errore. Per esempio, un codice di livello superiore potrebbe reagire a un errore nel seguente modo: provare a ripetere un paio di volte ancora con questo tick o annullare le azioni su questo tick, rimandarle e riprovare con il prossimo tick.

È più logico unire Usred() e Zapis(), e la condizione del filtro dovrebbe essere combinata nel modo seguente: "if (OrderSymbol() == Symbol() && OrderType() == type)". Comunque, non c'è bisogno di un OrderSelect() ripetuto in Zapis().

Per calcolare il prezzo medio di una posizione per i singoli ordini, non dobbiamo tenere tutto in un array. Possiamo calcolarlo al volo.

S1 = order1_lots * order1_openprice + order2_lots * order2_openprice + ... orderN_lots * orderN_openprice.

S2 = order1_lots + order2_lots + ... + ordineN_lotti.

Il prezzo della posizione che stiamo cercando = S1 / S2.

Se creiamo due variabili, per S1 e per S2, le impostiamo a zero, e nel ciclo ogni volta aggiungiamo un valore corrispondente a ciascuna delle variabili, allora dopo il ciclo dobbiamo solo dividere S1 per S2, avendo prima controllato che S2 non sia 0 (in questo caso - errore, cioè il risultato NON è calcolato, non esiste). Forse il valore risultante deve anche essere normalizzato da NormalizeDouble() - dipende dall'algoritmo se la normalizzazione è necessaria, e dalle convenzioni del programma, quale funzione chiama o viene chiamata per normalizzare.

In questo caso non avrete nemmeno bisogno di un array.

Se avete bisogno di calcoli diversi dal prezzo totale della posizione, potete "restituire" i valori S1 e S2 alla funzione chiamata, passando le variabili stesse per riferimento, e restituire il segno di errore dalla funzione. Cioè, il prototipo della funzione chiamata potrebbe essere così: "bool fun(double &S1, double &S2);". La funzione chiamante avvia le variabili, le passa a fun() e, se fun() ritorna vero, usa i valori delle variabili passate (che possono avere nomi diversi) come S1 e S2.