Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 300

 
buyanov:

Pero nada ha cambiado.

Tanto el error como la advertencia permanecen.

Dame todo el código, no sólo una parte. ¿Esperas que todo el mundo lo adivine? Entonces pregunte aquí - aquí todo el mundo sabe todo sobre todo a la vez.

 

Te doy el código completo.

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:

Te doy el código completo.

Es simplemente enorme...

 

Todo el código

"

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#versión de propiedad "Cross20170703 1.00"


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

externo int Period_FastMA=4;

externo int Período_SlowMA=8;


extern int MaxTickNum=30;

externo int MaxAttempt=10;

externo int k_slippage=1;


externo doble k_SL=10.0;//*Punto()

externo doble k_TP=30.0;//*Punto()


extern double TrailDist=30.0;//*Punto()

k_lots dobles externos = 0.3;

bool externo ExFin=falso;



En t//*********************************************** ***** ************************************


res,

contar,

i,

Marca siguiente=0,

tiempo,

fin de semana,

TiempoInicioMlSec,

FinMlSecTiempo,

tiempo delta,

Intento,

deslizamiento = 5,

TickNum=0,

posición,

billete,

MaxInterval1000,

número cruzado = 0,

comas=4,

att,

intento,



errar;



doble //*********************************************** ***** *******************************


total,

un montón,

propagacion,


rápido,

lentoma,


delta,


último delta,

AnteriorDelta,


Comis=0.00004,

precio de apertura,

precio de cierre,

SL,

tp,


ganancia,

GANANCIA;


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


Primera Cruz = falso,

SiguienteCruz=falso,

CurTipo,

exito=verdadero

habilitar = verdadero,


empezar,

Comenzar,

CompraAbierta=falso,

SellOpened=false;


cuerda//*********************************************** ***** ************************************************ *


rec,

calle,

registro,

BegTimeActual,

EndTimeActual,

hora actual,

StrCur,

cadena de súplica,

FinCadena;

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


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

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

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




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

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


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


int OnDeinit(const int res)

{

Alert("pedir OnDeinit()");

err=StringToInteger((cadena)err);

retorno(res);

Alert("fin OnDeinit()");

}

//OnDeinit();-----------

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




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

anular ExpertStop()

{

Alerta("ParadaExperto");

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

{

ExpertoEliminar();

OnDeinit(res);

}

} //finalizar parada experta


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



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

int ErrorDescripción()

{

Alert("pedir ErrorDescription");

cambiar (error)

{ caso 0: err="Sin errores"; romper;

caso 1: err="Sin error, pero resultado desconocido"; romper;

caso 2: err="Error general"; romper;

caso 3: err="Parámetros no válidos"; romper;

caso 4: err="El servidor comercial está ocupado"; romper;

caso 5: err="Versión antigua del terminal de cliente"; romper;

caso 6: err="Sin conexión con el servidor comercial"; romper;

caso 7: err="Derechos insuficientes"; romper;

caso 8: err="Solicitudes demasiado frecuentes"; romper;

caso 9: err="Operación ilegal que interrumpe el servidor"; romper;

case 64: err="Cuenta bloqueada"; romper;

case 65: err="Número de cuenta incorrecto"; romper;

case 128: err="Tiempo de espera de oferta vencido"; romper;

caso 129: err="Precio incorrecto"; romper;

case 130: err="Paradas incorrectas"; romper;

caso 131: err="Volumen incorrecto"; romper;

caso 132: err="Mercado Cerrado"; romper;

caso 133: err="Comercio prohibido"; romper;

caso 134: err="No hay suficiente dinero para completar la operación"; romper;

case 135: err="Precio cambiado"; romper;

caso 136: err="Sin precios"; romper;

caso 137: err="Broker ocupado"; romper;

case 138: err="Nuevos precios"; romper;

case 139: err="El pedido está bloqueado y ya se está procesando"; romper;

case 140: err="Solo compra permitida"; romper;

case 141: err="Demasiadas solicitudes"; romper;

caso 145: err="No se permite la modificación porque la orden está demasiado cerca del mercado"; romper;

caso 146: err="Subsistema comercial ocupado"; romper;

case 147: err="El bróker prohíbe el uso de la fecha de vencimiento de la orden"; romper;

case 148: err="El número de órdenes abiertas y pendientes ha alcanzado el límite establecido por el bróker.";break;

//

caso 4000: err="Sin error"; romper;

case 4001: err="Puntero de función inválido"; romper;

case 4002: err="El índice de matriz está fuera de rango"; romper;

case 4003: err="No hay memoria para la pila de funciones"; romper;

case 4004: err="Stack overflow after recursive call"; romper;

case 4005: err="No hay memoria en la pila para pasar parámetros"; romper;

case 4006: err="Memoria insuficiente para parámetro de cadena"; romper;

case 4007: err="Memoria insuficiente para cadena temporal"; romper;

case 4008: err="Cadena no inicializada"; romper;

case 4009: err="Cadena sin inicializar en matriz"; romper;

case 4010: err="Memoria insuficiente para matriz de cadenas"; romper;

case 4011: err="Cadena demasiado larga"; romper;

case 4012: err="Resto cero"; romper;

case 4013: err="División por cero"; romper;

caso 4014: err="Comando desconocido"; romper;

case 4015: err="Transición incorrecta"; romper;

case 4016: err="Array no inicializado"; romper;

caso 4017: err="llamadas DLL no permitidas"; romper;

caso 4018: err="No se puede cargar la biblioteca"; romper;

caso 4019: err="No se puede llamar a la función"; romper;

case 4020: err="No se permiten llamadas a funciones de biblioteca externa"; romper;

case 4021: err="No hay suficiente memoria para la cadena devuelta por la función"; romper;

caso 4022: err="Sistema ocupado"; romper;

case 4050: err="Número no válido de parámetros de función"; romper;

case 4051: err="Valor de parámetro de función no válido"; romper;

case 4052: err="Error interno de función de cadena"; romper;

caso 4053: err="Error de matriz"; romper;

caso 4054: err="Uso incorrecto de la matriz de series temporales"; romper;

case 4055: err="Error de indicador personalizado "; romper;

caso 4056: err="Los arreglos son incompatibles"; romper;

caso 4057: err="Error al procesar variables globales"; romper;

case 4058: err="Variable global no encontrada"; romper;

caso 4059: err="Función no permitida en modo de prueba"; romper;

case 4060: err="Función no permitida"; romper;

caso 4061: err="Error al enviar correo"; romper;

case 4062: err="Parámetro de cadena esperado"; romper;

case 4063: err="Se espera un parámetro entero"; romper;

caso 4064: err="doble esperado"; romper;

case 4065: err="Se espera una matriz como parámetro"; romper;

caso 4066: err="Datos históricos solicitados en estado de actualización"; romper;

caso 4067: err="Error al ejecutar una operación comercial"; romper;

case 4099: err="Fin del archivo"; romper;

case 4100: err="Error al trabajar con el archivo"; romper;

caso 4101: err="Nombre de archivo no válido"; romper;

case 4102: err="Demasiados archivos abiertos"; romper;

caso 4103: err="No se puede abrir el archivo"; romper;

case 4104: err="Modo de acceso a archivos incompatible"; romper;

caso 4105: err="No se seleccionaron pedidos"; romper;

case 4106: err="Carácter desconocido"; romper;

case 4107: err="Parámetro de precio incorrecto para la función comercial"; romper;

case 4108: err="Número de billete no válido"; romper;

case 4109: err="No se permite comerciar. Debe habilitar la opción Permitir que EA opere en las propiedades de EA."; romper;

case 4110: err="No se permiten posiciones largas. Debe comprobar las propiedades del EA."; romper;

case 4111: err="No se permiten posiciones cortas. Debe comprobar las propiedades del EA."; romper;

case 4200: err="El objeto ya existe"; romper;

case 4201: err="Se solicitó una propiedad de objeto desconocido"; romper;

case 4202: err="El objeto no existe"; romper;

case 4203: err="Tipo de objeto desconocido"; romper;

case 4204: err="No hay nombre de objeto"; romper;

case 4205: err="Error de coordenadas del objeto"; romper;

case 4206: err="No se encontró la subventana especificada"; romper;

predeterminado: err="Error al trabajar con el objeto";

}

Alert("fin ErrorDescripción");

volver (error);

}//Finalizar descripción de error()

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


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

int ObtenerSiguiente(NextTick)

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

{

Alert("pedir GetNext(NextTick)");

Alerta(SiguienteTick);

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

Alert("Recuento=",Recuento,"NextTick=",NextTick);

Alerta(" ");

Alerta(RefreshRates(),Count,NextTick);

retorno(SiguienteTick);

Alerta(SiguienteTick);

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

Alert("finalizar GetNext(NextTick)");

}

//finalizar ObtenerSiguiente(NextTick)

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


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

void OnTick()

{

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

Alert("pedir 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

ObtenerSiguiente(NextTick);

Alert("NextTick=",NextTick);

Delta=NormalizeDouble(FastMA-SlowMA,Digits()); Alert("pedir OnTick");

Alerta(Delta,Dígitos());

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

Alerta("finalizar OnTick");

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

}// fin (fin de OnTick)

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

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



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



vacío inicial ()

{

Alerta(" ");

Alerta("ruega Inicial()");

Alerta(" ");



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

alerta(stringbeg);


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

alerta (registro);


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

alerta (registro);


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

alerta (registro);


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

alerta (registro);


Alerta("finalizar inicial()");


}//fin de inicio()

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




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

int GetTick(NextTick)


{


Alert("pedir GetTick");


while (RefreshRates()==falso)

SiguienteTick++;

Alert("NextTick=",NextTick);


OrderSelect(NextTick,SELECT_BY_TICKET);


Ganancia=BeneficioPedido();


Alert(DoubleToStr(Beneficio, Dígitos));


ObtenerSiguiente(NextTick);


Alert("finalizar GetTick");

}

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


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


int SiguienteTipo()

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

{

Alert("iniciar NextType");


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

{

PrecioAbrir=PrecioAbrirPedido();

PrecioCerrar=PrecioCerrarPedido();

}


if(ClosePrice>OpenPrice)CurType=OP_BUY;


más CurType=OP_SELL;




return(curType);

Alert("end CurType()");

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

}//"finalizar CurType()";


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



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


booleano FastMACrossUp()

{


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


Alert("ÚltimoDelta=",DoubleToStr(ÚltimoDelta,5));

Alert("!(Delta==ÚltimoDelta)=",!(Delta==ÚltimoDelta));

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

(Delta!=ÚltimoDelta) && (Delta>=0) && (ÚltimoDelta<=0));

Alert("(Delta>=0)=",(Delta>=0),"(LastDelta<=0)=",(LastDelta<=0));

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

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

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

Alert("ÚltimoDelta<=",(ÚltimoDelta<=0));

Alert("!(Delta==ÚltimoDelta)&&((Delta>=0)&&(ÚltimoDelta<=0))=",!(Delta==ÚltimoDelta)&&((Delta>=0)&&(ÚltimoDelta<=0 )));

Alerta(((Delta!=ÚltimoDelta)&&((Delta>=0)&&(ÚltimoDelta<=0))));

Alert(" (Delta!=LastDelta)= ",(Delta!=LastDelta)," (Delta>=0)= ",(Delta>=0)," (LastDelta<=0)= ",(LastDelta<= 0));

return((Delta!=ÚltimoDelta)&&(Delta>=0)&&(ÚltimoDelta<=0));

} //finalizar FastMACrossUp()

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



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

booleano FastMACrossDn()

{

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


Alert("ÚltimoDelta=",DoubleToStr(ÚltimoDelta,5));

Alert("!(Delta==ÚltimoDelta)=",!(Delta==ÚltimoDelta));

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

Alert("ÚltimoDelta>=0",(ÚltimoDelta>=0));

if((Delta!=ÚltimoDelta) && (Delta<=0) && (ÚltimoDelta>=0))

Alert("(Delta<=0)=",(Delta<=0),"(LastDelta>=0)=",(LastDelta>=0));

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

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

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

Alert(" (Delta!=ÚltimoDelta)&&((Delta<=0)&&(ÚltimoDelta>=0))= ",(Delta!=ÚltimoDelta)&&((Delta<=0)&&(ÚltimoDelta>=0)) );

return((Delta!=ÚltimoDelta)&&(Delta<=0)&&(ÚltimoDelta>=0));

}//fin FastMACrossDn()

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



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

bool FastMAIsAbove()

{

Alert("rogar FastMAIsAbove()");

Alert(" (Delta>=0)=",(Delta>=0)," (ÚltimoDelta>=0)=",(ÚltimoDelta>=0));

if(((Delta>=0)&&(ÚltimoDelta>=0)))

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

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

Alert("finalizar FastMAIsAbove()");

Alert("(Delta==ÚltimoDelta)&&(Delta>=0)&&(ÚltimoDelta>=0)=",(Delta==ÚltimoDelta)&&(Delta>=0)&&(ÚltimoDelta>=0));

Alert("finalizar FastMAIsAbove()");

return((Delta==ÚltimoDelta)&&(Delta>=0)&&(ÚltimoDelta>=0));

}//fin FastMAIsAbove()

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


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

bool FastMAIsBelow()

{


return((Delta==ÚltimoDelta)&&(Delta<=0)&&(ÚltimoDelta<=0));

}//finalizar FastMAIsBelow()*/

"

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

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

"


 
Dmitriy Voevodkin:

Init no se puede iniciar de ninguna manera, se inicia automáticamente una vez cuando se inicia el indicador/experto, al igual que DeInit.

Como alternativa, puede crear una variable booleana estática y utilizarla junto conIsConnected(). Y cuando la conexión se restablece a la llegada de un nuevo tick, al principio debe lanzarse su propia función de inicialización. PeroIsConnected() no debería usarse en OnCalculate(), sino en OnTimer() y mi propia función de inicialización debería usarse al principio de OnCalculate().


Gracias, me lo pensaré, es que pensaba que ya hay soluciones típicas......

 
buyanov:

Todos los códigos

Vaya, son muchas alertas.
 
Mihail Marchukajtes:

Gracias, lo pensaré, es que pensé que ya había soluciones típicas disponibles......

Ya he escrito una refutación a las palabras de esta persona. OnItit() es una función ordinaria. Póngalo en marcha cuando lo necesite.

 
buyanov:

Todos los códigos


Ya te lo dije: adjunta el código usando el botón SRC. Lo siento, ¿es usted completamente inculto?

Dígame, ¿quién querría ver este pedazo de basura?

 
Artyom Trishkin:

Ya he escrito la refutación de las palabras de este hombre. OnItit() es una función habitual. Puede ejecutarlo cuando lo necesite.


Bueno, sí, me preguntaba por qué no llamarlo cuando se conecta. Resulta que se puede :-)

 
buyanov:

Todos los códigos


Cuidado con los tipos de variables.

Desechar todas las alertas innecesarias

Archivos adjuntos:
test.mq4  42 kb