[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 310

 

Una tale domanda. Come posso ottimizzare ora? Lo scheletro dell'Expert Advisor è il seguente:

init(){
        //если файл истории не существовал, формируем заголовок
}

start(){
        //ловим тики
        //смотрим, сколько прошло секунд с последнего вызова start():
                //если 1 или больше, то---(блок свеч)---
                        //запоминаем, сколько прошло секунд
                        //---(блок выбора режима)---
                        //формируем RateInfo - столько раз, сколько прошло секунд
                //если 0, то---(блок теней)---
                        //редактируем RateInfo - столько раз, сколько прошло секунд в прошлый раз
}

//---(блок выбора режима)---
//флаги в экстерне - все бычьи, все медвежьи или любые
//если все бычьи, то в close всегда ask
//если все медвежьи, то в close всегда bid
//Если любые, то
        //если текущий бид меньше предыдущего, то медвежья
        //в любом другом случае бычья

Ho messo open-close nelle variabili e rimosso il secondo blocco FileSeek, che è diventato inutile, aggiunto la selezione dello stile candlestick (tutto rialzista, tutto ribassista, qualsiasi), aggiunto le ombre se il prossimo asc o bid è superiore o inferiore al precedente alto e basso, aggiunto il tracciamento con la stampa, che è attivato da un flag nell'intestazione, commentato tutto con link ai numeri di linea, cercato di rendere il codice leggibile al forum. Ho anche aggiunto i numeri di riga da stampare.

Ora guarda:

Sopra è un timeframe di tick, sotto è un secondo timeframe. Le ombre (code) sono quando due tick sono stati catturati in un secondo e l'offerta o la richiesta è diversa da quella precedente. Il ticchettio funziona come un orologio. Il secondo tick è in ritardo, significa che spende più tempo per elaborare il tick rispetto all'intervallo di tempo minimo tra i tick. Ecco perché sto chiedendo come ottimizzare il codice. Allego il codice e ripeto che ho sovraccaricato tutto. Se volete controllare come funziona - lo impostate come un EA su minuti, poi in ricerca autonoma e aprite 'sec'+nome dello strumento.

File:
hhi.jt.mq4  29 kb
 
david2:
Come implementare questa funzione nel vostro EA? Quando un TP o SL viene attivato su uno qualsiasi degli ordini Bay, tutti gli ordini Bay dovrebbero essere chiusi.

Se avete esperienza di programmazione, un suggerimento:

1. dopo aver aperto un ordine di acquisto, contare il numero di ordini di acquisto

2. Salvare il loro numero in una variabile globale

Al prossimo tick, controlla le condizioni che la quantità di ordini di acquisto sia inferiore a quella precedente, quindi chiudi tutti gli ordini di acquisto.

Ci sono funzioni che calcolano il numero di ordini per tipo di posizione aperta e per chiusura di posizioni di un tipo selezionato (comprare o vendere) nel Kodobase.

Un sacco di caratteristiche utili nelle funzioni di Kim

 

Sulla conversione dei tipi di variabili.
Scritto il valore del coefficiente doppio K nella descrizione della linea come testo (K=0,573).
Durante l'esecuzione del codice, il valore del coefficiente K è cambiato più volte.
Ora voglio moltiplicare la variabile doppia Z per il valore K=0.573 dopo aver estratto la stringa di descrizione della linea ObjectDescription(string name).
È possibile convertire una variabile di tipo stringa in una variabile di tipo doppio in MQL per ottenere di nuovo 0,573. Se possibile, datemi il link.
Saluti. Shurkin.

 
Shurkin:

È possibile convertire una variabile di tipo stringa in MQL in una variabile di tipo doppio per ottenere di nuovo 0,573. Se possibile, datemi un link.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1: 15
08:05:31 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:33 Tick.tf AUDUSD,M1: 0
08:05:35 Tick.tf AUDUSD,M1: 0
08:05:38 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:39 Tick.tf AUDUSD,M1: 0
08:05:40 Tick.tf AUDUSD,M1: 0
08:05:41 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:42 Tick.tf AUDUSD,M1: 0
08:05:43 Tick.tf AUDUSD,M1: 0
08:05:51 GMT AUDUSD,M1: 15062
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:54 Tick.tf AUDUSD,M1: 0
08:05:55 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:56 Tick.tf AUDUSD,M1: 0
08:05:57 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 0
08:05:58 Tick.tf AUDUSD,M1: 16
08:05:59 Tick.tf AUDUSD,M1: 0
08:06:00 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:06 Tick.tf AUDUSD,M1: 0
08:06:09 GMT AUDUSD,M1: 10156
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:16 Tick.tf AUDUSD,M1: 0
08:06:17 Tick.tf AUDUSD,M1: 0
08:06:18 Tick.tf AUDUSD,M1: 0
08:06:26 GMT AUDUSD,M1: 5078
08:06:27 Tick.tf AUDUSD,M1: 0
08:06:28 Tick.tf AUDUSD,M1: 0
08:06:30 Tick.tf AUDUSD,M1: 31

08:06:32 GMT AUDUSD,M1: 15

Parte del registro con timer di millisecondi in entrambi i codici (tick e secondi). L'unica cosa che mi viene in mente finora è di rimuovere del tutto i cicli, cioè uno o più tick al secondo, non importa quanti secondi sono passati dall'ultimo tick - è sempre una candela. Se ci fosse un secondo e così via ticks al secondo - una candela con ombre. Ma poi ci sarà un secondo TF con "buchi" e per High[15] supponiamo che non prenderò il valore di asc 15 secondi fa...

 
hoz:

Mi sono chiesto come scrivere una funzione. L'idea è che quando N candele tornano indietro in una certa direzione, dovrebbe calcolare il numero di candele. MA. Per questo ci sono diverse condizioni, o più precisamente sarà un elenco di loro nel tempo.

Diciamo che la tendenza, per esempio, è diretta verso il basso,... ...un pullback sale. Voglio, se 5 candele sono salite, e ogni candela era rialzista, e, per esempio, la dimensione di ogni candela era più grande dii_sizeOfCurrBar, e alcune altre condizioni, allora produrre il numero di barre continuamente rialziste, e restituire qualche risultato dalla funzione.

Qual è il modo migliore per scriverlo? Al momento ho iniziato a scrivere, e ho capito che dovrei eseguirlo attraverso un ciclo per barre, e in qualche modo dovrei limitare la vista nella profondità della storia non per un numero fisso di barre, ma per barre, con quei parametri, che ci interessano per condizioni.

Ecco quello che ho, ricevuto:

Al momento stiamo solo andando dalla penultima barra alla barra con indice 6, cioè 5 barre in fila. Ma voglio che il mio Expert Advisor cerchi solo le barre che sono rialziste e non tutte in fila. Come implementarlo adeguatamente?

Ho filtrato correttamente in base alle dimensioni.

Bene, quando tutto è già scritto, il contatore in basso calcolerà già il numero di barre continue con i parametri nht,etvsvb e se ci sono abbastanza di tali barre, allora qualche valore della funzione sarà restituito.

Come sempre originale: contando le barre "dal basso"...

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

Ci sono molti modi diversi:

1. Attraverso una variabile globale.

2. Tramite file.

3. Tramite iCustom().

4. Attraverso le variabili grafiche globali.

5. Mappatura. È possibile trasferire dati da un terminale a un altro terminale. O in un terminale per trasferire dati da una finestra all'altra senza le limitazioni delle variabili globali di MT4.


Quale di queste opere è più veloce?
 
gyfto:

Quale di queste opere è più veloce?
5. Mappatura.
 
hoz:
In stampa ha un valore di 1 e 2... Ma che cazzo sta succedendo qui?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

Solo disattenzione. In generale, il bool qui è a 4 byte, il che non lo obbliga a prendere solo valori 0 e 1. C++ boolearn è a 1 byte. Personalmente uso bool in aritmetica binaria in switch(), se ho bisogno di fare scelte multiple, confidando che sia sempre 0 o 1)) Come questo:

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

Una tale domanda. Come posso ottimizzare ora? Lo scheletro dell'Expert Advisor è ora il seguente:

Ho messo open-close nelle variabili e rimosso il secondo blocco FileSeek, che è diventato inutile, aggiunto la selezione dello stile candlestick (tutto rialzista, tutto ribassista, qualsiasi), aggiunto le ombre se il prossimo asc o bid è superiore o inferiore al precedente alto e basso, aggiunto il tracciamento con la stampa, che è attivato da un flag nell'intestazione, commentato tutto con link ai numeri di linea, cercato di rendere il codice leggibile al forum. Ho anche aggiunto i numeri di riga da stampare.

Ora guarda:

In alto c'è un timeframe di tick, in basso i secondi. Le ombre (code) sono quando due tick sono stati catturati in un secondo e l'offerta o la richiesta differiscono dalla precedente. Il ticchettio funziona come un orologio. Il secondo tick è in ritardo, significa che spende più tempo per elaborare il tick rispetto all'intervallo di tempo minimo tra i tick. Ecco perché sto chiedendo come ottimizzare il codice. Allego il codice e ripeto che ho sovraccaricato tutto. Se volete controllare come funziona - lo impostate come un EA su minuti, poi in ricerca autonoma e aprite 'sec'+nome dello strumento.

Non sono entrato nella logica, ma qualcosa mi dice che ci sono dei calcoli extra. Un anno e mezzo fa stavo risolvendo lo stesso problema con la raccolta di citazioni e la formazione di candele M1 con taglio netto all'inizio del minuto astronomico.
Se vi interessa, potete dare un'occhiata ad alcuni momenti di pura ottimizzazione del vostro codice (file). Davvero, se si parla seriamente di ottimizzazione, è necessario misurare il tempo di esecuzione del codice. ;)
File:
hhi.jt_c_.mq4  23 kb
Motivazione: