Metoda Tunel -Implementare, Primul meu expert. |
![]() ![]() |
Metoda Tunel -Implementare, Primul meu expert. |
Jul 5 2008, 11:45 PM
Post
#1
|
|
|
Group: Members Posts: 89 Joined: 15-December 06 From: bucuresti Member No.: 1,326 |
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. COD 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. COD 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 COD 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. COD { 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. COD 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. This post has been edited by Mangusta: Jul 5 2008, 11:53 PM
Attached File(s)
|
|
|
|
Jul 7 2008, 08:31 AM
Post
#2
|
|
|
Group: Moderators Posts: 761 Joined: 23-October 06 From: ChiangMai Thailand Member No.: 1,272 |
Un frumos start in MQL
Nu ma pot abtine insa sa comentez ca implementarea metodei este "un pic" gresita. Metoda teoretica tranzactioneza doar la cross-uri. Metoda ta (cea implementata) tranzactioneaza ori de cate ori linia aia de taiere (cut) este deasupra (buy) sau dedesupt (sell). In acest fel tu esti tot timpul in tranzactie, long sau short, departe de ceea ce urmareste metoda teoretica. De asta si iti lua tranzactii gramada si a fost nevoie sa testezi OrdersTotal(). Ca sa faci implementarea sa reflecte strategia teoretica, trebuie sa testezi atat bara curenta, cat si bara precedenta. Si deschizi long numai daca cut-ul a fost dedesupt pe bara precednta, si este deasupra pe bara curenta (s-a produs cross). De asemenea deschizi short... invers. In acest fel nu esti tot timpul in tranzactie. Asa cum este implementata acum, sa presupunem ca ai luat un long si ala a atins TP sau SL inainte ca tunelul sa fie intersectat, in acest caz orderul e inchis, OrdersTotal() o sa intoarca zero, drept urmare, vei deschide un alt long (ca cut-ul e tot deasupra) imediat, practic ai pierdut un spread degeaba, ca sa nu mai zic ca acest al doilea long este aproape intotdeauna perdant, in special dupa ce ai dat in TP cu primul (si in consecinta ai deschis al doilea exact in punctul de maxim al cursului). De aia iti si apar dintii aia de fierastrau pe equity chart, multe tranzactii "bune" sunt urmate fiecare de cele mai multe ori de cate o tranzactie proasta. ar trebui sa faci ceva de genul double Tu11=iMA(NULL,0,tu1_period,0,Tu1_method,PRICE_CLOSE,0); double Tu21=iMA(NULL,0,tu2_period,0,Tu2_method,PRICE_CLOSE,0); double Cu1=iMA(NULL,0,cu_period,0,Cu_method ,PRICE_CLOSE,0); double Tu12=iMA(NULL,0,tu1_period,0,Tu1_method,PRICE_CLOSE,1); double Tu22=iMA(NULL,0,tu2_period,0,Tu2_method,PRICE_CLOSE,1); double Cu2=iMA(NULL,0,cu_period,0,Cu_method ,PRICE_CLOSE,1); iar la teste: if ((Tu11>Tu21) && (Cu1>Tu11) && (Tu12>Tu22) && (Cu2<Tu12)) {.... etc... nu stiu daca am pus exact testul, ca nu mi-am batut capul sa vad ce faci cu variabilele (voi reveni daca am timp azi, sunt f bizi la job, profit de pauza de masa acum), dar ai prins ideea, cut-ul pe bara precedenta e dedesupt, cel pe bara curenta e deasupra. Asta inseamna ca s-a produs un cross, si atunci intri long. Spor! -------------------- There are no shortcuts in forex. You didn't learn to walk without first learning how to crawl.
|
|
|
|
Jul 8 2008, 09:29 AM
Post
#3
|
|
|
Group: Members Posts: 89 Joined: 15-December 06 From: bucuresti Member No.: 1,326 |
@Tradelover
Multumesc mult ca ai folosit o parte din pauza de masa pentru a-mi raspunde mie la topic. Am citit de mai multe ori si nu am inteles partea cu barile. Ce rol are ce-a dea doua serie de MA-uri? |
|
|
|
Jul 8 2008, 11:15 AM
Post
#4
|
|
|
Group: Moderators Posts: 761 Joined: 23-October 06 From: ChiangMai Thailand Member No.: 1,272 |
Sper ca ironia nu a fost intentionata.
Ma rog, nu are a face... Tu trebuie sa tranzactionezi cand linia de Cut intersecteaza una din liniile de canal. Nu intram in detalii care si cum. Deci cand face cross. Deci cum testezi cross-ul??? Prin analogie cu semnalele electronice (este vreun electronist pe aici?) tu tranzactionezi "level triggered", pe cand metoda teoretica este "edge triggered". Tu tre sa gasesti edge-ul. Cum? Cum stii ca s-a produs un cross? Ceea ce faci tu acum, sa zicem la entry long: testezi daca linia de cut este desupra liniei de canal. Si daca da, intri long. Dar linia de cut continua sa fie deasupra liniei de canal, si dupa ce s-a inchis tranzactia, daca spre exemplu a dat in SL sau in TP.
canal1.JPG ( 11.68K )
Number of downloads: 68Spre exemplu ai deschis un buy in punctul a, pentru ca linia de cut (rosie) e deasupra liniei de canal (albastra), si ai pus un target oarecare. Cursul e negru, am figurat tranzactia ta, care da in target in punctul b. Dupa ce a dat in target, se inchide, si orderstotal() este zero. Drept urmare tu vei deschide o noua tranzactie, tot buy, pentru ca conditia pe care o teztezi tu (daca linia de cut este deasupra liniei de canal) este inca indeplinita. Acest al doilea buy este aproape intotdeauna perdant. Daca vei observa equity-graph-ul in urma rularii ST, vei vedea ca are pe el "dinti de fierastrau", aproape toate tranzactiile castigatoare sunt urmate de una perdanta. Se vede foarte bine daca setezi un target oarecare la expertul tau. De remarcat ca nu conteaza daca folosesti TP sau nu, cu TP se vede mai bine, dar problema exista si cand nu folosesti TP, deoarece orderele se pot inchide si la intersectia liniei de cut cu cursul. O modificare mica a desenului de mai sus:
canal2.JPG ( 12.69K )
Number of downloads: 46Acum intelegi? Prima intrare e buna, iese castigatoare. A doua nu mai trebuie sa o iei, pana nu se produce cross-ul urmator. I acest fel, respecti "time to rest". Nu esti mereu in tranzactie. Tu deschizi ordere atat timp cat nu ai nici un order deschis, daca linia de canal e sub linia de cut. Ceea ce nu corespunde cu metoda teoretica. De aia iti deschide primul order cand pui expertul pe chart (tu insuti ai comentat ca "conditia e indeplinita", ceea ce e fals). Tu trebuie sa deschizi ordere doar cand linia de cut TAIE linia de canal. Daca un order se inchide (la SL, TP, ori intersectia liniei de canal cu cursul) tu NU MAI TREBUIE sa deschizi alt order, pana nu esti iar la canal cross. Time to rest! There is a time to buy, there is a time to sell, and there is a time to rest. In acest fel, cand vei adauga expertul pe chart, el nu va deschide un order imediat, pana nu se produce primul cross. Abia ATUNCI stii directia in care vrei sa mergi. Cu conditia sa poti detecta cross-ul. Deci cum detectezi cross-ul? In mintea mea, CROSS inseamna ca linia de cut INCRUCISEAZA linia de canal. Adica in momentul actual linia de cut este PESTE linia de canal (ceea ce testezi tu) DAR SI faptul ca in momentul anterior linia de cut s-a aflat DEDESUPTUL liniei de canal. Altfel nu s-a produs nici un cross. Adica asa:
canal3.JPG ( 7.02K )
Number of downloads: 47Adica in timpul prezent (verde, cut1 in expertul tau) linia de cut (rosie) este deasupra liniei de canal, dar in momentul de timp anterior (mov, cut2 in expertul tau, adica in modificarea mea, asta este cea de a doua serie de variabile) linia de cut a fost dedesuptul liniei de canal. Doar asa pot testa ca s-a produs cross. Daca cut-ul pe bara curenta este deasupra canalului pe bara curenta, dar cut-ul pe bara precedenta este dedesuptul canalului pe bara precedenta. Si atunci intru long, pana dau in stop, pana dau in target, ori pana vrea muschii mei. Dar nu tranzactionez long pe partea a doua a curbei (pe cadere) chiar daca conditia (in implementarea ta) continua sa fie indeplinita (adica cut-ul este tot deaupra liniei de canal, dar tre sa stau cuminte pana la urmatorul cross). Intelegi ce vreau sa zic? Ai nevoie de valorile liniei de canal si a liniei de cut, atat pe bara curenta, cat si pe bara precedenta. Ca sa poti testa ca s-a produs un cross. In afara de situatia in care stochezi totul in variabile de memorie de la un tick la altul (procedeu mult mai complicat) si testezi acele variabile. Solutia cea mai simpla e sa iei o serie pe shift 0, si una pe shift 1, cum am scris in primul meu exemplu. Later edit: citat din metoda, inrosirea imi apartine: QUOTE Pasul 3 Asteapta ca marketul sa revina in zona de tunel. Cand sparge DEASUPRA tunelului, mergi lung. Cand sparge SUB , mergi Short. deci nu "mergi long ori de cate ori cut-ul e desupra". Ci doar "cand sparge". Gata, i-am spart pe toti.. hihi This post has been edited by tradelover: Jul 8 2008, 11:30 AM -------------------- There are no shortcuts in forex. You didn't learn to walk without first learning how to crawl.
|
|
|
|
Jul 9 2008, 08:47 AM
Post
#5
|
|
|
Group: Members Posts: 89 Joined: 15-December 06 From: bucuresti Member No.: 1,326 |
@Tradelover.
Multumesc inca o data pentru raspuns. Am inteles cu greu deoarece din primul tau post , #2 , mi-a scapat de la al 2lea set de indicatori cifra "1" din coada si nu intelegeam rolul celui de al 2lea set de indicatori , cifra care reprezinta: CITAT shift - Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago). |
|
|
|
| Ad Bot |
Post
#
|
![]() Ads |
|
|
|
|
![]() ![]() |
Similar Topics
| Topic Title | Replies | Topic Starter | Views | Last Action | |||
|---|---|---|---|---|---|---|---|
![]() |
|
92 | sinus45 | 10,384 | 31st October 2008 - 11:47 AM Last post by: sinus45 |
||
![]() |
0 | bumasoft | 515 | 29th October 2008 - 03:10 PM Last post by: bumasoft |
|||
![]() |
7 | Mangusta | 1,433 | 8th July 2008 - 10:29 PM Last post by: andrei_lint |
|||
![]() |
7 | Alexian | 1,353 | 3rd June 2008 - 01:24 PM Last post by: Alexian |
|||
![]() |
1 | oltciter | 782 | 23rd May 2008 - 08:32 PM Last post by: mark39 |
|||
|
Lo-Fi Version | Time is now: 10th January 2009 - 04:26 AM |
Informatiile de pe vamist.com NU reprezinta recomandari de tranzactionare. Nu ne asumam niciun fel de raspundere pentru neplacerile ce pot aparea in urma folosirii acestor informatii.