Sono completamente perso - pagina 3

 
FMIC ci sono COSE in quella documentazione che non hanno QUASI senso. Chiunque abbia scritto quella cosa chiaramente la stava scrivendo per un pubblico che non aveva mai scritto nemmeno un programma in gwbasic o pseudocodice, per non parlare dell'esposizione a concetti di programmazione di livello superiore. O almeno l'intenzione dell'autore era che fosse comprensibile a tali persone, non necessariamente che fosse diretto esclusivamente a tali persone. Sono incline a saltare le parti riguardanti le dichiarazioni if/else e i cicli for e cos'è una variabile, per la miseria, quindi no, non lo leggo dall'inizio alla fine. Eppure quando salto quelle parti, nelle sezioni successive, l'autore non è riuscito a vederlo dalla prospettiva di un principiante relativo, perché arriva qualcuno come me che ha una limitata esperienza di programmazione e i pezzi ancora non si incastrano una volta arrivati ad un certo punto della letteratura. Ecco un altro esempio. Il tipo di dati datetime. Vado qui: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx e vedo che le variabili datetime sono di norma molto più complicate di quello che dice questa documentazione. Per esempio, contiene informazioni sui MILLISECONDI. Può essere qualsiasi anno fino al 9999 d.C. Eppure questa documentazione SUGGERISCE che è diverso, ma non va abbastanza in dettaglio. Forse non è la variabile standard C++ datetime ma qualcosa di specifico per MQL4 allora? Il numero di secondi dall'inizio del 1970, valido fino alla fine del 2037. Ora, si dà il caso che ci siano quasi 2^31 secondi in quell'intervallo di tempo. Questo suggerisce che si tratta di un numero intero lungo firmato - dato che un numero intero non firmato arriverebbe al 22° secolo a partire dal 1970. Posso effettivamente usarlo in operazioni aritmetiche COME SE fosse un intero lungo con segno? Non lo dice. È ambiguo. Potrebbe essere una variabile glorificata simile a una stringa, solo con certi vincoli su ciò che la stringa può essere. Mostra anche alcuni modi incompleti di usarla. Ma non è abbastanza esplicito su tutti i modi in cui si può accedere o manipolare. Posso semplicemente usarlo nell'aritmetica degli interi insieme agli int? Se leggo l'indice temporale di un campione, posso semplicemente sottrarre un grafico di 1 minuto da un altro grafico di 1 minuto e, se sono minuti consecutivi, aspettarmi che differiscano di 60 (eventualmente più o meno 1)?

C'era quell'altra cosa con cui avevo già un problema - la descrizione di ArrayCopySeries è ambigua. Suggerisce in alcune parti che array[] è scritto in alcune parti, ma in altre parti, suggerisce che non lo è. E la guardo e non capisco assolutamente lo scopo della funzione se NON copia i dati della valuta nell'array.

Ecco un'altra cosa che vorrei sapere. Dice che un EA può avere 3 funzioni principali: init, deinit e start. init viene eseguito una volta quando viene eseguito per la prima volta, start viene eseguito ogni volta che c'è un nuovo tick, e non dice nulla su deinit. L'esempio qui https://book.mql4.com/samples/expert non ha nemmeno un init. Ha uno start. Ha alcune cose complicate per gestire apparentemente gli errori come Fun_Error, qualunque cosa faccia. Nessun init. Che dire delle variabili. Le variabili definite all'interno di init sono ancora valide quando è finito e quando "start" viene eseguito? O devono essere dichiarate fuori da entrambe le variabili? Le variabili dichiarate all'interno di start vengono cancellate ogni volta che start viene eseguito di nuovo? Le variabili dichiarate al di fuori di esso lo sono? Spero di no! Non sono nemmeno sicuro che mi sia permesso ALTERare le variabili dichiarate al di fuori di qualsiasi funzione. Sembra che siano tutte variabili statiche globali da quello che ho visto.

A proposito, i simboli di valuta usati in funzioni come iTime dovrebbero essere tra virgolette singole o doppie: "USDCHF" o 'USDCHF'. Mille piccole cose come questa. Ognuna di esse, sono sicuro, causerà la mancata compilazione quando arriverò alla fine. E con mille diverse piccole cose accidentali sbagliate, ci sarà da fare il debugging.

RaptorUK oh certo che non hai alcun obbligo di aiutarmi. E se la tua idea di divertimento è quella di trollare le persone sui forum, prendendole in giro per essere su un forum a chiedere aiuto quando CHIARAMENTE lo scopo di andare su qualsiasi forum in primo luogo è quello di trollare le persone, allora vedo che ti stai davvero divertendo e adempiendo a quello che credi essere il ruolo corretto di un utente del forum. Per quanto mi riguarda, se fossi QUALIFICATO ad aiutare qualcuno, rispondendo ad una domanda a cui potrei rispondere, ipoteticamente potrei anche essere disposto a farlo. So molto di matematica arcana, non tanto di programmazione. Per esempio, se tu avessi una dozzina di indicatori che non sono statisticamente indipendenti, so come combinarli in modo ottimale in un indicatore composito in modo da compensare il fatto che sono statisticamente dipendenti. Naturalmente non ho intenzione di aiutarvi in nulla adesso. Perbacco, se ti vedessi con il piede bloccato nei binari della ferrovia, ti direi: "Potrei aiutarti, ma cosa ci guadagno io?

 
zortharg:
FMIC ci sono COSE in quella documentazione che non hanno QUASI senso. ...

Non ho avuto difficoltà a leggere tutto il libro dall'inizio alla fine, nonostante sia ben versato in linguaggi di alto e basso livello.

Ho 45 anni e sono uno sviluppatore di software di professione dal 1986, avendo anche una laurea in ingegneria (elettronica a bassa corrente). Sono competente in C, C++, C#, Pascal, Cobol, Fortran, Perl e molti altri che sono scomparsi da tempo. Sono anche ben versato nella programmazione Assembler per x86, Z-80, Pics e molte altre architetture. Ancora una volta, dico che non ho avuto difficoltà a leggere e imparare MQL4.

Quindi, tutto quello che posso concludere è che il tuo atteggiamento di critica della documentazione, invece di concentrarti sull'effettivo obiettivo di imparare MQL, può significare solo una cosa - Tu sei in realtà più stupido dei non programmatori per i quali la documentazione è stata scritta.

Se pensate che MetaTrader e MQL siano così inferiori a voi, allora perché siete qui? Seriamente! Perché?

Ci sono molte altre applicazioni di trading e sistemi algoritmici là fuori. Sceglietene uno e datevi da fare!

A proposito, "RaptorUK" è un MODERATORE del forum. Sei tu il TROLL qui!

Questo è il mio ultimo post su questo thread! Non sei degno di questo sforzo.

 
zortharg:

RaptorUK oh certo che non hai alcun obbligo di aiutarmi. E se la tua idea di divertimento è quella di trollare le persone sui forum, prendendole in giro per essere su un forum a chiedere aiuto quando CHIARAMENTE lo scopo di andare su qualsiasi forum in primo luogo è quello di trollare le persone, allora vedo che ti stai davvero divertendo e soddisfacendo quello che credi essere il ruolo corretto di un utente del forum. Per quanto mi riguarda, se fossi QUALIFICATO ad aiutare qualcuno, rispondendo ad una domanda a cui potrei rispondere, ipoteticamente potrei anche essere disposto a farlo. So molto di matematica arcana, non tanto di programmazione. Per esempio, se tu avessi una dozzina di indicatori che non sono statisticamente indipendenti, so come combinarli in modo ottimale in un indicatore composito in modo da compensare il fatto che sono statisticamente dipendenti. Naturalmente non ho intenzione di aiutarvi in nulla adesso. Perbacco, se ti vedessi con il piede incastrato nei binari della ferrovia, ti direi: "Potrei aiutarti, ma cosa ci guadagno io?

Forse dovresti spiegare questo tuo commento?

L'audacia delle persone su questo forum!


Molte persone su questo forum danno il loro tempo libero per cercare di aiutare. . e tu arrivi e ti aspetti di essere aiutato come se fosse un diritto! Penso che tutti sarebbero felici di aiutarti fino a quando non hai dimostrato il tuo atteggiamento . . dovresti mostrare un po' di umiltà quando chiedi aiuto.

Puoi etichettarmi come vuoi, davvero non mi interessa, so perché sono qui e alcune persone mi ringraziano anche per aver cercato di aiutare. . . Immagino che questo sia al di là di te.

 
zortharg:

Quindi devo scaricare i prezzi storici una volta alla volta con iclose allora? https://docs.mql4.com/series/iClose Il problema con questo come lo vedo io è che i dati possono aggiornarsi mentre sono nel mezzo del download. Sarebbe molto bello scaricare il tutto in blocco. Immagino di poter scaricare il tempo con iTime e poi usare iclose e poi usare di nuovo iTime sullo stesso indice e se è cambiato, allora è iniziato un nuovo intervallo di tempo della barra e devo tornare indietro di un numero di indice. Il mio ragionamento è corretto o c'è qualcosa che non capisco?


Perché una funzione chiamata ArrayCopySeries() dovrebbe richiedere che tu copi la serie da solo?

Dichiari l'array ma non hai bisogno di specificare la dimensione.

Quando accedi all'array, mql fa una "magia" e (si spera) il valore giusto salta fuori al posto giusto.

C'è un esempio nella pagina.

Detto questo, la documentazione on-line è fuori sincrono al momento, quindi usa l'aiuto nel metaeditor come riferimento principale.

Guardate l'esempio fino a che non ha senso!

 
zortharg:
Il tipo di dati datetime. Vado qui: http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx e vedo che le variabili datetime sono di norma molto più complicate di quello che dice questa documentazione. Per esempio, contiene informazioni sui MILLISECONDI. Può essere qualsiasi anno fino al 9999 d.C. Eppure questa documentazione SUGGERISCE che è diverso, ma non va abbastanza in dettaglio. Forse non è la variabile standard C++ datetime ma qualcosa di specifico per MQL4 allora? Il numero di secondi dall'inizio del 1970, valido fino alla fine del 2037. Ora, si dà il caso che ci siano quasi 2^31 secondi in quell'intervallo di tempo. Questo suggerisce che si tratta di un numero intero lungo firmato - dato che un numero intero non firmato arriverebbe al 22° secolo a partire dal 1970. Posso effettivamente usarlo in operazioni aritmetiche COME SE fosse un intero lungo con segno? Non lo dice. È ambiguo. Potrebbe essere una variabile glorificata simile a una stringa, solo con certi vincoli su ciò che la stringa può essere. Mostra anche alcuni modi incompleti di usarla. Ma non è abbastanza esplicito su tutti i modi in cui si può accedere o manipolare. Posso semplicemente usarlo nell'aritmetica degli interi insieme agli int? Se leggo l'indice temporale di un campione, posso semplicemente sottrarre un grafico di 1 minuto da un altro grafico di 1 minuto e, se sono minuti consecutivi, aspettarmi che differiscano di 60 (eventualmente più o meno 1)?

Perché tante parole per chiedere una cosa semplice :)

Vecchio MQL: https://docs.mql4.com/dateandtime Un gruppo di funzioni che permettono di lavorare con dati di tipo datetime(intero che rappresenta la quantità di secondi trascorsi dalla mezzanotte del 1° gennaio 1970).

Nuovo MQL: https://www.mql5.com/en/docs/basis/types/integer/datetime - Il tipodatetime è destinato a memorizzare la data e l'ora come numero di secondi trascorsi dal 01 gennaio 1970. Questo tipo occupa 8 byte di memoria.

La maggior parte dei linguaggi che usavano il vecchio intero a 32 bit per memorizzare il tempo, sono passati a 64 bit, per evitare la rovina quando arriverà l'anno 2038.

Basta aggiungere e sottrarre come si suppone. Ma tenetelo come datatype datetime , ed evitate la tentazione di memorizzarlo in una variabile lunga .

 

GRAZIE ydrol!

Hmmmmm. Non so se static_cast esiste in mql4, ma posso usare qualsiasi operazione aritmetica regolare su datetime, a patto di salvare il risultato in un altro datetime? Ad esempio, se X[] è un array di datetime, e voglio lavorare con il numero di minuti, potrei prendere Y=(X[17]+30)/60 purché Y sia un datetime e non un long? Giusto? O piuttosto, forse prenderei Y=(X[17]-X[16]+30)/60 perché sarebbe brutto se X[17] fosse 29 mod 60 e X[16] fosse 30 mod 60, penserebbe che sono distanti 2 minuti se lo facessi nel primo modo.

Oh amico, il codice che ho fatto finora è già così lungo, e tutto ciò che è stato fatto è leggere i dati e ora devo compensare i dati che saltano minuti (o l'intero fine settimana!) spostando i dati in giro di più e interpolando, mi chiedo quali siano le probabilità che questo tacchino funzioni quando ho finito, ha ha. Tutto da un programma matlab che dimostra che finalmente ho un metodo di trading che può battere lo spread/commissione, ma metterlo in pratica è un'altra cosa.

A tutti quelli che non sono ydrol, ok, vi dichiaro i vincitori delle vostre rispettive gare di p***ing, quindi congratulazioni e visto che avete vinto, potete smettere di postare su questo thread ora.

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

Se il risultato della vostra aritmetica è ancora un punto nel tempo (cioè ancora un valore che è il numero di secondi dal 1970), allora tenetelo come datetime, altrimenti potete castarlo in un long o int. (Non è necessario, ma eviterà la confusione in seguito)

Non serve inimicarsi tutti, basta cambiare approccio per ottenere l'aiuto che si desidera :)

 

Beh, dopo aver scritto un po' di codice sembra davvero molto difficile per me evitare di salvare i risultati aritmetici con datetime come input in ints. Ma static_cast<long> in teoria funzionerebbe come in C++? Non vedo alcuna menzione nei documenti.

Oh, a proposito, il fuso orario. È UTC? Quel libro continua a dire il numero di secondi dal 1 gennaio 1970 alle 0:00. Potrei assumere che sia UTC come il tempo UNIX, tranne che abbiamo già stabilito che ci sono almeno alcune discrepanze tra le variabili "datetime" qui e ciò che usa il C++ (niente millisecondi per esempio) - che ammettiamo non è il tempo UNIX, ma si chiama comunque "datetime" - quindi solo perché superficialmente assomiglia al tempo UNIX perché inizia all'inizio del 1970, non dovrei assumere che sia quello. È necessariamente UTC o è possibile che ogni broker possa avere il proprio offset basato sul proprio fuso orario e che io debba averlo nel codice per capire dove sia l'inizio della settimana, modulo 10080 minuti, in base ai dati? Il punto è sapere il tempo modulo 10080 quando il trading inizia e finisce, dato che il mercato è aperto solo 7200 di quei 10080 minuti, in modo da poter liquidare le posizioni all'avvicinarsi del fine settimana, e non iniziare a pieno ritmo proprio all'inizio o MOLTO peggio, per prendere drastiche decisioni di trading basate su discontinuità di prezzi tra la fine di una settimana e l'inizio della prossima, o anche di essere ignari delle interruzioni quando si determinano informazioni come la volatilità - che io definisco come variazione quadratica media del prezzo dopo 1 minuto - e poi aggiungo 1/4 della variazione quadratica media del prezzo dopo 2 minuti e 1/9 della variazione quadratica media del prezzo dopo 3 e 1/16 della variazione quadratica media del prezzo dopo 4 e poi moltiplico il tutto per 1/(1+1/2+1/3+1/4)=0.48.

Ehi, cosa posso dire, sono venuto a chiedere aiuto e sono stati cattivi e antagonisti con me fin dall'inizio. Se qualcuno chiede aiuto, quello che faccio è o non darglielo o darglielo. Se non so la risposta a una domanda che qualcuno fa, non faccio chiacchiere invece di rispondere, e se non voglio prendere il tempo per rispondere correttamente alla domanda, non prendo il tempo per deridere la domanda o dare una non-risposta inutile. Un po' di tolleranza su quest'ultimo punto per chi fa una domanda di cui dovrebbe conoscere la risposta se ha vissuto sul pianeta Terra per più di un giorno, o se la domanda è retorica e soprattutto se concepita per essere offensiva verso un certo gruppo di persone. Io sono un tipo di individuo che va dritto al punto e opero secondo un codice etico del tipo tit-for-tat. Sono gentile con le persone finché non sono sgradevoli con me e poi smetto di essere gentile, e sono anche onesto con le persone finché non mentono, imbrogliano e rubano da me e allora il mio codice predefinito di comportamento civile è fuori dalla finestra e mentirò, imbroglierò e ruberò in cambio e non mostrerò alcuna pietà o ritegno. Può essere un modo semplicistico di vedere il mondo, ma sono testardo e non perdono.

Ma a te, grazie per il tuo aiuto. E se c'è qualcosa in cui posso aiutarti, chiedi pure. Non che io dia per scontato che tu stia cercando aiuto per qualcosa in cui io possa aiutarti.

 
zortharg:

Beh, dopo aver scritto un po' di codice sembra davvero molto difficile per me evitare di salvare i risultati aritmetici con datetime come input in ints. Ma static_cast<long> in teoria funzionerebbe come in C++? Non vedo alcuna menzione nei documenti.

Oh, a proposito, il fuso orario. È UTC?


E' indipendente dal fuso orario. . quanti secondi ci sono tra le 14:00 e le 15:00? Non è necessario conoscere il fuso orario per rispondere 3600 . . . se ti aiuta basta assumere che l'ora di inizio, mezzanotte del 1° gennaio 1970 e l'ora che ti interessa sono entrambi nello stesso fuso orario.
 

EDIT: Ops, come è stato sottolineato, non esiste un fuso orario specifico per datetime. Dipende da dove l'hai ottenuto! (questo provoca complicazioni inutili, a differenza di UnixTime su cui è stato in definitiva basato!)

Il fuso orario per datetime (secondi dopo il 1970) è basato su UTC. Proprio come il tempo di Unix. È UnixTime - tempo unix a 64 bit.

Unile vero UTC, Unix time ignora i secondi bisestili (vedi 1° paragrafo) e così l'aritmetica modulo funziona per i minuti e le ore.

datetime - datetime = long (secondi di durata) - anche se per quanto riguarda il trading sarà un int praticamente la maggior parte delle volte che posso prevedere!

datetime +/- seconds(long) = datetime(another date)

datetime +/- seconds(int) = datetime(un'altra data)