Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 300

 
buyanov:

Ma nulla è cambiato.

Sia l'errore che l'avvertimento rimangono.

Datemi TUTTO il codice, non solo un pezzo di esso. Si aspetta che tutti indovinino? Allora chiedi qui - qui tutti sanno tutto di tutto contemporaneamente.

 

Vi do l'INTERO codice.

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
buyanov:

Vi do l'INTERO codice.

È semplicemente enorme...

 

Tutto il codice

"

#proprietà copyright "Copyright 2017, MetaQuotes Software Corp."

#versione proprietà "Cross20170703 1.00"


//================================================================================ = ===========================

extern int Period_FastMA=4;

extern int Period_SlowMA=8;


extern int MaxTickNum=30;

extern int MaxAttempt=10;

extern int k_slippage=1;


doppio esterno k_SL=10.0;//*Punto()

doppio esterno k_TP=30.0;//*Punto()


doppia esterna TrailDist=30.0;//*Punto()

doppio esterno k_lotti=0,3;

extern bool ExFin=falso;



int//**************************************************** ***** ************************************


res,

contare,

io,

Segno di spunta successivo=0,

tempo,

fin-time,

BegMlSecTime,

EndMlSecTime,

tempo delta,

Tentativo,

slittamento=5,

SpuntaNum=0,

posizione,

biglietto,

Intervallo massimo1000,

CroceNum=0,

come=4,

att,

tentativo,



erra;



Doppio //*********************************************** ***** *******************************


totale,

molte,

propagazione,


veloce,

lentoMA,


delta,


ultimo delta,

Delta precedente,


Comis=0,00004,

prezzo aperto,

prezzo vicino,

SL,

TP,


profitto,

PROFITTO;


bool//******************************************************* *** **********************************************


FirstCross=falso,

NextCross=falso,

CurType,

successo = vero

abilita=vero,


BegUp,

BegDn,

AcquistaAperto=falso,

SellOpened=falso;


corda//*********************************************** ************************************************** *


rec,

str,

disco,

BegTimeCorrente,

EndTimeCurrent,

CurTime,

Str Cur,

stringbeg,

StringEnd;

//************************************************** **************************************************** ******* ******


//================================================================================ = ==================================================================================================== == ===============================

//================================================================================ = ==================================================================================================== == ================================

//================================================================================ = ==================================================================================================== == ================================




//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>>>

//------------------------------------------------ -------------------------------------------------- ---------------------------


//================================================================================ = ==================================================================================================== == =============================


int OnDeinit(const int res)

{

Alert("beg OnDeinit()");

err=StringToInteger((stringa)err);

ritorno/ri;

Alert("end OnDeinit()");

}

//SuDeinit();-----------

//------------------------------------------------ -------------------------------------------------- -----------------------




//================================================================================ = ==================================================================================================== == ==============================

void ExpertStop()

{

Avviso("EspertoStop");

if((ExFin==true)&&(TickNum==MaxTickNum))

{

ExpertRemove();

OnDeinit(res);

}

} //fine ExpertStop


//------------------------------------------------ -------------------------------------------------- ------------------------



//================================================================================ = ==================================================================================================== == ==========================

int ErrorDescription()

{

Avviso("beg ErrorDescription");

cambiare (errare)

{caso 0: err="Nessun errore"; rompere;

case 1: err="Nessun errore, ma risultato sconosciuto"; rompere;

caso 2: err="Errore generale"; rompere;

caso 3: err="Parametri non validi"; rompere;

caso 4: err="Il server commerciale è occupato"; rompere;

case 5: err="Versione precedente del terminale client"; rompere;

caso 6: err="Nessuna connessione al server commerciale"; rompere;

caso 7: err="Diritti insufficienti"; rompere;

caso 8: err="Richieste troppo frequenti"; rompere;

caso 9: err="Operazione illegale che interrompe il server"; rompere;

caso 64: err="Account bloccato"; rompere;

caso 65: err="Numero di conto errato"; rompere;

caso 128: err="Timeout affare scaduto"; rompere;

caso 129: err="Prezzo errato"; rompere;

caso 130: err="Fermate sbagliate"; rompere;

caso 131: err="Volume errato"; rompere;

caso 132: err="mercato chiuso"; rompere;

caso 133: err="Commercio vietato"; rompere;

case 134: err="Denaro insufficiente per completare l'operazione"; rompere;

caso 135: err="Prezzo modificato"; rompere;

caso 136: err="Nessun prezzo"; rompere;

caso 137: err="Broker occupato"; rompere;

caso 138: err="Nuovi prezzi"; rompere;

case 139: err="L'ordine è bloccato ed è già in elaborazione"; rompere;

caso 140: err="Acquisto consentito solo"; rompere;

case 141: err="Troppe richieste"; rompere;

case 145: err="La modifica non è consentita perché l'ordine è troppo vicino al mercato"; rompere;

caso 146: err="Sottosistema commerciale occupato"; rompere;

case 147: err="L'uso della data di scadenza dell'ordine è vietato dal broker"; rompere;

case 148: err="Il numero di ordini aperti e pendenti ha raggiunto il limite fissato dal broker.";break;

//

caso 4000: err="Nessun errore"; rompere;

case 4001: err="Puntatore a funzione non valido"; rompere;

case 4002: err="L'indice dell'array è fuori intervallo"; rompere;

case 4003: err="Nessuna memoria per lo stack di funzioni"; rompere;

case 4004: err="Stack overflow dopo chiamata ricorsiva"; rompere;

case 4005: err="Non c'è memoria nello stack per passare i parametri"; rompere;

case 4006: err="Memoria insufficiente per parametro stringa"; rompere;

case 4007: err="Memoria insufficiente per stringa temporanea"; rompere;

case 4008: err="Stringa non inizializzata"; rompere;

case 4009: err="Stringa non inizializzata nell'array"; rompere;

case 4010: err="Memoria insufficiente per array di stringhe"; rompere;

case 4011: err="Stringa troppo lunga"; rompere;

caso 4012: err="Zero resto"; rompere;

caso 4013: err="Divisione per zero"; rompere;

caso 4014: err="Comando sconosciuto"; rompere;

caso 4015: err="Transizione errata"; rompere;

caso 4016: err="Matrice non inizializzata"; rompere;

case 4017: err="Chiamate DLL non consentite"; rompere;

case 4018: err="Impossibile caricare la libreria"; rompere;

case 4019: err="Impossibile chiamare la funzione"; rompere;

case 4020: err="Le chiamate a funzioni di libreria esterne non sono consentite"; rompere;

case 4021: err="Memoria insufficiente per la stringa restituita dalla funzione"; rompere;

caso 4022: err="Sistema occupato"; rompere;

case 4050: err="Numero di parametri di funzione non valido"; rompere;

case 4051: err="Valore parametro funzione non valido"; rompere;

case 4052: err="Errore interno della funzione stringa"; rompere;

caso 4053: err="Errore di matrice"; rompere;

case 4054: err="Uso non corretto dell'array di serie temporali"; rompere;

case 4055: err="Errore indicatore personalizzato "; rompere;

case 4056: err="Gli array sono incompatibili"; rompere;

case 4057: err="Errore nell'elaborazione delle variabili globali"; rompere;

case 4058: err="Variabile globale non trovata"; rompere;

case 4059: err="Funzione non consentita in modalità test"; rompere;

case 4060: err="Funzione non consentita"; rompere;

case 4061: err="Errore nell'invio della posta"; rompere;

case 4062: err="Parametro stringa previsto"; rompere;

case 4063: err="È previsto un parametro intero"; rompere;

caso 4064: err="doppio previsto"; rompere;

case 4065: err="È previsto un array come parametro"; rompere;

case 4066: err="Dati storici richiesti in stato di aggiornamento"; rompere;

case 4067: err="Errore durante l'esecuzione di un'operazione commerciale"; rompere;

caso 4099: err="Fine file"; rompere;

case 4100: err="Errore durante l'utilizzo del file"; rompere;

caso 4101: err="Nome file non valido"; rompere;

case 4102: err="Troppi file aperti"; rompere;

caso 4103: err="Impossibile aprire il file"; rompere;

case 4104: err="Modalità di accesso al file incompatibile"; rompere;

case 4105: err="Nessun ordine selezionato"; rompere;

caso 4106: err="Carattere sconosciuto"; rompere;

case 4107: err="Parametro prezzo errato per la funzione commerciale"; rompere;

case 4108: err="Numero biglietto non valido"; rompere;

case 4109: err="Il trading non è consentito. Devi abilitare l'opzione Consenti a EA di scambiare nelle proprietà di EA."; rompere;

case 4110: err="Le posizioni lunghe non sono consentite. Devi controllare le proprietà di EA."; rompere;

case 4111: err="Non sono consentite posizioni corte. Devi controllare le proprietà di EA."; rompere;

case 4200: err="L'oggetto esiste già"; rompere;

case 4201: err="È stata richiesta una proprietà oggetto sconosciuta"; rompere;

caso 4202: err="L'oggetto non esiste"; rompere;

case 4203: err="Tipo di oggetto sconosciuto"; rompere;

case 4204: err="Nessun nome oggetto"; rompere;

case 4205: err="Errore coordinate oggetto"; rompere;

case 4206: err="La sottofinestra specificata non è stata trovata"; rompere;

default: err="Errore durante il lavoro con l'oggetto";

}

Avviso("end ErrorDescription");

ritorno(err);

}//Fine descrizione errore()

//------------------------------------------------ -------------------------------------------------- ------------------------


//================================================================================ = ==================================================================================================== == ==========================

int GetNext(NextTick)

//>>>>>>>>>>>>>>>>>>>>>>>>

{

Avviso("beg GetNext(NextTick)");

Avviso (Successivo);

while(RefreshRates()==false)Count++;

Avviso("Count=",Count,"NextTick=",NextTick);

Mettere in guardia(" ");

Avviso (RefreshRates(), Conte, NextTick);

ritorno(Successivo);

Avviso (Successivo);

//--------------------

Avviso("end GetNext(NextTick)");

}

//fine GetNext(NextTick)

//================================================================================ = ==================================================================================================== == ==========================


//------------------------------------------------ -------------------------------------------------- ------------------------

void OnTick()

{

//***********************************

Avviso("Beg OnTick");

//***********************************

FastMA=NormalizeDouble(iMA(NULL,0,Period_FastMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_FastMA=4

SlowMA=NormalizeDouble(iMA(NULL,0,Period_SlowMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_SlowMA=8

GetNext(Successivo);

Avviso("NextTick=",NextTick);

Delta=NormalizeDouble(FastMA-SlowMA,Digits()); Avviso("Beg OnTick");

Avviso(Delta,Cifre());

Alert("FastMA=",DoubleToStr(FastMA ,Digits()),"SlowMA=",DoubleToStr(SlowMA,Digits()), "Delta=",DoubleToStr(Delta,Digits()));

Avviso("fine OnTick");

//------------------------------------------------ -------------------------------------------------- ---------------------------

}// fine (fine OnTick)

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< < <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< < <<<<<<<<<<<<

//------------------------------------------------ -------------------------------------------------- -----------------------------



//================================================================================ = ==================================================================================================== == =============================



vuoto Init()

{

Mettere in guardia(" ");

Alert("beg Init()");

Mettere in guardia(" ");



StringBeg=StringConcatenate("TimeToStr(TIME_DATE,TIME_SECONDS)=",TimeToStr(TIME_DATE,TIME_SECONDS));

avviso(stringbeg);


record=StringConcatenate("MaxTickNum=",MaxTickNum);

avviso(record);


record=StringConcatenate("k_SL=",DoubleToStr(k_SL,Digits()));

avviso(record);


record=StringConcatenate("k_TP=",DoubleToStr(k_TP,Digits()));

avviso(record);


record=StringConcatenate("k_lots=",DoubleToStr(k_lots,Digits()));

avviso(record);


Avviso("end Init()");


}//fine Init()

//------------------------------------------------ -------------------------------------------------- ------------------------




//================================================================================ = ==================================================================================================== == ======================

int GetTick(NextTick)


{


Avviso("Beg GetTick");


while (RefreshRates()==false)

NextTick++;

Avviso("NextTick=",NextTick);


OrderSelect(NextTick,SELECT_BY_TICKET);


Profitto=Profitto Ordine();


Avviso(DoubleToStr(Profitto, Cifre));


GetNext(Successivo);


Avviso("fine GetTick");

}

//------------------------------------------------ -------------------------------------------------- -------------------------------------------------- ----


//================================================================================ = ==================================================================================================== == ============================


int NextType()

//>>>>>>>>>>>>>>>>>>>>>>>

{

Avviso("beg NextType");


if(OrderSelect(NextTick,SELECT_BY_TICKET )==true)

{

Prezzo Aperto=OrdinePrezzoAperto();

PrezzoChiudi=PrezzoChiudiOrdine();

}


if(ChiudiPrezzo>ApriPrezzo)CurType=OP_BUY;


altrimenti CurType=OP_VENDITA;




ritorno(curType);

Avviso("end CurType()");

//>>>>>>>>>>>>>>>>>>>>>>>>>>>

}//"end CurType()";


//------------------------------------------------ -------------------------------------------------- -----------------------------



//================================================================================ = ==================================================================================================== == ==============================


bool FastMACrossUp()

{


if(!(Delta==LastDelta))Alert("Delta=",DoubleToStr(Delta,5),"LastDelta=",DoubleToStr(LastDelta,5));


Avviso("UltimoDelta=",DoubleToStr(UltimoDelta,5));

Avviso("!(Delta==UltimoDelta)=",!(Delta==UltimoDelta));

if(((Delta!=UltimoDelta) && (Delta>=0) && (UltimoDelta<=0)))Alert("( Delta!=UltimoDelta)&&(Delta>=0)&&(UltimoDelta<=0)= " ,

(Delta!=UltimoDelta) && (Delta>=0) && (UltimoDelta<=0));

Avviso("(Delta>=0)=",(Delta>=0),"(UltimoDelta<=0)=",(UltimoDelta<=0));

if(Delta!=LastDelta)Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Avviso("(Delta>=0)=",(Delta>=0)," ( LastDelta<=0)=",(LastDelta<=0)," TickNum=",TickNum);

Avviso("(Delta>=0)=",(Delta>=0));

Avviso("UltimoDelta<=",(UltimoDelta<=0));

Avviso("!(Delta==UltimoDelta)&&((Delta>=0)&&(UltimoDelta<=0))=",!(Delta==UltimoDelta)&&((Delta>=0)&&(UltimoDelta<=0 )));

Avviso(((Delta!=UltimoDelta)&&((Delta>=0)&&(UltimoDelta<=0))));

Avviso(" (Delta!=UltimoDelta)= ",(Delta!=UltimoDelta)," (Delta>=0)= ",(Delta>=0)," (UltimoDelta<=0)= ",(UltimoDelta<= 0));

return((Delta!=UltimoDelta)&&(Delta>=0)&&(UltimoDelta<=0));

} //fine FastMACrossUp()

//------------------------------------------------ -------------------------------------------------- --------------------



//================================================================================ = ==================================================================================================== == =====================

bool FastMACrossDn()

{

if(!(Delta==LastDelta)&&(Delta<=0)&&(LastDelta>=0))Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5)) ;


Avviso("UltimoDelta=",DoubleToStr(UltimoDelta,5));

Avviso("!(Delta==UltimoDelta)=",!(Delta==UltimoDelta));

Avviso("(Delta<=0)=",(Delta<=0));

Avviso("UltimoDelta>=0",(UltimoDelta>=0));

if((Delta!=UltimoDelta) && (Delta<=0) && (UltimoDelta>=0))

Avviso("(Delta<=0)=",(Delta<=0),"(UltimoDelta>=0)=",(UltimoDelta>=0));

Avviso(" (Delta!=UltimoDelta)&&((Delta<=0)&&(UltimoDelta>=0))= ",(Delta!=UltimoDelta) && (Delta<=0) && (UltimoDelta>=0));

if(Delta!=LastDelta)Alert(" Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Avviso("(Delta<=0)=",(Delta<=0)," (UltimoDelta>=0)=",(UltimoDelta>=0)," TickNum=",TickNum);

Avviso(" (Delta!=UltimoDelta)&&(( Delta<=0)&&(UltimoDelta>=0))= ",(Delta!=UltimoDelta)&&((Delta<=0)&&(UltimoDelta>=0)) );

return((Delta!=UltimoDelta)&&(Delta<=0)&&(UltimoDelta>=0));

}//fine FastMACrossDn()

//------------------------------------------------ -------------------------------------------------- --------------------------------------



//================================================================================ = ==================================================================================================== == =========================================================================================

bool FastMAIsAbove()

{

Avviso("beg FastMAIsAbove()");

Avviso(" (Delta>=0)=",(Delta>=0)," (UltimoDelta>=0)=",(UltimoDelta>=0));

if(((Delta>=0)&&(Delta ultimo>=0)))

Avviso(" FastMA= ",DoubleToStr(FastMA,5)," SlowMA= ",DoubleToStr(SlowMA,5));

Avviso(" Delta= ",DoubleToStr(Delta,5)," LastDelta= ",DoubleToStr(LastDelta,5));

Avviso("end FastMAIsAbove()");

Avviso("(Delta==UltimoDelta)&&(Delta>=0)&&(UltimoDelta>=0)=",(Delta==UltimoDelta)&&(Delta>=0)&&(UltimoDelta>=0));

Avviso("end FastMAIsAbove()");

return((Delta==UltimoDelta)&&(Delta>=0)&&(UltimoDelta>=0));

}//fine FastMAIsAbove()

//================================================================================ = ==================================================================================================== == =================


//------------------------------------------------ -------------------------------------------------- ------------------

bool FastMAIsBelow()

{


return((Delta==UltimoDelta)&&(Delta<=0)&&(UltimoDelta<=0));

}//fine FastMAIsBelow()*/

"

//------------------------------------------------ -------------------------------------------------- ------------------

//************************************************** ******************************************

"


 
Dmitriy Voevodkin:

Init non può essere avviato in alcun modo, viene avviato automaticamente una volta all'avvio dell'indicatore/esperto, come DeInit.

In alternativa, potete creare una variabile booleana statica e usarla insieme aIsConnected(). E quando la connessione viene ripristinata all'arrivo di un nuovo tick, deve essere lanciata prima qualche funzione di inizializzazione propria. MaIsConnected() non dovrebbe essere usata in OnCalculate(), ma in OnTimer() e la mia funzione di inizializzazione dovrebbe essere usata all'inizio di OnCalculate().


Grazie, ci penserò, ho solo pensato che ci sono già soluzioni tipiche......

 
buyanov:

Tutto il codice

Wow, sono un sacco di avvisi.
 
Mihail Marchukajtes:

Grazie, ci penserò, pensavo solo che ci fossero soluzioni tipiche già disponibili......

Ho già scritto una confutazione alle parole di questa persona. OnItit() è una funzione ordinaria. Eseguitelo quando ne avete bisogno.

 
buyanov:

Tutto il codice


Te l'ho già detto - allega il codice usando il pulsante SRC. Scusa, sei completamente disimparato?

Ditemi, chi vorrebbe guardare questa robaccia?

 
Artyom Trishkin:

Ho già scritto la confutazione delle parole di quest'uomo. OnItit() è una funzione usuale. Si può eseguire quando se ne ha bisogno.


Beh, sì, mi chiedevo perché non chiamarlo quando ci si connette. Si è scoperto che si può :-)

 
buyanov:

Tutto il codice


Attenzione ai tipi variabili.

Buttare via tutti gli avvisi inutili

File:
test.mq4  42 kb