Mai jos am implementat o parte din Metoda Tunel.Teoria metodei
O sa explic si linile de cod pentru a intelege incepatorii si sa fie si ei capabili sa faca experti si indicatori pe viitor.Eu acum m-am apucat de invatat mql
In prima parte a programului am declarat variabilele programului.
extern string ExpertName = "Tunnel Method"; //Numele Expertului
extern int tu1_period =144; //Perioada Ema-ului care alcatuieste tunelul
extern int tu2_period=169; //Perioada Ema-ului care alcatuieste tunelul
extern int cu_period=12; //Perioada Ema-ului care taine sau nu tunelul
extern int StopLoss= 50; //Valoarea StopLoss-ului
extern int TakeProfit=0; //Valoarea TakeProfit-ului
extern double lot=1; //Marimea lotului
extern int Cu_method=3; //0 MODE_SMA Simple moving average,
extern int Tu1_method=3; //1 MODE_EMA Exponential moving average,
extern int Tu2_method=3; //2 MODE_SMMA Smoothed moving average,
//3 MODE_LWMA Linear weighted moving average.
extern int Sx=0; //Sx/Lxpoate fi 0 sau 1 , Cand este 0 Nu exista StopLoss si nici TakeProfit
extern int Lx=0; //Daca se pune alta valoare pretul o sa scada/creasca proportional cu valoarea aleasa.Nerecomandat!
Mai jos am pus conditile sa se numere barele si sa se vada daca sunt bani in cont.Daca nu erau bani in cont si marginea nu era suficient de mare pentru a cumpara un lot programul intorcea o eroare.
if(Bars<169)
{ //Numara barele si daca sunt mai putin decat numarul suficient
Print("Bare mai putine de 169" ); //Afiseaza mesajul daca sunt mai putine
return(0);
}
if(AccountFreeMargin()<(1*lot)) //Daca marginea disponibila este mai mica decat marimea lui lot
{
Print("We have no money. Free Margin = ", AccountFreeMargin()); //AccountFreeMargin returneaza marginea disponibila din cont
return(0);
}
Am declarat indicatorii si am definit ticket
int ticket;
double Tu1=iMA(NULL,0,tu1_period,0,Tu1_method,PRICE_CLOSE,0);
double Tu2=iMA(NULL,0,tu2_period,0,Tu2_method,PRICE_CLOSE,0);
double Cu=iMA(NULL,0,cu_period,0,Cu_method ,PRICE_CLOSE,0);
Mai jos urmeaza deschiderea ordinelor.Sunt 4 variante in care se pot deschide loturi deoarece se pot intersecta intre ele si linile care formeaza tunelul.
La inceput am pus conditia "OrdersTotal<1".Daca nu puneam conditia se deschideu ordine la fiecare miscare a pretului pana cand nu se mai putea.
In ultima parte am pus conditia ca daca sunt ordine se verifica care este tipul ordinului si daca se verifica conditile inchide ordinul.
else //daca am deja order
{
if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==false) return(0); //error!
int mode=OrderType(); //am selectat orderul, vad daca tre sa il inchid
if (mode==OP_BUY && ((Tu1>Tu2) && (Cu<Tu2))|| ((Tu1<Tu2) && (Cu<Tu1)))
OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua);
if (mode==OP_SELL && ((Tu1>Tu2)&& (Cu>Tu1))|| (Tu1<Tu2)&&(Cu>Tu2))
OrderClose(OrderTicket(),OrderLots(),Ask,3,Orange);
}
Testat pe la 1 ianuarie 2008 pana in prezent strategia da un randament de ~70-90% fara sa fie optimizata.
Am atasat mai jos codul sursei.
In versiunea a 2a a indicatorului o sa contina optimizarea lotului.[Cea de sus tranzactioneaza cu loturi standart [1 lot]
O sa incerc sa reduc din semnalele false.Strategia da semnale false cand piata merge in range. deoarece linile care formeaza tunelui ajung aproape paralele la axa timpului.
Daca pun StopLoss cand se atinge se deschide alt ordin.
Primul ordin se deschide cand este atasat EA-ul deoarece conditile sunt indeplinite.Ar fi normal sa intre dupa ce media mobila trece deasupra sau dedesuptul tunelului.
Pentru a mari profitul o sa se inchida ordinele pe limitele fibo.
P.S: Acesta este numai un exemplu pentru a deprinde abilitati in mql cei care au nevoie.
Nici un utilizator înregistrat nu vede această pagină.
Informații Importante
Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.
Mai jos am implementat o parte din Metoda Tunel.Teoria metodei
O sa explic si linile de cod pentru a intelege incepatorii si sa fie si ei capabili sa faca experti si indicatori pe viitor.Eu acum m-am apucat de invatat mql
In prima parte a programului am declarat variabilele programului.
Mai jos am pus conditile sa se numere barele si sa se vada daca sunt bani in cont.Daca nu erau bani in cont si marginea nu era suficient de mare pentru a cumpara un lot programul intorcea o eroare.
if(Bars<169) { //Numara barele si daca sunt mai putin decat numarul suficient Print("Bare mai putine de 169" ); //Afiseaza mesajul daca sunt mai putine return(0); } if(AccountFreeMargin()<(1*lot)) //Daca marginea disponibila este mai mica decat marimea lui lot { Print("We have no money. Free Margin = ", AccountFreeMargin()); //AccountFreeMargin returneaza marginea disponibila din cont return(0); }Am declarat indicatorii si am definit ticketMai jos urmeaza deschiderea ordinelor.Sunt 4 variante in care se pot deschide loturi deoarece se pot intersecta intre ele si linile care formeaza tunelul.La inceput am pus conditia "OrdersTotal<1".Daca nu puneam conditia se deschideu ordine la fiecare miscare a pretului pana cand nu se mai putea.
{ if((Tu1>Tu2) && (Cu>Tu1)) { ticket=OrderSend(Symbol(), OP_BUY,lot,Ask ,3,Sx*(Ask-StopLoss*Point),Lx*(Ask+TakeProfit*Point),ExpertName,0,0,Green); return(0); } if((Tu1<Tu2) && (Cu>Tu2)) { ticket=OrderSend(Symbol(), OP_BUY,lot,Ask ,3,Sx*(Ask-StopLoss*Point),Lx*(Ask+TakeProfit*Point),ExpertName,0,0,Green); return(0); } //Ordine Short if((Tu1>Tu2) && (Cu<Tu2)) { ticket=OrderSend(Symbol(), OP_SELL,lot,Bid,3,Sx*(Bid+StopLoss*Point),Lx*(Bid-TakeProfit*Point),ExpertName,0,0,Red); return(0); } if((Tu1<Tu2) && (Cu<Tu1)) { ticket=OrderSend(Symbol() ,OP_SELL,lot,Bid,3,Sx*(Bid+StopLoss*Point),Lx*(Bid-TakeProfit*Point),ExpertName,0,0,Red); return(0); } }In ultima parte am pus conditia ca daca sunt ordine se verifica care este tipul ordinului si daca se verifica conditile inchide ordinul.else //daca am deja order { if (OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==false) return(0); //error! int mode=OrderType(); //am selectat orderul, vad daca tre sa il inchid if (mode==OP_BUY && ((Tu1>Tu2) && (Cu<Tu2))|| ((Tu1<Tu2) && (Cu<Tu1))) OrderClose(OrderTicket(),OrderLots(),Bid,3,Aqua); if (mode==OP_SELL && ((Tu1>Tu2)&& (Cu>Tu1))|| (Tu1<Tu2)&&(Cu>Tu2)) OrderClose(OrderTicket(),OrderLots(),Ask,3,Orange); }Testat pe la 1 ianuarie 2008 pana in prezent strategia da un randament de ~70-90% fara sa fie optimizata.
Am atasat mai jos codul sursei.
In versiunea a 2a a indicatorului o sa contina optimizarea lotului.[Cea de sus tranzactioneaza cu loturi standart [1 lot]
O sa incerc sa reduc din semnalele false.Strategia da semnale false cand piata merge in range. deoarece linile care formeaza tunelui ajung aproape paralele la axa timpului.
Daca pun StopLoss cand se atinge se deschide alt ordin.
Primul ordin se deschide cand este atasat EA-ul deoarece conditile sunt indeplinite.Ar fi normal sa intre dupa ce media mobila trece deasupra sau dedesuptul tunelului.
Pentru a mari profitul o sa se inchida ordinele pe limitele fibo.
P.S: Acesta este numai un exemplu pentru a deprinde abilitati in mql cei care au nevoie.
Tunnel_build1.mq4
Editat de Mangusta