Creați un robot de tranzacționare al algoritmului Noțiuni de bază despre scrierea unui expert în MQL4

Piețele financiare mondiale vă oferă un potențial uriaș pentru profit și pierdere. Există întotdeauna un potențial de profit pe piață, deoarece puteți plasa tranzacții în ambele direcții. Indiferent dacă poziția dvs. este una bullish sau bearish, abilitatea comerciantului de a face bani este întotdeauna prezentă - ca și capacitatea de a face o pierdere.

De prea multe ori, emoțiile, capcanele mintale psihice și disciplina mentală stau în calea profiturilor și sunt principalele motive 95% (sau Mai Mult) din toți noii comercianți își pierd toate fondurile de investiții în prima lună. 

Utilizarea unui robot de analiză a algoritmilor Expert Advisor în Meta Trader scrisă în limba MQL4 este o modalitate de a accesa piața prin cod, luând astfel emoțiile din imagine și lucrați doar cu numerele și logica programului. 

Emiterea emoțiilor din ecuație este o măsură, dar asta nu înseamnă că roboții nu pot pierde. De fapt, chiar și marile bănci de investiții au trebuit să scoată mufa de pe robotul lor comercial înainte ca pierderea să devină fatală. În 2013, Goldman Sachs a avut erori serioase în algoritmii de tranzacționare care costau 100 de milioane de dolari.

Trebuie să fiți conștienți, înainte de a continua cu acest ghid și chiar de a vă gândi la utilizarea dvs. bani reali, câștigați cu greu, pe care le puteți pierde toate depozitul în contul dvs. de brokeraj din codul dvs. (și poate în cele mai grave cazuri mai mult cu unii brokeri dacă se aplică taxe suplimentare)

Sunteți responsabil în cele din urmă pentru meserii, chiar dacă codul de program le plasează pentru dvs. În timp ce pierderea este o posibilitate, puteți de asemenea să multiplicați contul și să îl dezvoltați exponențial în timpul somnului. 

Dacă doriți să rulați complet autopilot, acest lucru ar putea fi realizat fără nici o interacțiune. Puteți face bani literalmente pasiv în timp ce vă continuați cu viața de zi cu zi. 

Această strategie de tranzacționare în totalitate a mâinilor libere este nu una pe care o promovez - și nici nu o folosesc vreodată și am găsit deloc profitabilă. Monitorizarea unui robot activ și a meseriilor curente, împreună cu menținerea unei atenții asupra calendarului și a evenimentelor economice, este foarte diferită de faptul că l-am lăsat sălbatic și sperând în cele mai bune. Victoriile pot fi epice, dar pierderile nesupravegheate sunt mult mai mari.

Instalarea MQL4

Descărcați MT4 de pe site-ul lor și instalați-l pe mașina dvs..

  • Utilizatorii Windows
  • utilizatorii MacOS
  • Utilizatorii Linux

Odată ce MT4 rulează, veți avea nevoie de un cont cu un broker care acceptă MT4. Ei vor putea apoi să vă dea datele dvs. de conectare MT4. 

Toți brokerii vor oferi un cont demo și sunteți încurajați să utilizați întotdeauna contul demo pentru scrierea și testarea software-ului.

Odată ce ați configurat MT4 pe desktop, putem continua să creăm propriul robot de tranzacționare a algoritmilor de experți.

Cum se scrie un robot

Există multe limbi care ar fi potrivite pentru scrierea unui algoritm de tranzacționare a robotului de la zero, dar complicațiile pe care le veți întâlni sunt, de fapt, API-ul pentru a direcționa accesul pe piață pe care brokerul dvs. de acțiuni îl va oferi - așa veți permite plasarea comenzilor comerciale pe piețele financiare. 

Procesarea datelor de piață ar putea fi realizată într-o multitudine de limbi și, probabil, într-o măsură mai mare decât MT4 MQL4 pot rula teste înapoi (testele din spate sunt o modalitate de a testa robotul dvs. de algoritm; Din motive de ușurință a funcționalității și a suportului general pentru software-ul financiar, vă recomand să utilizați MQL4 (MetaQuotes Language 4), limba maternă a MetaTrader 4, pentru a scrie robotul dvs. de tranzacționare a algoritmilor.

Sintaxa MQL4

MQL4 este similar în forma sa cu PHP, C, C ++ sau VBScript. Mai jos este un exemplu al unei funcții care va fi apelată pe fiecare bifă de date de piață:

void OnTick () if (Bare<100 || IsTradeAllowed()==false) return; if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();  else  CheckForClose();  

Aici verificăm dacă au fost încărcate suficiente date de piață Baruri < 100. MQL4 stabilește variabile predefinite, cum ar fi barele (care conține numărul de bare încărcate în diagramă). 

În plus, verificăm cu un sau || condiționată de IsTradeAllowed (). Aceasta este o funcție de verificare pentru a verifica dacă contextul de tranzacționare nu este în prezent ocupat.

Elementele din MQL4, cum ar fi aceste variabile predefinite și funcțiile de funcționare a diagramelor, cum ar fi Symbol (), fac scris strategia dvs. o plimbare în parc, și pentru mine este de ce este de preferat să codificați algoritmul de tranzacționare a roboților în MQL4 peste alte limbi.

Vă recomandăm să aruncați o privire prin referința MQL4 ori de câte ori aveți timp să obțineți mai multă încredere în utilizarea MQL4 pentru a vă satisface în continuare necesitățile.

Editarea codului MQL4 în MetaEditor

Vă recomandăm să utilizați ID-ul integrat MetaEditor, care vine cu platforma de tranzacționare MT4. Pentru a intra în editor, faceți clic dreapta pe un expert expert existent în panoul de navigare din partea stângă și selectați modifica din meniu.

MetaEditorul MT4 se va deschide și veți putea crea un fișier nou. Acest lucru oferă sintaxei utilizatorului evidențierea și depanarea de ieșire. 

Important: Va trebui să compilați fișierele mq4 în consilierii de experți ex4 folosind MetaEditor dacă editați într-un editor extern. Deci, familiarizarea cu MetaEditor este o necesitate.

Algoritmul nostru

Pentru strategia noastră, vom începe să folosim o bază de sprijin și rezistență din partea SMA (Smoothed MASII Average) indicator. SMA poate prezice un semnal de intrare / ieșire urs. Media mobilă netezită ne ajută să tăiem zgomotul de pe piață, oferindu-ne o imagine mai clară a direcției acțiunii prețului.

Fie într-un trend ascendent sau în scădere, SMA se poate comporta ca suport sau rezistență, în funcție de orientare. Atunci când prețul este în creștere, SMA se va comporta ca un suport de susținere, iar atunci când prețul scade, invers ca rezistență / plafon.

Baza de intrare

Atunci când complotăm două SMA-uri de diferite perioade - una din cele 40 de perioade și una dintr-o perioadă de 100 - putem vedea apoi cum trec și creează o bază pentru intrare. Așa cum am menționat mai devreme, atunci când SMA este sub prețul (mai mic decât prețul de închidere), considerăm că este o bază pentru a sustine, și când SMA este mai mare decât prețul (mai mare decât prețul de închidere), considerăm că aceasta este o linie rezistenţă

Deci, în cod, facem mai întâi următoarele pentru a crea o metodă de verificare a încrucișării intrărilor pentru a determina ulterior baza noastră de intrare:

// + ----------------------------------------------- ------------------- + // | Verificați încrucișarea intrărilor // + ----------------------------------------------- ------------------- + int CheckForCross (intrare dublă1, intrare dublă2) static int previous_direction = 0; static int current_dirction = 0; // Direcție sus = 1 dacă (input1> input2) current_direction = 1;  // Direcție în jos = 2 dacă (input1 < input2) current_direction = 2;  // Detect a direction change if(current_direction != previous_direction) previous_direction = current_dirction; return (previous_direction);  else  return (0);   

Acum putem calcula SMA folosind metoda indicatorului tehnic iMA oferită de MQL4 și executați acest lucru prin intermediul nostru CheckForCross pentru a vedea dacă a existat o cruce ca aceasta:

shortSma = iMA (NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0); longSma = iMA (NULL, 0, PerioadaTwo, 0, MODE_SMMA, PRICE_CLOSE, 0); // Verificați dacă există o cruce pe această bifă din cele două SMA int esteCrossed = CheckForCross (shortSma, longSma); 

Aici folosim MODE_SMMA să ne întoarcem Smoothed MASII Average de la sunt o metodei indicatorului tehnic pentru metoda de netezire aleasă. 

Dacă doriți să utilizați o altă metodă de uniformizare, există mai multe opțiuni, cum ar fi Simple, Exponential și Linear-weighted.

Ca și în cazul întregului suport și rezistență, metodologia de tranzacționare standard funcționează aici: cumpărați suport și vinde rezistență

Deci, pentru algoritmul nostru, vom face exact asta. Atunci când există o cruce în ambele direcții, vom aplica direcția adecvată a comerțului și vom intra pe piață.

f (isCrossed == 1) bilet = ordineSend (Simbol (), OP_BUY, LotsOptimized (), Întreabă, 3,0,0, "Double SMA Crossover", MAGICNUM, 0, Albastru); dacă (biletul> 0) if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES)) Imprimare ("Cumpărați comanda deschisă:", OrderOpenPrice ());  altceva Imprimare ("Eroare Deschidere ordine CUMPARARE:", GetLastError ()); return (0);  dacă (isCrossed == 2) bilet = OrderSend (Symbol (), OP_SELL, LotsOptimized (), Întreabă, 3,0,0, "Double SMA Crossover", MAGICNUM, 0, Albastru); dacă (biletul> 0) if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES)) Imprimați ("Comandă expediată:", OrderOpenPrice ());  altceva Imprimați ("Eroare deschidere comandă SELL:", GetLastError ()); return (0); 

Aici verificăm întoarcerea CheckForCross funcția pe care am definit-o înainte, după încărcarea cu cele două SMA-uri definite de către sunt o indicator tehnic.

Folosim OrderSend, care este furnizat de MQL4, pentru a deschide comerțul. Ca o bună practică, rezultatul este stocat în bilet variabilă și ulterior verificată pentru o valoare de întoarcere pozitivă pentru a face față oricărei erori care ar putea fi raportată de partea brokerului.

Baza pentru ieșire

Ca bază pentru intrare (cu excepția cazului invers), atunci când SMA creează o cruce de moarte, putem folosi acest semnal pentru închiderea comerțului nostru, dacă există tranzacții deschise. Logica pentru aceasta ar fi scrisă astfel:

// Obține totalul comenzilor totale total = OrdersTotal (); // Gestionați comenzile deschise pentru criteriile de ieșire pentru (cnt = 0; cnt < total; cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) // Look for long positions if(OrderType()==OP_BUY) // Check for Exit criteria on buy - change of direction if(isCrossed == 2) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the position return(0);   else //Look for short positions - inverse of prior conditions  // Check for Exit criteria on sell - change of direction if(isCrossed == 1) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the position return(0);    

Aici introducem a pentru buclă pentru a repeta toate comenzile deschise, deși în prezent vom tranzacționa câte un comerț la un moment dat - acest lucru ne permite să ne extindem în viitor și să avem mai multe tranzacții deschise dacă simțim că avem nevoie de ea.

Acest lucru face de asemenea mai ușoară utilizarea metodei OrderSelect, pe măsură ce putem folosi cnt variabilă de la noi pentru buclă. 

Odată ce intram în iterație, ne uităm pur și simplu la tipul curent de comandă (verificând pentru A cumpara OP_BUY sau Vinde OP_SELL ordine) și apoi să aplicăm logica condițională de la întoarcerea noastră CheckForCross metodă.

Adăugarea de gestionare a banilor

Chiar acum algoritmul nostru este simplu, cu o bază pentru intrarea și ieșirea din tranzacții, dar încă destul de periculos de prost atunci când vine vorba de gestionarea fondurilor. Pentru ca noi să păstrăm sub control anumite riscuri, vom plasa doar o cincime din capitalul tranzacționabil pe fiecare tranzacție, deci acum trebuie să fim factori în algoritmul nostru. 

lot = NormalizeDouble ((AccountFreeMargin () / 5) /1000.0,1); în cazul în care (lot<0.1) lot=0.1; return(lot);

Aceasta înseamnă că dacă aveți cont în contul de 10 000 USD, vom tranzacționa doar cu o cincime pe o perioadă (2000 USD), astfel încât scriptul va plasa doar un comerț cu o dimensiune mai mică de 0,1 sau 0,2, de exemplu, al cincilea calcul. 

Utilizăm AccountFreeMargin și NormalizeDouble pentru a genera această mărime a lotului și, dacă se calculează sub dimensiunea minimă a lotului de 0.1, o vom seta la 0.1.

Pe măsură ce contul crește (sau se micșorează!), Expunerea va fi stabilită doar la o cincime din capitalul propriu al contului. Aceasta înseamnă că supra-expunerea unei sume fixe (de exemplu, tranzacționarea unui anumit lot fix pe orice cont de mărime) nu se poate întâmpla teoretic, riscul de apel în marjă de la supra-tranzacționare este eliminat sau redus foarte mult. 

Apelul la margine este un risc foarte real în cazul în care piața se mută drastic împotriva dvs. înainte de a vă întoarce din cauza unei spike / fluctuații, în timp ce nu sunteți pe cale să depuneți mai multe fonduri.

În termeni laici, se calculează mărimea lotului dinamic de scriptul nostru pentru a satisface dimensiunea capitalului propriu. Deci, potențialul pentru profituri mai mari și mai mari este foarte real. 

Notă: O caracteristică frumoasă ar putea fi furnizarea unui parametru pentru a limita piscina comercială. De exemplu, dacă v-ați dorit să tranzacționați vreodată cu 1.000 $ din contul dvs., indiferent de marja disponibilă, ați putea seta tranzacționabilul disponibil la doar 1.000 $ decât dimensiunea întregului cont. 

Personal folosesc întotdeauna caracteristici de genul asta atunci când merg în direct cu scripturi noi pentru a-mi reduce expunerea la risc, până când sunt sigur că scenariul funcționează suficient de solid pentru a avea mai multe fonduri. 

Din punct de vedere programatic, acest lucru necesită un parametru și o ușoară modificare a exemplului de cod de mai sus pentru a verifica mai degrabă acea variabilă decât AccountFreeMargin () valoare.

Pragul de rentabilitate

În plus, vom încerca să realizăm unele situații de spargere, ceea ce înseamnă că dacă piața s-ar schimba împotriva noastră pentru a crea o pierdere substanțială de la deschidere, ne uităm să ieșim cu pierderi minime și cel puțin să rupem chiar pentru a ne păstra capitalul.

Acest lucru se poate realiza prin monitorizarea pierderii comerțului nostru și a relației cu prețul deschis. Dacă se schimbă direcția și comerțul nostru este lăsat în afara banilor, putem încerca să închidem comerțul cât mai aproape de prețul de intrare posibil:

 bool BreakEven (int MN) int Bilet; pentru (int i = OrdersTotal () - 1; i> = 0; i -) ComandaSelect (i, SELECT_BY_POS, MODE_TRADES); dacă OrderSymbol () == Simbol () && OrderMagicNumber () == MN) Ticket = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice (), OrderTakeProfit (); dacă (Bilet < 0) Print("Error in Break Even : ", GetLastError()); break;   return(Ticket); 

Cele de mai sus utilizează OrderModify pentru a încerca să setați pierderea stop la prețul de comandă deschis. Aceasta este o metodă bruta, dar simplă, pentru a ne asigura că vom ieși când prețul va reveni la prețul de intrare. Aceasta se aplică numai atunci când profitul curent nerealizat este în pierdere.

Adăugarea unei marje de rentabilitate

O marjă de rentabilitate ar putea fi adăugată prin simpla adăugare la OrderOpenPrice astfel:

Biletul = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice () + 10, OrderTakeProfit (), 0, verde);

Pentru acest exemplu, permitem o diferență de 10 puncte în intrarea noastră la închidere prin limită de oprire.

Notă: Direcția de comerț ar trebui verificată pentru această metodă - ca și în cazul în care ar trebui să fie adăugată sau scăzută din prețul de intrare în funcție de poziția de cumpărare sau de vânzare.

O altă modalitate de a ne asigura că câștigurile noastre nu sunt pierdute este de a folosi o oprire care va fi discutată în detaliu într-un alt ghid.

Scriptul întreg

Iată lista completă a consultantului nostru expert. Avem la dispoziție mai mulți parametri, cum ar fi nivelul profitului, pierderile de oprire și perioadele SMA. 

Vă rugăm să nu ezitați să jucați cu parametrii pentru a vedea ce funcționează cel mai bine pentru situația dvs. de tranzacționare și pentru a vă alinia algoritmul. 

Amintiți-vă: performanța trecută nu indică în nici un fel viitorul.

// + ----------------------------------------------- ------------------- + // | Dublu Sma.mq4 | // | Copyright 2017, Tom Whitbread. | // | http://www.gript.co.uk | // + ----------------------------------------------- ------------------- + # drepturi de autor privilegiate "2017, Tom Whitbread." #property link "http://www.gript.co.uk" #property description "Expert de experți în eșantionare în medii netezite" #define MAGICNUM 20131111 // Definiți parametrii noștri duble Lots = 0.1; intrare int PeriodOne = 40; // Perioada pentru prima intrare SMA int PeriodTwo = 100; // Perioada pentru a doua intrare SMA int TakeProfit = 40; // Nivelul de profit profit (0 dezactivare) int StopLoss = 0; // Stop pierdut implicit (0 dezactivare) // + ------------------------------------- ----------------------------- + // | funcții de inițializare a experților // + ----------------------------------------------- ------------------- + int init () retur (0);  int deinit () return (0);  // + ---------------------------------------------- -------------------- + // | Verificați încrucișarea SMA | // + ----------------------------------------------- ------------------- + int CheckForCross (intrare dublă1, intrare dublă2) static int previous_direction = 0; static int current_direction = 0; // Direcție sus = 1 dacă (input1> input2) current_direction = 1;  // Direcție în jos = 2 dacă (input1 < input2) current_direction = 2;  // Detect a direction change if(current_direction != previous_direction) previous_direction = current_direction; return (previous_direction);  else  return (0);   //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized()  double lot = Lots; // Calculate Lot size as a fifth of available free equity. lot = NormalizeDouble((AccountFreeMargin()/5)/1000.0,1); if(lot<0.1) lot=0.1; //Ensure the minimal amount is 0.1 lots return(lot);  //+------------------------------------------------------------------+ //+ Break Even | //+------------------------------------------------------------------+ bool BreakEven(int MN) int Ticket; for(int i = OrdersTotal() - 1; i >= 0; i)) OrderSelect (i, SELECT_BY_POS, MODE_TRADES); dacă OrderSymbol () == Simbol () && OrderMagicNumber () == MN) Ticket = OrderModify (OrderTicket (), OrderOpenPrice (), OrderOpenPrice (), OrderTakeProfit (); dacă (Bilet < 0) Print("Error in Break Even : ", GetLastError()); break;   return(Ticket);  //+------------------------------------------------------------------+ //+ Run the algorithm | //+------------------------------------------------------------------+ int start()  int cnt, ticket, total; double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP; // Parameter Sanity checking if(PeriodTwo < PeriodOne) Print("Please check settings, Period Two is lesser then the first period"); return(0);  if(Bars < PeriodTwo) Print("Please check settings, less then the second period bars available for the long SMA"); return(0);  // Calculate the SMAs from the iMA indicator in MODE_SMMA using the close price shortSma = iMA(NULL, 0, PeriodOne, 0, MODE_SMMA, PRICE_CLOSE, 0); longSma = iMA(NULL, 0, PeriodTwo, 0, MODE_SMMA, PRICE_CLOSE, 0); // Check if there has been a cross on this tick from the two SMAs int isCrossed = CheckForCross(shortSma, longSma); // Get the current total orders total = OrdersTotal(); // Calculate Stop Loss and Take profit if(StopLoss > 0) ShortSL = Ofertă + (Punct StopLoss *); LongSL = Solicitare- (Punct StopLoss *);  dacă (TakeProfit> 0) ShortTP = Bid- (TakeProfit * Point); LongTP = Cere + (TakeProfit * Punct);  // Deschideți doar o tranzacție simultan ... dacă (total < 1) // Buy - Long position if(isCrossed == 1) ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(),Ask,5, LongSL, LongTP, "Double SMA Crossover",MAGICNUM,0,Blue); if(ticket > 0) if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES)) Imprimare ("CUMPAREA comenzii deschise:", OrderOpenPrice (), "SL:", LongSL, "TP:" LongTP);  altceva Imprimare ("Eroare Deschidere ordine CUMPARARE:", GetLastError ()); return (0);  // Vânzare - Poziție scurtă dacă (isCrossed == 2) bilet = OrderSend (Simbol (), OP_SELL, LotsOptimized (), Bid, 5, ShortSL, ShortTP, MAGICNUM, 0, roșu); dacă (biletul> 0) if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES)) Imprimați ("Comandă deschisă:");  altceva Imprimați ("Eroare deschidere comandă SELL:", GetLastError ()); return (0);  // Gestionați comenzile deschise pentru criteriile de ieșire pentru (cnt = 0; cnt < total; cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) // Look for long positions if(OrderType() == OP_BUY) // Check for Exit criteria on buy - change of direction if(isCrossed == 2) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet); // Close the position return(0);   else //Look for short positions - inverse of prior conditions  // Check for Exit criteria on sell - change of direction if(isCrossed == 1) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Violet); // Close the position return(0);   // If we are in a loss - Try to BreakEven Print("Current Unrealized Profit on Order: ", OrderProfit()); if(OrderProfit() < 0) BreakEven(MAGICNUM);    return(0); 

Testează-l

Putem testa zilele anterioare, luni sau chiar ani de date de piață pentru un instrument financiar cu ușurință în mediul MT4 (Meta Trader 4). Cu toate acestea, comercianții sunt încurajați să nu aibă încredere în testarea înapoi singur, ci să o folosească ca un ghid pentru a-și orienta strategia de tranzacționare și a vedea cât de eficientă este o idee. 

Testarea înapoi permite comercianților să verifice dacă gândirea lor deține apă, ca să spunem așa, înainte de a face mai mult efort și de a merge mai departe - scrierea mai multor algoritmi în cod.

Unde să plasați fișierele de experți?

Dacă utilizați un editor de text extern pentru a scrie consilierul dvs., va trebui să încărcați consultantul dvs. expert în platforma de tranzacționare MT4 pentru al compila și verificarea erorilor. Pur și simplu adăugați fișierul .mq4 la instalarea MetaTrader în directorul Expert, de ex. / MetaTrader4 / MQL4 / Experți.

Consultantul expert va fi apoi disponibil în interiorul software-ului dvs. MT4 din meniul Navigator din partea stângă sub secțiunea experți. 

Notă: Asigurați-vă că testați un cont demo. Un cont real va tranzacționa cu bani reali și, deși profiturile vor fi reale, la fel vor și pierderile.

Înapoi Testarea

Dacă ați testat o strategie pe ultimul an de cablu (GBP / USD) și ați găsit rata profitului să fie mai mare de 1 (ceea ce înseamnă că ați făcut bani), atunci ați putea fi pe un lucru bun. 

Indiferent dacă acest lucru se va realiza în lumea reală este o altă întrebare întreagă și, de aceea, testarea la fața locului este la fel de importantă, ca și testarea scorului Z. Acesta este un subiect mult mai avansat pentru învățarea mașinilor algoritmul dvs., care nu va fi discutat aici, ci mai târziu în ghiduri mai avansate.

Cum se pornește un test de spate

Utilizați comanda rapidă Control-R pentru a deschide testerul de strategie sau pentru a îl selecta Vedere meniul. Panoul de testare se va deschide în partea de jos a ferestrei.

De aici, puteți selecta algoritmul pentru a rula în primul meniu derulant, deci alegeți numele de fișier al consilierului expert pe care l-ați creat aici. Apoi, puteți alege simbolul (instrument financiar). Voi testa pe simbolul GBPUSD al valutei britanice la Perechea Dolarului SUA.

De asemenea, putem selecta perioada de timp pentru care se va desfășura rezoluția (perioada de 15 minute, 1 oră, 1 zi și așa mai departe). Voi folosi setarea de 30 de minute.

În cele din urmă, avem o opțiune de modelare Fiecare bilet, Puncte de control, sau Prețurile deschise numai. În timp ce scriu scriptul, puteți opta pentru Prețurile deschise numai, deoarece va executa rapid testul dvs. - deși rezultatele nu va merita sa banesti banii reali!

Pentru aceasta, când căutați un test real înainte de a trece la testarea înainte, este recomandat să mergeți mai departe Fiecare bilet. Acest lucru va dura mult mai mult pentru procesare! (Puteți lăsa să ruleze într-un MT4 VPN online sau, desigur, peste noapte pe mașina dvs. locală, dacă doriți.)

Modificarea parametrilor

Am stabilit câțiva parametri (PeriodOne și PeriodTwo) Pentru consilierul nostru expert, astfel încât perioadele de timp ale celor două medii mobile să poată fi modificate. 

Acestea pot fi accesate prin testerul de strategie făcând clic pe Expert Properties butonul și vizualizarea intrare fila. 

O valoare numerică poate fi dată pentru fiecare parametru aici - valorile implicite sunt PeriodOne = 40 și PerioadaTwo = 100.

Testarea înainte

Odată ce ați testat datele istorice, puteți începe să testați cu piața live, după cum ați văzut deja dacă ideile dvs. au depășit furtuna din testul din spate - și (sperăm) ați găsit o anumită încredere în ceea ce credeți că este o strategie câștigătoare!

Pe piața live, puteți găsi că strategia dvs. se prăbușește pe față datorită elementelor pe care nu le-ați luat în considerare în testele anterioară. Amintiți-vă piața are întotdeauna dreptate. Codul dvs. nu este niciodată mai inteligent decât piața și nu există niciun fel de noroc în tranzacționare. 

Un test inainte este testul acid pentru a vedea daca strategia va fi profitabila pentru a pune bani reali pe ea.

Testul înainte este, de obicei, cel mai bine realizat pe o VPN specializată pentru MT4 EA (Expert Advisors), care este adesea oferită gratuit de majoritatea brokerilor FX. Scriptul va rula 24/5 în timp ce piața este deschisă și veți putea monitoriza tranzacțiile live conectându-vă la cont dintr-un terminal deoarece acesta se va difuza pe dispozitivul dvs. mobil prin intermediul aplicației MT4 sau al desktop-ului prin intermediul Software-ul MT4.

Volatilitate ridicată

Ceea ce poate fi un adevărat ucigaș pentru scenariile noastre este volatilitatea ridicată a pieței, care poate apărea din mai mulți factori externi. 

De exemplu, orice accident sau flash crash, război, alegeri, majorarea ratei dobânzii, randamentele obligațiunilor sau un raport economic semnificativ precum IPC, PIB sau modificări ale sistemului fiscal vor determina schimbări mari în întreaga economie globală și în multe piețe financiare . De asemenea, și indirect, tranzacția dvs. cu o pereche de valute sau cu o politică de securitate poate fi afectată de evenimentele altei țări, pe care probabil că nu le-ați anticipat la început.

Cel mai recent, ancheta FBI a lui Brexit și mai târziu a lui Hillary Clinton în timpul alegerilor din SUA au fost exemple de volatilitate ridicată pe piață pentru oricine interesat de o privire mai atentă. 

Să luăm cazul lui Brexit. Publicul britanic părea să creadă în majoritate că un vot Brexit ar fi foarte puțin probabil. Nu eram atât de optimist și mi-am scos toate kilogramele, economisind o mulțime de capitaluri proprii în Marea Britanie din cauza ratei de schimb scăzute. 

În ceea ce privește ceilalți, mi-e teamă să spun că nu au avut noroc. Hedging pe un vot de ședere-cum ar fi spus unii dintre consilierii băncilor majore-ar fi dus, desigur, la invers, și o pierdere de aproximativ 15% pentru cei investit în lire, în așteptarea pentru a recupera.

Situații ca aceasta sunt ideale pentru a opri robotul dvs. de tranzacționare și numai pentru comerțul în afara volatilității ridicate a pieței. Codificarea pentru acest tip de rezultate va fi foarte dificilă în mod automat în ceea ce privește indicatorii de vârf sau întârzieri și este mai bine tranzacționat după eveniment sau manual. Șansele pentru semnale false sau contradictorii sunt întotdeauna mai mari în timpul evenimentelor mari, iar o abordare fundamentală manuală, mai degrabă decât una tehnică, poate fi mai profitabilă.

Nu este nimic în neregulă cu întreruperea robotului dvs. pentru că vă așteptați la o criză. Ea vă poate salva o pierdere, pe când pe de altă parte vă poate face să ratați o victorie uriașă. Din experiența mea, șansele câștigului sunt mult mai subțiri, datorită incertitudinii și probabilității de apel în marjă sau loviturii de pierderi înainte ca tranzacția să poată progresa datorită vârfurilor extreme de moment.

concluzii

Am stabilit câteva dintre principiile de scriere a unui algoritm de tranzacționare și am introdus multe idei noi. Din deplasarea prin cod, sper că acum puteți vedea funcționarea internă a unui algoritm în MQL4 și puteți vedea cum se utilizează un indicator tehnic precum media mobilă pentru generarea unui semnal de intrare și de ieșire. 

În ceea ce privește gestionarea banilor, am trecut peste posibilitatea includerii condițiilor de rentabilitate și a dimensiunii dinamice a loturilor pentru a utiliza o cincime din capitalul disponibil. Simțiți-vă liber să modificați aceste părți ale codului la dorințele dumneavoastră de risc. Am trecut peste testarea strategiei de testare în revistă a MT4 și am deschis porțile pentru potențialul de testare înainte și chiar testarea scorului Z în viitor, toate acestea fiind vitale înainte de a intra live.

Cu o mai bună ajustare și cercetare, puteți avea o experiență foarte profitabilă pe piețe într-o zi în curând. Acum, că aveți un bun consultant de bază în calitate de scenarist, puteți începe să vă scrieți propriile strategii în limba MQL4 - și să vă testați dacă funcționează cu adevărat, pe cât credeți că ar trebui să o faceți, aluzie la!

Mergând înainte, veți dori cu siguranță să vă testați algoritmul mai mult înainte de a vă aloca bani reali. Odată ce vă simțiți destul de încrezător că aveți un scenariu bun, puteți să vă alăturați și unei comunități pentru a-ți lua ideile în continuare și pentru a ajuta la brainstorming sau a distra alți algoritmi pentru a vedea cum funcționează și cum le puteți integra în strategia dvs.. 

Împărtășirea consultanților experți cu alți comercianți este o modalitate excelentă de a colabora și de a vedea cum alții scriu algoritmii pentru multitudinea de indicatori tehnici de acolo, cum ar fi MACD, RSI, CCI, ADX, Bollinger Bands și Ichimoku ... lista continuă și continuă.

Poate că în viitor, dacă aveți suficientă încredere, ați putea dori să vă vindeți scenariul altora, caz în care piața MT4 sau site-ul dvs. ar putea fi locuri ideale pentru a începe!

Pentru a face mai multe teste, îmi recomand cu adevărat să descărcați toate datele anterioare de piață și să le încărc

Cod