Errori, bug, domande - pagina 433

 

Renat, se puoi per favore prestare attenzione alla domanda #124661 nella SR.

Sto aspettando una risposta dal 13 giugno.

 
voix_kas:

Renat, se puoi per favore prestare attenzione alla domanda #124661 nella SR.

Sto aspettando una risposta dal 13 giugno.

Quindi ti è stata data la risposta giusta più di una volta. Vi ho risposto di nuovo.

 
Renat:

Quindi ti è stata data la risposta giusta più di una volta. Ti ha risposto di nuovo.

Non vedo la risposta in questa domanda. L'ultimo commento in esso è il mio del 2011.06.21 09:25 (un ripetuto richiamo alla pertinenza della domanda).

Lo duplico qui, per sicurezza:

Ho capito bene che il limite sul volume/lotto minimo di un trade/ordine è rilevante solo per l'apertura di una posizione?
Si applicano alle transazioni/ordini che portano alla chiusura, all'aumento, alla diminuzione o all'inversione delle posizioni?
Il limite minimo dell'affare si applica a tutti e cinque (5) gli scenari di cui sopra.
Sembra che tutti i possibili scenari siano descritti. O ci sono altri scenari oltre a questi cinque (5)?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 

Ti è stato risposto due volte, poi ho risposto io.

Risponderò di nuovo - sì, le chiusure complete non sono coperte dalla regola del limite di volume.

 
papaklass:
Stiamo parlando di aumentare la velocità di MQL5?
Sì, l'ottimizzazione del codice significa esattamente questo.
 
Renat:

Ti è stato risposto due volte, poi ho risposto io.
Risponderò di nuovo - sì, le chiusure complete non sono soggette alla regola del limite di volume.

Renat, non fraintendermi. Ripeto la mia domanda non per il gusto di coccolarla, ma per chiarirla.
Finora la tua risposta e quella dei tuoi colleghi (nella SD) copre 2 (due) scenari: 1) apertura di una posizione e 2) chiusura completa di una posizione (probabilmente con ORDER_FILLING_AON obbligatorio).
L'esecuzione di un ordine (trade) puòrisultare in almeno altri tre (3) scenari: aumentare, diminuire o invertire una posizione.
Purtroppo, non riesco a trovare alcuna spiegazione chiara di questi tre scenari nelle risposte di MQ. :(

Per chiarezza, ecco alcuni esempi(in tutti i casi sul server, lotto minimo = 1,0; passo minimo = 0,1):

Esempio #1 (accorciamento della posizione).
Abbiamo una posizione lunga di 1,0. Stiamo cercando di chiudere completamente la posizione (usando ORDER_FILLING_CANCEL). Inviamo un ordine di vendita di 1,0 lotto. L'ordine viene eseguito parzialmente (0,9 lotti).
Il risultato è che c'è una posizione lunga aperta di 0,1 lotti. Quindi, possiamo concludere che il requisito del volume minimo dei lotti non si applica allo scenario di shorting delle posizioni.

Esempio 2 (inversione di posizione).
Abbiamo una posizione lunga di 0,1 lotti. Mando un ordine di vendita al server per un volume di 0,2 lotti. Il server accetterà questo ordine? (I requisiti minimi del lotto non sono di nuovo soddisfatti).

Esempio 3 (aumento di posizione).
Abbiamo una posizione lunga di 0,1 lotti. Mando al server un ordine di acquisto di 0,1 lotti.

 
voix_kas:


Per illustrare, ecco alcuni esempi(in tutti i casi il lotto minimo = 1,0; passo minimo = 0,1):

Esempio 1 (posizione corta).
Abbiamo una posizione lunga di 1,0 lotti. Stiamo cercando di chiudere completamente la posizione (usando ORDER_FILLING_CANCEL). Inviamo un ordine di vendita nel volume di 1,0 lotti. L'ordine viene eseguito parzialmente (0,9 lotti).
Il risultato è che c'è una posizione lunga aperta di 0,1 lotti. Quindi, possiamo concludere che il requisito del volume minimo dei lotti non si applica allo scenario di shorting delle posizioni.

Se la posizione si chiude parzialmente a 0,9 (con un ordine a 1,0), allora dovremo inviare un altro ordine per chiudere il saldo a 0,1.

E se l'ordine viene eseguito attraverso un gateway esterno, c'è un'alta probabilità che chiudano solo l'intero volume di 1.0 lotti in una volta sola, non permettendoci di dividerlo.

Esempio 2 (inversione di posizione).

Abbiamo una posizione lunga di 0,1 lotti. Mando un ordine di vendita al server per un volume di 0,2 lotti. Il server accetta questo ordine? (I requisiti minimi del lotto non sono di nuovo soddisfatti).

Non è una liquidazione completa di una posizione a zero, quindi la domanda sarà respinta.


Esempio 3 (aumento del volume della posizione).
Ho una posizione lunga di 0,1 lotti. Mando un ordine di acquisto al server per il volume di 0,1 lotti. Il server esempio di un tale ordine?

Certo che no.

Si prega di leggere le regole alla lettera e di non cercare di inventare le proprie condizioni. La regola è semplice "la regola del limite di volume non può essere applicata quando una posizione è liquidata a ZERO". Questa regola è stata espressa molte volte.


Dovresti anche considerare che qualsiasi broker o qualsiasi gateway di scambio può utilizzare le proprie regole di controllo del volume più severe.

 
Capisco, grazie per il chiarimento.
 
IlyaBukalov:

Il numero massimo di linee tra le quali saranno evidenziate le parentesi di apertura/chiusura è 128. Questa limitazione è stata introdotta perché non ha senso evidenziare le parentesi di apertura e di chiusura che non entrano in una schermata. Inoltre, le prestazioni di MetaEditor sono notevolmente aumentate dopo l'introduzione di questa restrizione.

È molto scomodo quando una parentesi non è evidenziata dopo 128 stringhe, spesso bisogna scorrere due o tre schermate per trovare dove la parentesi è chiusa.
 
voix_kas:

Non è una domanda cruciale, ma comunque. Concatenazione di stringhe. La documentazione descrive due funzioni StringAdd e StringConcatenate.

...

Risultato:

2011.06.26 19:10:55 test (EURUSD,H1)№1 2012 millisecondi, i = 10000000
2011.06.26 19:11:04 test (EURUSD,H1)#2 8269 millisecondi, i = 10000000
2011.06.26 19:11:10 test (EURUSD,H1)#3 6661 millisecondi, i = 10000000

Si scopre, però, che l'addizione normale è più veloce.

Questo esempio non è corretto.

Il primo metodo dovrebbe avere "result = result + string1 + string2 + string3;"

Farei anche un risultato diverso per tutti e 3 i test, altrimenti non partiranno in condizioni uguali (un po' di memoria è già allocata).

Ancora meglio - mettere i test in diversi script ed eseguirli in sequenza.


Ho capito così:

1. lunghezza = 10`000

2011.06.27 02:43:07 sStingTest (EURUSD,M1) №1 2542 millisecondi, i = 10000
2011.06.27 02:43:05 sStingTest (EURUSD,M1) #2 0 millisecondi, i = 10000
2011.06.27 02:43:05 sStingTest (EURUSD,M1) #3 0 millisecondi, i = 10000


2. lunghezza = 100`000

2011.06.27 02:37:40 sStingTest (EURUSD,M1) #2 47 millisecondi, i = 1000000

2011.06.27 02:37:39 sStingTest (EURUSD,M1) #3 15 millisecondi, i = 1000000

Finitura #1 - non ha aspettato


3. lunghezza = 1`000`000

2011.06.27 02:37:40 sStingTest (EURUSD,M1) #2 780 millisecondi, i = 1000000

2011.06.27 02:37:39 sStingTest (EURUSD,M1) #3 187 millisecondi, i = 1000000

La fine del numero 1 non ha avuto luogo.


4. lunghezza = 10`000`000

2011.06.27 02:48:14 sStingTest (EURUSD,M1) #3 1903 millisecondi, i = 10000000

L'errore "MemoryException: 602492946 bytes not available" è iniziato al secondo test.


Conclusione: StringConcatenate è il più veloce.


A proposito, la funzione StringAdd ha anche un esempio di confronto non molto corretto.

Il mio codice per testarlo è nel trailer.

File:
Motivazione: