Sono completamente perso

 

Voglio creare un "EA" come lo chiami tu. Anche se è divertente che tu continui a usarlo come acronimo, per quanto mi riguarda, sta per "algoritmo evolutivo" che è esattamente ciò che il mio metodo è in realtà. Se funziona. Cosa che fa, se lo spread è abbastanza basso. E' sul filo del rasoio.

Comunque, ho esperienza di programmazione. E da quello che ho visto, MQL4 sembra più o meno uguale al C++. Ma mi mancano alcuni dettagli cruciali. Conosco già le variabili e le costanti e molte altre cose, ma ho bisogno di una sorta di modello di base da cui lavorare, e sono leggermente carente su alcune cose concettuali. Qualcuno può postare una sorta di pessimo esempio di programma di trading robot che sia semplice ma che abbia tutti gli elementi di cui ho bisogno e spiegare cosa fa ogni parte di esso e poi posso dire "aha, ecco come faccio quello che devo fare".

Fondamentalmente, vorrei che il mio programma fosse in grado di scaricare nella RAM del mio computer quanto segue (scaricando i dati sul mio computer attraverso la piattaforma di trading di valuta):

dati di massimo, minimo, apertura, chiusura per i prezzi di acquisto E di vendita (dato che il valore dello spread può variare) per qualche incremento di tempo che io specifichi all'interno del programma (se questo può essere fatto) incluso il più recente o appena viene completato (quindi ogni minuto, o ogni 5 minuti, o ogni 10 minuti, ecc, qualunque sia l'intervallo di tempo) o possibilmente ad ogni tick - ogni volta che il prezzo cambia - qualunque di questi possa essere fatto, vorrei anche essere in grado di avere una variabile che rappresenta la quantità di tempo dall'ultimo completato (quindi se è ogni 10 minuti, ci sarebbe una variabile che viene aggiornata ad ogni tick che conta fino a 10 minuti da 0, e quando arriva a 10 minuti, c'è un altro aggiornamento dei dati), Vorrei anche scaricare il valore totale del conto alla liquidazione, scaricare il numero totale di posizioni e la dimensione delle posizioni e il tipo di posizioni (per esempio USD/JPY è 10000 o 100000 DOLLARI di yen, ma EUR/USD è 10000 o 100000 EURO di dollari, ma il valore del mio conto sarà in dollari, quindi deve essere in grado di determinare la dimensione variabile del lotto di una posizione). Dai prezzi attuali di acquisto e vendita il programma potrebbe ovviamente semplicemente sottrarre l'uno dall'altro per ottenere il valore attuale dello spread.

Poi vorrei che il programma fosse in grado di eseguire le seguenti azioni (caricando i dati dal mio computer attraverso la piattaforma di trading delle valute)

comprare o vendere tramite ordini di mercato o ordini limite. Inoltre, per favore ditemi se inserisco un ordine limite ma il prezzo quando passa, se posso aspettarmi che mi dia il prezzo limite che ho inserito, o può essere meglio? Per esempio, supponiamo che il prezzo EUR/USD per l'acquisto sia 1,3500 e che io abbia un ordine limite per comprare a 1,3501, pagherò 1,3501 o 1,3500? Dovrei aspettarmi che il broker mi imbrogli lì? O è funzionalmente identico a mettere un ordine a mercato con l'eccezione che se il prezzo è 1,3502 o più nel momento in cui l'ordine entra nel sistema, non accadrà?

FINALMENTE, vorrei che il programma di esempio comportasse una chiamata di funzione a un'altra funzione. Una cosa semplice, che esegua un semplice calcolo di qualche tipo con i dati che gli vengono passati e che restituisca un valore - se sia il passaggio per valore che il passaggio per riferimento sono possibili come in MQL4, allora includete un esempio di ciascuno (commentato per mostrare cosa state facendo) nel programma di esempio.

Inoltre, per favore ditemi, se generalmente coinvolge più di un file (con l'estensione mql4?) come può essere in C++ o se è generalmente solo un singolo file mql4, ed è compilato dalla piattaforma di trading, o ho bisogno di un compilatore per esso e poi la piattaforma di trading utilizza il codice macchina o qualsiasi cosa sia generata dal compilatore?

Se qualcuno lo facesse, solo per fare un programma fittizio che contenesse tutti questi elementi, non solo sarebbe molto utile a me, ma sarebbe utile ad altri immagino. Grazie in anticipo per chiunque lo faccia.

 
Oh oh, meglio ancora, per la variabile che parte da 0 e conta fino a 10 minuti (o qualsiasi tempo usiate) - dovrebbe essere normalizzata - divisa per l'unità di tempo - in modo che sia un doppio che varia tra 0 e 1. Lo dico solo nel caso ci sia qualche problema con un fattore di scala. In questo modo, forse potrebbe essere applicato a un grafico a 5 minuti, o a un grafico a 10 minuti, o a un grafico a 1 minuto, ma qualunque sia l'unità di tempo, questa variabile è sempre tra 0 e 1.
 
Non c'è nessun programma che ti darà tutto quello che devi sapere su mql4 in un'istanza. Ti consiglio di guardare il code-base per esempio ea visto che hai già un po' di programmazione. Se non ti piace imparare guardando i codici ma piuttosto una spiegazione del linguaggio, allora controlla il libro mql4_book. Inoltre, ci sono le documentazioni per un facile riferimento.
 
Stavo chiedendo se qualcuno ne avrebbe scritto uno. Se conoscete il formato di base del linguaggio ci dovrebbero volere 5 minuti, circa il tempo che ci è voluto per leggere il mio post. Basta scrivere il programma, scrivere un esempio di ciascuna di queste cose e metterlo su. Ho guardato il libro di mql4, passa direttamente dallo spiegare cos'è una variabile a fare presupposti sulla mia conoscenza delle funzioni e mi viene sonno cercando di trovare il punto di transizione in cui si passa da molto più semplice di ciò di cui ho bisogno a più di quanto io sia preparato a comprendere. Sapete, non sto chiedendo che qualcuno scriva un "consigliere economico" per me, solo una cosa stupida che abbia dentro ogni istruzione che potrei voler usare. Qualcosa che scarichi nelle variabili del mio computer ogni informazione che potrei voler usare, e ogni istruzione che potrei voler inserire - che ora che ci penso, mi piacerebbe non solo essere ordini di acquisto e di vendita limite e di mercato, ma anche qualcosa che cancelli ogni ordine esistente, dopo tutto, non vorrei lasciare in giro gli ordini limite che non vengono eseguiti, non vorrei che il programma se ne dimentichi.
 
zortharg: Stavo chiedendo se qualcuno ne scrivesse uno. Se conoscete il formato base del linguaggio ci dovrebbero volere circa 5 minuti, dovrebbe volerci circa il tempo che ci è voluto per leggere il mio post. Basta scrivere il programma, scrivere un esempio di ciascuna di queste cose e metterlo su. Ho guardato il libro di mql4, passa direttamente dallo spiegare cos'è una variabile a fare presupposti sulla mia conoscenza delle funzioni e mi viene sonno cercando di trovare il punto di transizione in cui si passa da molto più semplice di ciò di cui ho bisogno a più di quanto io sia preparato a comprendere. Sapete, non sto chiedendo che qualcuno scriva un "consigliere economico" per me, solo una cosa stupida che abbia dentro ogni istruzione che potrei voler usare. Qualcosa che scarichi nelle variabili del mio computer ogni informazione che potrei voler usare, e ogni istruzione che potrei voler inserire - che ora che ci penso, mi piacerebbe non solo essere ordini di acquisto e di vendita limite e di mercato, ma anche qualcosa che cancelli ogni ordine esistente, dopo tutto, non vorrei lasciare gli ordini limite in sospeso nel caso non vengano eseguiti, non vorrei che il programma se ne dimentichi.

Credo che tu sia venuto nel posto sbagliato.

Noi non scriviamo codici per altre persone su questo forum.

Ci aspettiamo che tu scriva il tuo codice.

Se rimani bloccato, ti indichiamo la giusta direzione.

Se vuoi qualcuno che scriva codici per te allora vai qui.

Fanno mql4 e mql5.

 
zortharg:

[...]

Bene, questo fa un cambiamento rispetto alla discussione del grande aggiornamento di MT4 che è previsto tra pochi giorni.


Voglio creare un "EA" come lo chiami tu. Anche se è divertente che tu continui a usarlo come acronimo

Dipende dal tuo background. Nel bene e nel male, MT4 e MQL4 hanno attualmente un quasi-monopolio sul mercato mondiale del FX al dettaglio, e il termine "EA" ha un significato, come minimo, per centinaia di migliaia di persone.


E da quello che ho visto, MQL4 sembra più o meno uguale al C++

Ci sono effettivamente due versioni del linguaggio MQL4. Quella che è esistita negli ultimi 9 anni non ha classi o oggetti ed è quindi più simile al C che al C++. D'altra parte, non ha puntatori o allocazioni di memoria esplicite.

La nuova versione di MT4 e MQL4 - che sarà rilasciata dal vivo lunedì prossimo - aggiunge classi, ma di nuovo senza una vera allocazione e gestione esplicita della memoria. È discutibile se questo sia più simile al C++, o più simile a Javascript ma senza le funzioni di duck-typing e lambda ecc.


Fondamentalmente, vorrei che il mio programma fosse in grado di scaricare nella RAM del mio computer quanto segue [...]

Semplificando un po' le cose, la piattaforma lo fa per voi automaticamente, e non avete nessun mezzo semplice per sovrascrivere il suo comportamento standard. Scaricare qualsiasi dato esterno sui prezzi e poi manipolarlo all'interno di MQL4 - in particolare MQL4 tradizionale piuttosto che la nuova versione estesa - non è bello.

È possibile ottenere i prezzi attuali, e si può facilmente manipolare i prezzi storici per tutti i timeframe che la piattaforma prevede: M1, M5, M15 ecc. ma non M3, H2 ecc.


dati di massimo, minimo, apertura e chiusura per i prezzi di acquisto e di vendita (poiché il valore dello spread può variare)

Lo spread può effettivamente variare, ma una delle affascinanti idiosincrasie della piattaforma MT4 è che fornisce solo i prezzi bid storici. (I prezzi attuali e lo spread attuale sono ovviamente disponibili).


Vorrei anche scaricare il valore totale del conto alla liquidazione [...] il numero totale di posizioni e la dimensione [...] ma il valore del mio conto sarà in dollari

In effetti, la piattaforma trasmette costantemente questi dati. Non c'è alcun "download" esplicito di esso. Per esempio, il codice MQL4 ha costantemente accesso al capitale corrente del conto tramite la funzione AccountEquity(). Le posizioni aperte sono automaticamente riportate nella valuta di deposito.


Per esempio, supponiamo che il prezzo di acquisto di EUR/USD sia 1,3500 e che io abbia un ordine limite di acquisto a 1,3501, pagherò 1,3501 o 1,3500?

Dipende dal broker ma, nel complesso, la piattaforma/broker semplicemente non accetterà un ordine limite a o oltre l'attuale BBO. Non riesco a pensare immediatamente a un'eccezione a questo.


se generalmente coinvolge più di un file reale (con l'estensione mql4?) come può essere in C++ o se è generalmente solo un singolo file mql4

In generale, un progetto può consistere in un solo file .mq4, ma ci possono essere più file #inclusi .mqh. Pertanto, è possibile avere librerie di codice comuni e riutilizzarle tra i progetti. Quello che non si può fare è avere più file .mq4 che esistono in pari passu, cioè che sono compilati insieme come parte dello stesso progetto. Nonostante le origini di MQL4 in C, la struttura di un tipico grande progetto è diversa: un file .mq4, più una o più librerie di vario tipo (precompilate o #incluse).


Poi la piattaforma di trading usa il codice macchina o quello che viene generato dal compilatore

Il compilatore genera una sorta di byte-code/p-code/qualunque cosa vogliate chiamare piuttosto che codice macchina. Puoi compilare i file .mq4 esplicitamente, oppure puoi metterli nella cartella richiesta del software e saranno compilati automaticamente e resi disponibili per l'uso al prossimo avvio.


Se qualcuno lo facesse, solo per fare un programma fittizio che contenesse tutti questi elementi, non solo sarebbe molto utile a me, ma sarebbe utile ad altri, immagino

Non è un buon momento. Tutti su questo forum sono troppo occupati a discutere del primo aggiornamento veramente significativo di MQL4 in 9 anni.

 
zortharg: Stavo chiedendo se qualcuno ne avrebbe scritto uno.
Avete solo tre scelte: Cercarlo,imparare a codificarlo o pagare qualcuno. Non lo scriveremo per te. Siamo disposti ad AIUTARVI quando posterete il vostro tentativo (usando SRC) e la natura del vostro problema.
 

Non stavo chiedendo a nessuno di produrre qualcosa di valore commerciale per me. Non sto chiedendo a qualcuno di "codificare il mio metodo PER me", WHRoeder. Ho solo bisogno di un punto di partenza. Potrei essere in grado di capire qualcosa dal link che hai messo sotto "ricerca", anche se vorrei davvero un "questo è ciò che serve". Non so come dovrebbe essere il programma. Non so cosa è strettamente necessario che ci sia. Se provo a farlo da solo di punto in bianco senza alcun punto di riferimento, otterrò solo errori di compilazione perché non saprò nemmeno cosa manca. E se faccio qualcosa che dovrebbe funzionare, lo inizializzerò male e non saprò nemmeno se l'ho fatto bene. Ok, che ne dite di questo. Un esempio semplice. Qualcosa che perderebbe i tuoi soldi se lo facessi nella vita reale: un expert advisor che mantiene una posizione che è daringness*(il valore del tuo conto)*(la differenza tra il prezzo ora e il prezzo 1 unità di tempo fa)/X, e X inizia a 1 ma ogni unità di tempo, X viene aggiornato per essere X=.9*X+.1*(prezzo ora-prezzo 1 unità di tempo fa)^2, e daringness è un parametro specificato dall'utente. E per determinare quante comprare o vendere, deve determinare anche quante posizioni possiede già. Quindi è solo un programma stupido, ma ha più o meno tutti gli elementi di cui avrei bisogno per lavorare come punto di partenza.

gchrmt4 grazie. Hai risposto a molte delle mie domande. Ma quando dici "puoi facilmente manipolare i prezzi storici per tutti i timeframe per i quali la piattaforma si rivolge", come faccio? C'è una funzione simile a AccountEquity() che restituisce un prezzo in un dato momento, e tu gli dai le unità di tempo fa e se vuoi aprire basso alto chiudere e che tipo di unità di tempo usa? Il tipo di unità di tempo è determinato dal tipo di grafico a cui lo si applica? Cioè, se lo applichi a un grafico a 1 minuto, 1 unità di tempo fa si riferisce a 1 minuto fa, ma se lo applichi a un grafico a 5 minuti, 1 unità di tempo fa si riferisce a 5 minuti fa, o il passo temporale è hard coded nel programma stesso piuttosto che essere applicato a un grafico? E lo spread attuale, come faccio ad accedervi? Dite che queste cose sono "in streaming" e facilmente accessibili, ma come vi si accede?

Grazie per qualsiasi aiuto che deciderai di dare.

 
zortharg:
C'è una funzione simile a AccountEquity() che restituisce un prezzo in un dato momento, e voi gli date le unità di tempo fa e se volete open low high close e che tipo di unità di tempo usa? Il tipo di unità di tempo è determinato dal tipo di grafico a cui lo si applica? Cioè, se lo applichi a un grafico a 1 minuto, 1 unità di tempo fa si riferisce a 1 minuto fa, ma se lo applichi a un grafico a 5 minuti, 1 unità di tempo fa si riferisce a 5 minuti fa, o il passo temporale è hard coded nel programma stesso piuttosto che essere applicato a un grafico? E lo spread corrente, come faccio ad accedervi? Dite che queste cose sono "in streaming" e facilmente accessibili, ma come vi si accede?

Grazie per qualsiasi aiuto che sceglierete di dare.

C'è un'intera famiglia di funzioni di serie temporali. Per esempio, iHigh("USDJPY", PERIOD_H1, 2) vi darà il massimo della barra H1 di USDJPY 2 barre indietro (dove la barra in corso è la #0). Ci sono funzioni per convertire i tempi in indici di barre.

Lo spread attuale è disponibile in diversi modi. Il più semplice è Ask - Bid (che vi dà lo spread per il simbolo sul cui grafico il vostro codice sta girando). Lo spread per un simbolo diverso dal grafico corrente è disponibile attraverso percorsi diversi, ed espresso in termini diversi, come MarketInfo("symbol", MODE_ASK) - MarketInfo("symbol", MODE_BID), o MarketInfo("symbol", MODE_SPREAD)

 

@zortharg

C'è una cosa chiamata documentazione qui (parzialmente deprecata): docs.mql4.com/

e qui (presto in arrivo, parzialmente non applicabile): mql5.com/it/docs


Lì trovi tutto quello che hai sempre voluto sapere; inoltre ci sono esempi nel terminale stesso. Esempi di script, expert advisor e indicatori. E puoi anche importare le DLL, per realizzare cose che sono al di là di MQL.

Se riesci a prenderlo da lì, sei pronto, e se no, beh...


 

Capisco la tua richiesta, un esempio di lavoro da cui partire è molto utile

https://www.mql5.com/en/code

Anche cercando su Google si possono trovare fonti gratuite di consulenti esperti da cui imparare

cerca del codice che faccia compiti semplici, raggruppali in funzioni e cerca di mantenere il tuo codice semplice e leggibile

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
Motivazione: