Dividere le posizioni aperte in gruppi - pagina 8

 
Sergey Voytsekhovsky:

Per favore ditemi, l'articolohttps://www.mql5.com/ru/articles/567 ha il seguente codice e menziona

Ma non l'ho trovato nel pacchetto standard. Non è una buona ricerca o l'articolo non è aggiornato?

No, ho solo fatto un errore.

Stai tirando pezzi di codice da qui, là e là, e noi dovremmo indovinare.

Il codice per aggiungere un elemento alla fine della lista che hai mostrato è molto simile al codice per aggiungere un elemento alla fine della lista dalla libreria standard.

E si scopre che hai preso qualcosa da qualche parte...

 
Sergey Voytsekhovsky:

L'idea è chiara, non è chiaro perché non usare algoritmi già collaudati, ma sui "tre loop" - molto comprensibile, grazie. Quando si ottengono soluzioni semplici di alta qualità, mi chiedo sempre perché non l'ho capito io, perché è così ovvio. Grazie.

Ci sono molti errori anche lì, e cercare problemi nel codice di altre persone è assolutamente impossibile per me. Inoltre, se improvvisamente trovi un errore, lo risolvi da solo e anche se lo segnali, non significa che vedranno il messaggio e lo risolveranno. E il prossimo aggiornamento ricomincerà tutto da capo.
 
Alexey Viktorov:
Ci sono molti errori anche lì, e cercare un problema nel codice di qualcun altro è abbastanza impossibile per me. Inoltre, se improvvisamente trovi un errore, lo risolvi da solo e anche se lo segnali, non è certo che il messaggio venga visto e corretto. E il prossimo aggiornamento ricomincerà tutto da capo.

Sei sicuro che ci siano molti bug nel SB? O semplicemente non ti piacciono i gatti perché non hai un libro di cucina?

 
Artyom Trishkin:

No, ho solo fatto un errore.

State "tirando" pezzi di codice da qui, là, là..., e noi dobbiamo indovinare.

Il codice per aggiungere un elemento alla fine della lista che ci hai mostrato è molto simile al codice per aggiungere un elemento alla fine della lista dalla libreria standard.

E si scopre che hai tirato fuori qualcosa da qualche parte...

Il codice per aggiungere un elemento alla fine della lista viene dalla libreria standard, hai ragione. E ho provato a "tirarlo" dopo che non ho trovato quel codice dall'articolo. :-))

 
Artyom Trishkin:

Sei sicuro di sapere che ci sono molti errori in SB? O semplicemente non ti piacciono i gatti per mancanza di un libro di cucina?

Dimmi, Artyom, ti ricordi il problema della chiusura parziale di una posizione? Vi ricordate che successivamente hanno aggiunto un altro metodo invece di trovare la ragione di questo comportamento?

Non so come deviation=ULONG_MAX abbia fatto sì che l'intero metodo non funzionasse, ma l'ho sostituito con deviation=1000 e tutto ha funzionato bene. Ne ho scritto nel thread "Bugs bugs...", ma l'argomento è cresciuto così velocemente che questo messaggio è caduto nel dimenticatoio e non è stato notato. Di conseguenza, è apparso un altro metodo, ma è davvero necessario? E come si può ora essere sicuri che non ci siano errori altrove? Come si può essere sicuri che il messaggio sarà notato?

 
Sergey Voytsekhovsky:

Il codice per aggiungere un elemento alla fine della lista viene dalla libreria standard, hai ragione. E ho provato a "tirarlo" dopo che non ho trovato quel codice dall'articolo. :-))

Se usate la libreria standard per memorizzare i vostri dati rappresentati da oggetti, allora i dati non dovrebbero essere una struttura, ma un oggetto basato su CObject della libreria standard, e poi potete usare array dinamici di puntatori a oggetti della libreria standard per memorizzarli. Non c'è modo di estrarre un pezzo.

Документация по MQL5: Стандартная библиотека / Базовый класс CObject
Документация по MQL5: Стандартная библиотека / Базовый класс CObject
  • www.mql5.com
Класс CObject обеспечивает всем своим потомкам возможность быть элементом связанного списка. Кроме того определяется ряд виртуальных методов для дальнейшей реализации в классах-потомках.
 
Alexey Viktorov:

Dimmi, Artyom, ti ricordi il problema della chiusura parziale di una posizione? Vi ricordate che in seguito hanno aggiunto un altro metodo invece di trovare la ragione di questo comportamento?

Non so come deviation=ULONG_MAX abbia influenzato l'intero metodo che non funziona, ma l'ho sostituito con deviation=1000 e tutto ha funzionato bene. Ne ho scritto nel thread "Bugs bugs...", ma l'argomento è cresciuto così velocemente che questo messaggio è caduto nel dimenticatoio e non è stato notato. Di conseguenza, è apparso un altro metodo, ma è davvero necessario? E ora come si può essere sicuri che non ci siano più errori da nessuna parte? Come si può essere sicuri che il messaggio sarà notato?

No, non ricordo il problema della chiusura parziale. E non so se la deviazione influisce sull'operazione. E non riesco nemmeno a immaginare come una deviazione massima pari a ULONG_MAX punti (che è equivalente a nessuna deviazione) possa influenzare la chiusura parziale. E non ho sentito parlare del nuovo metodo. Qual è il metodo?

E per essere sicuri che il messaggio non vada perso - trovatelo, copiatelo nella vostra tasca, e ripubblicatelo con una nota che probabilmente si è perso da qualche parte nella discussione che"MQL != C++, e dovrebbe essere =="

 
Artyom Trishkin:

No, non ricordo un problema di chiusura parziale. E non so se la deviazione influisce sul funzionamento. E non riesco nemmeno a immaginare come una deviazione massima di ULONG_MAX punti (che equivale a nessuna deviazione) possa influenzare la chiusura parziale. E non ho sentito parlare del nuovo metodo. Che tipo di metodo?

E per non perdere il messaggio - trovatelo, copiatelo in una tasca e ripubblicatelo con una nota che da qualche parte probabilmente si è perso nella discussione che"MQL != C++, e dovrebbe essere ==".

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

Suddividere le posizioni aperte in gruppi

Alexey Viktorov, 2020.04.08 09:13

Dimmi Artem, ti ricordi il problema della chiusura parziale della posizione? Vi ricordate che più tardi hanno aggiunto un altro metodo invece di trovare la causa di tale comportamento?

Non so come deviation=ULONG_MAX abbia influenzato l'inoperatività dell'intero metodo, ma l'ho sostituito con deviation=1000 e tutto ha funzionato bene. Nel topic "Bugs bugs..." ne scrisse, ma l'argomento crebbe così velocemente che questo messaggio scomparve nell'abisso e non fu notato. Di conseguenza, è apparso un altro metodo, ma è davvero necessario? E come si può ora essere sicuri che non ci siano errori altrove? Come si può essere sicuri che il messaggio sarà notato?


 
Artyom Trishkin:

No, non ricordo un problema di chiusura parziale. E non so se la deviazione influisce sul funzionamento. E non riesco nemmeno a immaginare come una deviazione massima di ULONG_MAX punti (che è equivalente a nessuna deviazione) possa influenzare la chiusura parziale. E non ho sentito parlare del nuovo metodo. Quale metodo?

E così il messaggio non è perso - trovatelo, copiatelo in una tasca, e ripostatelo con una nota che da qualche parte probabilmente si è perso nella discussione che"MQL != C++, e se dovrebbe essere ==".

Sta quindi suggerendo di spingere indietro gli altri messaggi? Che nessuno li tiri fuori? Non è giusto.

Secondo me, sarebbe meglio definire una sezione separata del forum dove ogni problema sarebbe un argomento separato. Il numero di argomenti è molto inferiore al numero di post per argomento. Pertanto, nonostante il gran numero di argomenti, essi non saranno spinti così indietro come le domande individuali e le segnalazioni di bug sono spinte ora.

 
Alexey Viktorov:

Eliminare la forzatura bruta delle posizioni per determinare "che la posizione è effettivamente nuova". Trova un altro modo. Per esempio in OnTradeTransaction. E provate a usare la funzione ArrayRemove invece dell'overflow dell'array

Se ho capito bene, questo è il modo giusto di procedere. Come compagno più esperto, per favore consigliate, allo scopo di catturare posizioni neonate un tale filtro funzionerà? O forse c'è un'opzione migliore?

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
     if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
      {
         if(trans.type != TRADE_TRANSACTION_ORDER_DELETE)
            {
             if(HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN) // открылась позиция
               {
Motivazione: