Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 869
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Lo siento, es una lástima tener que repetir lo mismo cien veces.
Llevo casi un mes mirando como una oveja a la puerta. No entiendo nada.
La tarea consiste en calcular una media móvil menor con una media móvil de 13,
es decir, calcular un período de 12 basado en 13.
Hola, ¿podría alguno de los estimados gurús comprobar el inicio de mi primer EA? ¿Es posible seguir adelante? ¿Quizás me he perdido algo? Estaría muy agradecido por cualquier dato concreto. He visto en algún lugar del foro cómo hacer que sólo se abra una posición, pero no lo copié y ahora no lo encuentro. Ayuda, por favor.
Gracias.
// Versión de prueba de Expert Advisor
//--------------------------------------------------------------------
//------Вводные данные:-----------------------------------------------------------
input double Lotes = 0.1; //Lote
input int MovingPeriod =5; // МА período de cálculo
input int MovingShift =0; // MA shift
input int InpBandsPeriod=10; // Periodo de las Bandas Bollinger
input int InpBandsShift=0; // Desplazamiento de las Bandas Bollinger
input double InpBandsDeviations=2.0; // Desviación de las Bandas de Bollinger
input int K_Period=30; // %K periodo del Estocástico
input int D_Period=10; // %D Periodo estocástico
input int Slowdawn =8; // Ralentización estocástica
color de entrada clMainStoch =Amarillo; // color de la línea estocástica principal
color de entrada clSignalStoch =Red; // color de la línea de señal estocástica
// -----Declare las variables globales:------------------------------------------
double MA_0, MA_1, MA_2; // Valor de la MA en las barras 0, 1 y 2
double MB_0, MB_1, MB_2; // Valor del Bollinger medio en las barras 0, 1 y 2
double ExtUpperBuffer[]; // valor de la línea Bollinger superior
double ExtLowerBuffer[]; // Valor de la línea Bollinger inferior
double Delta_0, Delta_1; // diferencia entre los valores de Bollinger superior e inferior ...
// ...Líneas de Bollinger en las barras 0 y 1
double Yellow_0, Yellow_1, Yellow_2; // Valor principal en las barras 0, 1 y 2
double Rojo_0, Rojo_1, Rojo_2; // señal de valor en las barras 0, 1 y 2
//-------Поехали!----------------------------------------------------------------
int start() //Función especial start
{
//Llamada a la función del indicador MA
MA_0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
MA_1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1);
MA_2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2);
//retroalimentación a la función de las Bandas de Bollinger
MB_0=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,0);
MB_1=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,1);
MB_2=iBands(NULL,0,InpBandsPeriod,InpBandsShift,InpBandsDeviations,PRICE_CLOSE,2);
Delta_0=iBands(ExtUpperBuffer[0]-ExtLowerBuffer[0]);
Delta_1=iBands(ExtUpperBuffer[1]-ExtLowerBuffer[1]);
//Llamada a la función estocástica
Yellow_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,0);
Yellow_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,1);
Yellow_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_MAIN,2);
Red_0=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,0);
Red_1=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,1);
Red_2=iStochastic(NULL,0,K_Period,D_Period,Slowdawn,MODE_SMA,0,MODE_SIGNAL,2);
//-------Ситуации по Стохастику:-----------------------------------------------------
//El mercado está sobrecomprado
double MOB()=(Amarillo_0>=80 && Rojo_0>=80); //Variable local
//El mercado está sobrevendido.
double MOS()=(Amarillo_0<=20 && Rojo_0<=20); //Variable local
//El mercado es normal.
double MN()=(20<Amarillo_0<80 && 20<Rojo_0<80); //Variable local
//situación crítica
double MC1()=(20<Amarillo_0<80 && Rojo_0<=20); //Variable local
double MC2()=(20<Amarillo_0<80 && Rojo_0>=80); //Variable local
double MC3()=(20<Red_0<80 && Yellow_0<=20); //Variable local
double MC4()=(20<Red_0<80 && Yellow_0>=80); //Variable local
//-------Example(my)order to open position-----------------------------------------------------
if (Delta_0 > Delta_1 && MOB()==true) //El mercado está sobrecomprado pero delta se expande
{ si (MB_2 > MB_1 && MB_1 < MB_0) /Ruptura de Bollinger inferior
OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point);//abrir orden de compra
Alert("GetLastError()); //Mensaje de un error
Alert("Posición abierta BAY con lotes("Lots"),precio("Ask")."); //Mensaje de compra
Además, las posiciones BAY (al igual que las de venta) pueden abrirse en diferentes condiciones, y dependiendo de las condiciones en las que se haya abierto la posición (por ejemplo, BAY), habrá diferentes condiciones de cierre. (por ejemplo, BAY), habrá diferentes condiciones de cierre.
¿Cómo traduzco esto en MKL?
Además, las posiciones BAY (al igual que las de venta) pueden abrirse en diferentes condiciones, y dependiendo de las condiciones en las que se haya abierto la posición (por ejemplo, BAY), habrá diferentes condiciones de cierre. (por ejemplo, BAY), habrá diferentes condiciones de cierre.
¿Cómo traduzco esto en MKL?
Seleccionamos el orden en el bucle. Si es una Compra y todos los demás datos (símbolo, mago, lo que sea) cumplen el criterio de tener que cerrarla en "condiciones adecuadas de cierre", entonces la cerramos si hay "condiciones adecuadas de cierre".
Para mí es un poco vago, pero después de indagar un poco creo que lo entenderé. Muchas gracias por no dar la espalda y sentar cátedra desde las alturas del conocimiento, como algunos compañeros del país soviético.
Descubrí cómo cerrarlo de esta manera:
//-------Ejemplo(mío) de una orden de apertura de posición con cierre vinculante (por ticket)-----------------------------------------------------
/Variable local que abre una orden BAY (en lugar de la línea 63)
int Ticket_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point))
//-------Entonces el cierre de esta orden particular podría ser el siguiente:-----------------------------------------------------
if (Ticket_1()==true) //si se ha abierto la orden nº 1, entonces...
{ si (Amarillo_0>Rojo_0 && (Amarillo_0-Rojo_0)<(Amarillo_1-Rojo_1)) //El amarillo es mayor que el rojo, contracción(condición)
{ si (MA_2 < MA_1 && MA_1 > MA_0);} //Rojo por encima del medio(condición)
else (Amarillo_0>Rojo_0 && (Amarillo_0-Rojo_0)>(Amarillo_1-Rojo_1)) //Amarillo sobre rojo, expansión(condición)
{ si (MB_2 < MB_1 && MB_1 > MB_0);} //Ruptura de Bollinger superior (condición)
bool Ans=CerrarOrden(Billete,Lote,Oferta,0); //...cerrar la orden (bloqueovariable)
Alert("Intentando cerrar la orden con Bid("Lots"),price("Ask"). Esperando respuesta...");
if (Ans==true) // Ha funcionado :)
{
Alerta ("Orden cerrada de BAY por lote("Lotes"),Precio de cierre("Oferta");
break; // Salir del bucle de cierre de posición
}
}
Por favor, haz un análisis, bien en el post anterior también. Perdona que sea tan terco, pero ya ves que eres el único que contesta... Gracias.
Para mí es un poco vago, pero después de indagar un poco creo que lo entenderé. Muchas gracias por no apartarse ni dar lecciones desde las cumbres del conocimiento, como algunos compañeros del país soviético.
Pensé en cerrarlo de esta manera:
...Por favor, haz un análisis, y sobre el puesto anterior también. Perdón por la insistencia, pero ya ves, eres el único que responde... Gracias.
Bueno, es un poco confuso, ¿no?
1. tiene que determinar el hecho de la ocurrencia de la condición para cerrar la orden
2. En el ciclo, se revisan todas las posiciones abiertas y, cuando se encuentra la orden de compra necesaria, se cierra.
Este es un ejemplo de ciclo:
Es decir, para cerrar la orden de compra en el símbolo actual (en el gráfico donde se ejecuta el Asesor Experto) y con un número mágico de 100500 (por ejemplo), debe llamar a la función así
No tienes que escribir el número 100500, normalmente el número mágico ya está fijado en el EA a una variable, por ejemplo int Magic = 100500; Entonces tienes que escribir Magic en lugar de 100500
No escribí nada en el bucle donde se debe cerrar la posición seleccionada, ya que debería llamar a la función para cerrar el pedido según la entrada. Normalmente se trata de una llamada a una función completa con los códigos de retorno del servidor comercial que se manejan. Puede escribir allí un simple comando para cerrar la orden seleccionada OrderClose() para comprobarlo;
Es mucho más fácil de leer de esa manera. Lo siento.
También es posible editar un post antiguo, para no crear duplicados ;)
Todavía es posible editar un post antiguo para evitar duplicados ;)
Está un poco nublado.
1) Determinar el hecho de que la condición para cerrar la orden de compra se ha producido
2. En el bucle, revisa todas las posiciones abiertas y, cuando encuentra la orden de compra necesaria, la cierra.
Este es un ejemplo de ciclo:
Es decir, para cerrar la orden de compra en el símbolo actual (en el gráfico donde se ejecuta el Asesor Experto) y con un número mágico de 100500 (por ejemplo), debe llamar a la función así
No tienes que escribir el número 100500, normalmente el número mágico ya está fijado en el EA a una variable, por ejemplo int Magic = 100500; Entonces tienes que escribir Magic en lugar de 100500
No escribí nada en el bucle donde se debe cerrar la posición seleccionada, ya que debería llamar a la función para cerrar el pedido según la entrada. Normalmente se trata de una llamada a una función completa con los códigos de retorno del servidor comercial que se manejan. Puede escribir allí un simple comando para cerrar la orden seleccionada OrderClose() para comprobarlo;