Back to the index page  
  FAQ   Cerca   Lista utenti   Gruppi   Registrati   Profilo   Messaggi privati   Log in 
Guida al linguaggio MetaTrader 4
Vai a 1, 2, 3  Successivo
 
Nuovo argomento   Rispondi    Indice del forum » Metatrader - Expert Advisor - MQL Precedente :: Successivo  
Ads
 Inviato: Gio Dic 14, 2017 5:34 am  
Messaggio
  Ads




Guida al linguaggio MetaTrader 4
 MessaggioInviato: Mer Mag 23, 2007 10:11 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Eccomi qua, dopo tanto tempo che me lo ripropongo, ad imparare questo linguaggio per costruire indicatori, expert advisor e script per piattaforma meta trader.

Cercherò di portare avanti il topic buttando giù qualche appunto sulle cose che ritengo più importanti mentre cerco di imparare qualcosa, come sempre se c'è qualche punto da approfondire o da chiarire non esitate a postare.

Per prima cosa come procurarsi il software necessario:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



cliccate sul link e scaricate meta trader 4 client terminal, installate e avrete già a disposizione la piattaforma metatrader con un demo account.

Fino a qui nulla di nuovo, adesso andate sul vostro menu cliccate su:

start -> programmi -> meta trader 4 -> meta editor

Vi si aprirà un editor di testo che ci permetterà di sviluppare e compilare i nostri programmi.

A seconda di quello che state costruendo salverete i vostri file nella cartella scripts, indicators, experts ecc...

I file che creerete dovranno essere salvati con estensione *.mq4.
Una volta terminato il file dovrà essere compilato(tasto F5) per generare il codice in grado di aprire ordini, chiuderli e molto altro. Se il file non contiene errori di sintassi o di altro genere verrà creato un file con estensione *.ex4 che potrà essere utilizzato nella piattaforma...
Profilo Invia messaggio privato Invia e-mail HomePage
Sintassi
 MessaggioInviato: Mer Mag 23, 2007 10:30 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Il linguaggio mql4 è molto simile al linguaggio C, chi ha già avuto esperienze di programmazione non avrà difficoltà ad adattarsi.

mql4 è un linguaggio case sensitive:

Codice:
ciao Ciao CIAO


sono quindi tre cose differenti.

Le variabili devono iniziare per forza con una lettera o con l'underscore _

si può utilizzare la spaziatura che si preferisce:

Codice:
ciao, Ciao


oppure

Codice:
ciao    ,           Ciao


i commenti sono in stile c:

Codice:
//commento su una riga


Codice:
/*
commento
multiriga
*/


Le istruzioni terminano con ;

PAROLE RISERVATE:

Tipi di dati:

Codice:
bool
color
datetime
double
int
string
void



Classi di memoria:

Codice:
extern
static


Operatori:

Codice:
break
case
continue
default
else
for
if
return
switch
while


Operatori booleani:

Codice:
true
false


Non vi preoccupate poi vedremo tutto più in dettaglio


L'ultima modifica di carlo10 il Mer Mag 23, 2007 11:07 pm, modificato 1 volta
Profilo Invia messaggio privato Invia e-mail HomePage
Tipi di dati
 MessaggioInviato: Mer Mag 23, 2007 11:06 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Le variabili sono dei contenitori che servono ad immagazzinare dei valori, il tipo di questo valore è definito nella dichiarazione della variabile.

come abbiamo visto prima il tipo può essere:
Codice:

int -> Numero Intero
bool -> valore booleano (true, false)
char -> singolo carattere
string -> stringa di caratteri
double -> numero con la virgola
color -> colore
datetime -> data ora


Gli int sono compresi nell'intervallo -2147483648 e +2147483647, ecco una possibile dichiarazione:

Codice:
int carlo = 10;


Si può usare anche la notazione esadecimale ma non ci interessa.

Il tipo bool può assumere due valori, true e false è molto usato quando si devono prendere delle decisioni al verificarsi di certe condizioni:

Codice:
bool a = true;


Character è un singolo carattere, possono essere utilizzati i valori ASCII, deve essere racchiuso tra apici singoli:

Codice:
char b = 'a';


Il back slash è un carattere speciale, per memorizzarlo bisogna utliizzare il seguente trucchetto:

Codice:
char c= '\\';


string è come spesso accade un array(vedremo in seguito in caso serva specificare) di caratteri, è racchiuso tra doppi apici:

Codice:
string a = "Squalo Finanza";


double sono i numeri con la virgola, il separatore è il punto, può essere anche il risultato di una operazione ad esempio la divisione:

Codice:
double d = 10.10;


color è naturalmente un colore, può essere espresso atttraverso il nome, la scala RGB o un numero intero...Visto che è molto semplice non vedo perchè non utilizzare il nome:

Codice:
color c = Red;


Ecco i principali: Red, Green, Blue, Orange, Gold, Aqua ecc...

datetime è un tipo di dato che serve a indicare data e ora, è racchiuso tra signoli apici e preceduto dalla parola chiave D:

Codice:
datetime dt = D'2007.5.23 23:00:00';
Profilo Invia messaggio privato Invia e-mail HomePage
Operatori
 MessaggioInviato: Mer Mag 23, 2007 11:27 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Gli operatori sono i classici operatori che trovate in tutti i linguaggi, elenchiamoli rapidamente:

Codice:
+
-
*
/ divisione (attenzione a memorizzare in un double)
% resto
a++ equavale ad a=a+1
a-- equivale ad a=a-1
= assegnazione


Non guardiamo per il momento le operazioni bit a bit che potrebbero risultare poco utili.

Ecco invece gli operatori per il confronto:

Codice:
<
>
==
<=
>=
!= diverso
&& and
|| or
! not


Per le espressioni complesse valgono le solite regole matematiche di precedenza degli operatori, è bene quindi aiutarsi con le parentesi tonde per far eseguire le operazioni nell'ordine voluto.
Profilo Invia messaggio privato Invia e-mail HomePage
selezione
 MessaggioInviato: Mer Mag 23, 2007 11:37 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Prima nelle parole riservate avete visto le seguenti: if, while e for.
Ora spiego come si usano.

if vuol dire se ed è utilizzato per eseguire delle istruzioni solo nel caso che si verifichino o meno certe condizioni:

Codice:
int a=0;
if (a==1)
  Print("then");
else
  Print("else");
Print(" fine if");


Print è una funzione che serve per stampare a video il contenuto dentro alle parentesi tonde.
Il codice sopra stamperà else fine if perchè la condizione a==1 non è vera quindi andrà a stampare il contenuto del blocco else, se la condizione fosse stata a!=1 allora avrebbe stampato then fine if.

Per eseguire più istruzioni in un blocco bisogna racchiuderele tra parentesi graffe:

Codice:
int a = 0;
if (a==1)
{
  a++;
  Print(a);
}
else
{
  a--;
  Print(a);
}
//fuori dall'if, viene eseguito in tutti i casi


Lo switch

Lo switch è sempre una forma di selezione che permette di scegliere,
a differenza dell'if classico,tra più di 2 opzioni:

Codice:
switch(x)
case a: Print("a"); break;
case b: Print("b"); break;
case c: Print("c"); break;
default: Print("nessuna delle precedenti"); break;


In pratica la parte di codice che viene eseguita è quella che corrisponde al valore
della variabile x. Se x non vale a b o c allora verrà eseguita la parte default.
Profilo Invia messaggio privato Invia e-mail HomePage
cicli
 MessaggioInviato: Ven Giu 01, 2007 4:27 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Cilco for

il ciclo for serve per far ripetere un numero determinato di volte la parte di
codice racchiusa in esso:

Codice:
for(int i=0;i<=10;i++)
  Print(i);


Queste due righe di codice stamperanno a video 0 1 2 3 4 5 6 7 8 9 10..
La sintassi in italiano equivale a per i(che vale zero) fino a i che vale <=10
esegui queste istruzioni.
Ogni volta che vengono eseguite le istruzioni i viene incrementato di 1(i++),
il ciclo continua finchè la condizione i<=10 non è più verificata.
Per far eseguire più istruzioni all'interno del ciclo bisogna racchiuderle tra
parentesi graffe:

Codice:
for(int i=0;i<=10;i++)
{
  Print(i);
  Print("Dentro al ciclo");
}
Print ("Fuori");


Il codice stamperà 0Dentro al ciclo1Dentro al ciclo2Dentro al ciclo3...10Dentro al ciclo
Fuori.

Ciclo While

il ciclo while serve per far eseguire un parte di codice finchè non siverifica una precisa condizione:

Codice:
int i=0;
while(i<=10)
{
  Print(i);
  Print("Dentro al ciclo");
}
Print ("Fuori");


Questo pezzo di codice darà lo stesso output del codice precedentemente eseguito con il ciclo for.
La sintassi è quando la condizione tra parentesi è vera esegui le istruzioni dentro al
ciclo altrimenti non entrare nel ciclo.
Profilo Invia messaggio privato Invia e-mail HomePage
Funzioni
 MessaggioInviato: Ven Giu 01, 2007 4:31 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Funzioni

Le funzioni sono delle parti di codice che possono essere richiamate scrivendo il nome
della funzione e passandogli gli opportuni parametri.
Print è una funzione che stampa a video il parametro trovato all'interno delle
parentesi tonde.

Le funzioni hanno la seguente sintassi:

Codice:
int raddoppia (int a)
{
  return(a*2);
}


La semplicissima funzione qui sopra ritorna il doppio del numero che gli viene passato
come parametro.
La chiamata a questa funzione viene fatta dal codice seguente:

Codice:
Print(raddoppia(2));


raddoppia(2) serve per chiamare la funzione mentre il Print serve per stampare il
risultato ritornato a video.

Andiamo ad analizzare nuovamente l'intestazione:

Codice:
int raddoppia (int a)


il primo int serve a specificare il tipo di parametro che verrà restituito, se non
si desidera restituire nulla bastera mettere void al posto di int.
raddoppia è il nome della funzione e serve per richiamarla.
All'interno delle parentesi tonde vengono invece inseriti tutti i parametri che devono
essere passati alla funzione, ho usato solo int a ma il numero di parametri poteva essere
maggiore e il tipo diverso.
E' molto importante sapere che quando viene richiamata la funzione ad essa devono essere
passati tutti i parametri nell'ordine e del tipo richiesto altrimenti significa che si
sta richiamando un'altra funzione e non quella desiderata.
i parametri devono essere separati da virgola:

Codice:
int moltiplica (int a,int b)
{
  return(a*b);
}


Esistono delle funzioni che devono essere sempre create per fare in modo che i nostri
codi ci meta trader funzionino cirrettamente, sono le funzioni:


Codice:
init()
deinit()
start()


init serve per inizializzare le variabili principali del programma e si deve trovare
all'inizio dei nostri codici.

deinit serve quando si chiude il grafico o la piattaforma e quindi a disattivare il
nostro codice.

start contiene invece tutto ciò che verrà eseguito dal nostro codice ed è la parte principale su cui si dovrà lavorare.
Profilo Invia messaggio privato Invia e-mail HomePage
Visibilità variabili
 MessaggioInviato: Ven Giu 01, 2007 4:32 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Variabili

Le variabili possono avere dei campi di visibilità differenti, le variabili dichiarate
all'esterno di funzioni e di blocchi di codice hanno visibilità globale nel senso che
vengono viste anche dalle funzioni e da tutti i blocchi di codice.
La stessa cosa non vale per le variabili locali cioè quelle duchiarate all'interno
di funzioni che hanno visibilità solo all'interno della funzione stessa.

Le variabili diciarate extern hanno invece la particolarità di poter essere modificate
nella piattaforma meta trader, basta accedere nella pagina delle proprietà
dell'indicatore scelto.
Profilo Invia messaggio privato Invia e-mail HomePage
Preprocessore
 MessaggioInviato: Ven Giu 01, 2007 5:07 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

Direttive al Preprocessore

Prima di inziare il programma possono essere usate le seguenti dichiarazioni:

Codice:
#define
#property
#import
#include


Define serve per dichiarare una costante cioè una variabile che non può essere modificata
ma che può essere utilizzata all'interno del programma:

Codice:
#define costante 100


costante avrà quindi il valore 100 che non potrà essere modificato.

property serve per aggiungere il copyright, il link, per impostare la richiesta di conferma
o meno nell'apertura di ordini, analizzeremo magari in seguito quali sono
le proprietà che ci potranno servire:

Codice:
#property link http://forex.forumup.it


import e include sono invece molto simili, servono a indicare il percorso di altri
file con programmi e funzioni meta trader in modo da poter riutilizzare gli spezzoni
di codice semplicemente richiamando la funzione.

Codice:
#include C:/MetaTrader....


Codice:
#import "mioea.ex4"


La differenza tra i due è che con import si possono imporare solo file con estensione
ex4 o dll, se si importa un file dll si dovrà ridichiarare subito sotto l'import
la funzione che si intende utilizzare.
Per far capire al preprocessore che si è conclusa la sezione delle import bisognerà
terminare con un import seguito da spazi vuoti:

Codice:
#import     
Profilo Invia messaggio privato Invia e-mail HomePage
 MessaggioInviato: Ven Giu 01, 2007 5:11 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

La veloce carrellata degli argomenti è terminata...quello che bisogna fare ora è cominciare a metterci le mani...io provo a vedere il ts proposto in questo topic:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



Questo topic rimane aperto per approfondimenti sul linguaggio, domande e tutto il resto...

Tenete presente che per imparare sul serio bisogna provare a scrivere il codice...è sempre molto utile osservare il codice dei ts presenti sul vostro meta trader per vedere come sono fatti....

inoltre nel meta editor potete trovare tutta la documentazione necessaria con la spiegazione delle funzioni già disponibili...
Profilo Invia messaggio privato Invia e-mail HomePage
 MessaggioInviato: Sab Giu 09, 2007 7:45 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

ecco il forum internazionale di riferimento sull'argomento

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.

Profilo Invia messaggio privato Invia e-mail HomePage
 MessaggioInviato: Dom Lug 15, 2007 6:56 pm Rispondi citando  
Messaggio
  Frankalde
New Entry
New Entry

Registrato: 12/05/07 17:16
Messaggi: 2
Residenza: Brescia

carlo10 ha scritto:
La veloce carrellata degli argomenti è terminata...quello che bisogna fare ora è cominciare a metterci le mani...io provo a vedere il ts proposto in questo topic:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



Questo topic rimane aperto per approfondimenti sul linguaggio, domande e tutto il resto...

Tenete presente che per imparare sul serio bisogna provare a scrivere il codice...è sempre molto utile osservare il codice dei ts presenti sul vostro meta trader per vedere come sono fatti....

inoltre nel meta editor potete trovare tutta la documentazione necessaria con la spiegazione delle funzioni già disponibili...


Non sono un esperto del Forex nè della piattaforma Metatrader e spero di non essere fuori argomento: ho in pratica un piccolo problema per il quale chiedo cortesemente se qualcuno può darmi delle indicazioni risolutive.
Il problema consiste semplicemente nel sapere come fare a variare gli inputs (quelle che in linguaggio tecnico sono dette variabili esterne) di un EA: in pratica volendo, ad esempio, inserire uno stop loss diverso da quello di default si va a cambiare il valore corrispondente della variabile cliccando due volte col tasto sinistro del mouse e si inserisce il nuovo valore: questo è il procedimento che si segue con gli indicatori e funziona ma con gli EA, non funziona (la variazione che a prima vista sembra accettata viene subito dopo ignorata e la variabile torna ai valori iniziali nè si riesce a salvare il diverso settaggio) a meno che, e questo è il punto, non si abbia anche il codice sorgente cioè il file con estensione .MQ4: in questo caso si può variare il codice sorgente e si può conseguentemente riscrivere il corrispondente eseguibile. Chiedo pertanto se effettivamente le cose stanno nel modo che ho inteso oppure se c'è una modalità, da me non conosciuta, per apportare ad un EA di cui si ha solo l'eseguibile (estensione .ex4) ma non anche il codice sorgente (estensione .mq4) quel tipo di variazioni di cui ho dato un esempio (altri esempi potrebbero essere il trailing stop; la durata del periodo di contrattazione etc.)
Grazie
Frankalde

_________________
Frankalde
Profilo Invia messaggio privato
 MessaggioInviato: Lun Lug 16, 2007 8:39 am Rispondi citando  
Messaggio
  Ardat
Trader professionista
Trader professionista

Registrato: 02/06/06 10:55
Messaggi: 740

se l'Ea lo permette lo puoi cambiare semplicemente cliccando col destro sulla faccina o sul nome dell'ea e andare su proprietà! Se l'Ea è attivato sul grafico le impostazioni rimangono quelle che hai impostato altrimenti ogni volta tornano quelle preedefinite.

Per cambiare quelle predefinite devi avere per forza il sorgente!

Spero di esserti stato utile, perché non ho capito bene in realtà cosa chiedevi! Wink
Profilo Invia messaggio privato Invia e-mail
 MessaggioInviato: Lun Ott 22, 2007 6:06 pm Rispondi citando  
Messaggio
  carlo10
Site Admin
Site Admin

Registrato: 29/04/06 16:19
Messaggi: 5577
Residenza: Padova

ecco alcuni topic utili per i primi passi:

init, deinit e start:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



primo script:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



expert advisor:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



calcolo swap:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



magic id:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



come vengono calcolate le barre:

Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.

Profilo Invia messaggio privato Invia e-mail HomePage
Re: Guida al linguaggio MetaTrader 4
 MessaggioInviato: Dom Feb 10, 2008 5:28 pm Rispondi citando  
Messaggio
  massaro
New Entry
New Entry

Registrato: 04/02/08 18:53
Messaggi: 1

ciao mi Chiamo Salvatore ho letto un po di post e sto per modificare un ae, ho bisogno di capire come scrivere il codice per far si che man mano che aumenta il profitto, in automatico mi aumentano anche i lotti.
Attualmente i lotto impostati sono 4 con un margine di 10. 000$. Per ogni 10% di margine in più deve aumentare di 0,20 lotti, se puoi aiutarmi te ne saro' veramente grado.
Profilo Invia messaggio privato
Nuovo argomento   Rispondi    Indice del forum » Metatrader - Expert Advisor - MQL

Pagina 1 di 3
Tutti i fusi orari sono GMT + 2 ore
Vai a 1, 2, 3  Successivo

Mostra prima i messaggi di:

  

Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
c d
e

CI SIAMO TRASFERITI QUI: http://forum.forexup.biz





Powered by phpBB © 2001, 2002 phpBB Group phpbb.it
Macinscott 2 by Scott Stubblefield


Abuse - Segnalazione abuso - Utilizzando questo sito si accettano le norme di TOS & Privacy.
Powered by forumup.it forum gratis free, crea il tuo forum gratis free ora! Created by Hyarbor & Qooqoa
Confirmed

Page generation time: 7.048