Popularni Postovi

Izbor Urednika - 2019

MQL4: pišemo odjednom jednog savjetnika za MT4 i MT5

Pozdrav prijatelji!

Mnogi od vas su se vjerojatno već više puta suočili s ovom neugodnošću: napisali su savjetnika u mql4, a onda sam se želio pokušati igrati s MetaTraderom 5. Prepisivanje cijelog koda opet je prilično mukotrpan i dugotrajan zadatak, a isto tako se prvo trebate baviti radom postojećeg , Pisanje dva različita stručna savjetnika odvojeno za MT4 i za MT5 također zahtijeva mnogo vremena. Danas ćemo ovaj problem riješiti u novom video priručniku.

Pa što učiniti? Odgovor je jednostavan - napišite jednog savjetnika za dva terminala odjednom. Uostalom, uglavnom se jezici mql4 i mql5 ne razlikuju toliko, mnoge su metode i osnovna struktura skripti na tim jezicima slične. Ako bi bilo moguće napisati zajednički kôd u jednoj skripti, a različiti odjeljci jednostavno biti na neki način prepravljeni na oba jezika i prisiljavati prevoditelja na odabir potrebnih dijelova koda, uštedjelo bi puno vremena i živaca.

Srećom, MetaEditor podržava direktive o uvjetnom sastavljanju pretprocesora. A danas ćemo pogledati kako se to radi na vrlo jednostavnom primjeru.

#ifdef identifier // Kod ovdje se sastavlja ako je identifikator već definiran za predprocesora u naredbi #define. #endif

U kodu za MT5 zamijenit ćemo varijable iz MQL4 pomoću direktive #define:

#ifdef __MQL5__ #define NarudžbeUkupne pozicijeSkupno #endif

U zaglavlje savjetnika stavljamo ulazne varijable:

ulaz int Stop = 300; ulaz int Take = 400; input int Slip = 100; ulazni int MN = 123; ulaz dvostruki LT = 0,1;

Sada možete pisati metode za kupnju i prodaju:

bool Buy (dvostruka cijena, dvostruka sl, dvostruka tp) {#ifdef __MQL4__ int ticket = OrderSend (Symbol (), 0, LT, cijena, Slip, sl, tp, "", MN); if (ulaznica <0) {PrintFormat ("Pogreška nalogaSend% d", GetLastError ()); } #endif #ifdef __MQL5__ // --- deklaracija i inicijalizacija upita i rezultata MqlTradeRequest zahtjev = {0}; MqlTradeResult rezultat = {0}; // --- parametri zahtjeva request.action = TRADE_ACTION_DEAL; // vrsta zahtjeva za trgovinsku operaciju.symbol = Symbol (); // znak zahtjev.volume = LT; // volumen zahtjev.type = 0; // vrsta zahtjeva za narudžbu. cijena = cijena; // cijena za zahtjev za otvaranje.sl = sl; // cijena StopLoss zahtjev.tp = tp; // cijena TakeProfit request.deviation = Slip; // dopušteno odstupanje od zahtjeva za cijenu.magic = MN; // MagicNumber nalozi // --- slanje zahtjeva if (! OrderSend (zahtjev, rezultat)) {// ako zahtjev nije moguće poslati, ispisati kod pogreške PrintFormat ("errorStrend error% d", GetLastError ()); } // --- informacije o operaciji PrintFormat ("retcode =% u deal =% I64u order =% I64u", result.retcode, result.deal, result.order); #endif // --- povratak (lažno); }

Način prodaje sličan je metodi buy (). Nećemo posebno razmišljati o strategiji u ovom primjeru, dobit ćemo uvjet za slučajno otvaranje i staviti ovaj kôd u OnTick ():

int oper = (int) (GetTickCount ()% 2); // ostatak dijeljenja sa dva uvijek je ili 0 ili 1 ako je (oper == 0) {double price = Ask; dvostruki SL = NormalizeDouble (ponuda - zaustavi * _ točka, _ znamenke); dvostruki TP = NormalizeDouble (licitacija + uzimanje * _ točka, _ znamenke); Kupite (pitajte, SL, TP); } if (oper == 1) {dvostruka cijena = ponuda; dvostruki SL = NormalizeDouble (Pitaj + Stop * _Point, _Digits); dvostruki TP = NormalizeDouble (Pitajte - uzmi * _Point, _Digits); Prodaj (pitaj, SL, TP); }

Zaključak

To je sve. Sada kôd možete sastaviti u MetaEditor 4 i na MetaTrader 4 terminalu će raditi. Možete sastaviti Stručni savjetnik u MetaEditoru 5 i on će normalno raditi u terminalu MetaTrader 5. Štoviše, za promjenu terminala ne morate prepisivati ​​niti jedan redak koda - sve će se sastaviti i funkcionirati u redu.

Pogledajte video: Robot Building Tutorials #6 - Intro to MQL4 (Studeni 2019).

Ostavite Komentar