Ayuda a la codificación - página 246

 
macerina:
Gracias Mladen por el código ... ¿Tiene esto la doble comparación macd y 50 crossover como usted ha explicado en la lógica anterior. Gracias de antemano

macerina

La diferencia es que en la versión gráfica de aspen la señal de entrada secundaria es un cruce de rsi y su línea de señal, mientras que en la versión de metatrader la señal secundaria es un cruce de rsi de una línea 50. La parte de Macd es la misma (debe tomar la señal de barra cerrada - así es como se hace en la versión gráfica de aspen)

 

gracias por la información mladen ... es posible establecer la opción en el mismo indicador para la selección de 50 línea de cruce y la señal de la línea de cruce ...

Gracias de antemano

 
mladen:
sulaimoney Todo está bien con esos procedimientos. Adjunto un simple indicador que muestra que todo está bien cuando las llamadas a esos dos procedimientos se ejecutan una tras otra. Revisa el resto del código ya que el error no está en esos dos procedimientos

Hola Mladen

He revisado el código y he encontrado algunos errores que he reemplazado.

Ahora estoy tratando de utilizar el valor de

double lastorderprice = 0;

Y

int bscount = 0;

Como variables en un ámbito global con el ea de tal manera que puedan ser llamados desde por ejemplo void NewOrder()

// OnEveryTick

void LastBuySellOrder() // Recorre todas las órdenes abiertas para seleccionar la última orden (compra/venta) OnEveryTick

{

double últimoprecio de la orden = 0;

datetime lastTime = 0;

datetime closeTime = 0;

int lastTicket = -1; // Ninguna abierta.

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId

&&( OrderType() == OP_BUY | OrderType() == OP_SELL )

&& OrderOpenTime() >= lastTime && OrderCloseTime() == closeTime

&& OrderTicket() > lastTicket )

{

lastTime = OrderOpenTime();

lastTicket = OrderOpenPrice();

closeTime = OrderCloseTime();

lastTicket = OrderTicket();

}

return(lastTicket);

}

si no

Print("Error de OrderSelect() - ", ErrorDescription(GetLastError()));

}

void PendingStopOrderCount()

{

int bscount = 0;

for (int i=OrdersTotal()-1; i >= 0; i--)

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderSymbol() == Symbol())

if (OrderMagicNumber() == OrderId)

si (OrderType() == OP_BUYSTOP )

{

bscount++;

}

}

si no

{

Print("Error de OrderSend() - ", ErrorDescription(GetLastError());

}

}

// Si existe OpBuy u OpSell

void NuevoPedido()

{

if (bscount==0)

{

BuyStopPending();

}

}

 

HI

¿Este indicador es reparador? Si es así, ¿cuántas barras de vuelta?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4

Archivos adjuntos:
 
toldmikl:
HI

¿Este indicador es reparador? Si es así, ¿cuántas barras atrás?

xps_v8_oscillator.ex4xps_v8_oscillator.mq4
Sí, es un indicador de vientos solares con periodos fijados automáticamente en función del marco temporal:

1 minuto : periodo = 2880

5 minutos : periodo = 576

15 minutos : periodo = 192

30 minutos : periodo = 96

1 hora y más: periodo = 48

 

OK, pero yo uso esto en el gráfico fuera de línea M2 :S Así que no es normal Timeframe

 
toldmikl:
OK pero yo uso esto en el gráfico fuera de línea M2 :S Así que no es normal Timeframe

Pruébalo y lo verás por ti mismo (usa algo como autorefresh para forzar al indicador a refrescar todas las barras desde o simplemente, cuando se construyan suficientes barras nuevas, ve a parámetros, no cambies nada y haz clic en OK). Preste atención a los periodos en los que cambia la tendencia que hará.

Mejor que yo tratando de explicar lo que está mal en el código de los vientos solares y convencer a nadie

 

No puedo cambiar el período sólo puedo ver el código fuente aquí es:

#property indicador_separar_window

#property indicador_mínimo 0

#property indicador_máximo 1

#property indicator_buffers 3

#propiedad indicador_color2 C'72,49,255'

#property indicator_color3 C'255,49,72'

#property indicator_width2 6

#propiedad indicador_ancho3 6

int periodo;

extern bool alarm=false;

double ExtBuffer0[];

double ExtBuffer1[];

double ExtBuffer2[];

double alertBar;

double last;

int init() {

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

switch ( Period() )

{

caso 1: period = 2880;break;

caso 5: period = 576;break;

caso 15: period = 192;break;

caso 30: period = 96;break

caso 60: period = 48;break

caso 240: period = 48;break

caso 1440: period = 48;break

caso 10080: period = 48;break;

por defecto : period = 48;break;

}

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

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Dígitos+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName(");// X :-)";

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int inicio() {

int límite;

int barras_contadas=IndicadorContado();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

double precio;

double MinL=0;

double MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Barras_contadas;

for(int i=0; i<limit; i++)

{ MaxH = Alto;

MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];

precio = (Alto+Bajo)/2;

Valor = 0,33*2*((precio-MinL)/(MaxH-MinL)-0,5) + 0,67*Valor1;

Valor=MathMin(MathMax(Valor,-0.999),0.999);

ExtBuffer0=0,5*MathLog((1+Valor)/(1-Valor))+0,5*Fish1;

Valor1=Valor;

Fish1=ExtBuffer0;

}

bool up = TRUE;

for(i=limit-2; i>=0; i--)

{

actual=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))||(current<0)) up= false;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarm && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alerta("OSC... Posible tendencia a la baja en ",Period()," ",Symbol());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarm && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alerta("OSC... Posible tendencia al alza en ",Period()," ",Symbol());

alertBar = Bars;

last = 1;

}

}

}/Finalizar bucle

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Comercia como un JEFE", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

¿Y?

 
toldmikl:
No puedo cambiar el período sólo puedo ver el código fuente aquí es:

#property ventana_de_separación

#propiedad indicador_mínimo 0

#propiedad indicador_máximo 1

#propiedad indicator_buffers 3

#propiedad indicador_color2 C'72,49,255'

#property indicator_color3 C'255,49,72'

#property indicator_width2 6

#propiedad indicador_ancho3 6

int periodo;

extern bool alarm=false;

double ExtBuffer0[];

double ExtBuffer1[];

double ExtBuffer2[];

double alertBar;

double last;

int init() {

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

switch ( Period() )

{

caso 1: period = 2880;break;

caso 5: period = 576;break;

caso 15: period = 192;break;

caso 30: period = 96;break

caso 60: period = 48;break

caso 240: period = 48;break

caso 1440: period = 48;break

caso 10080: period = 48;break;

por defecto : period = 48;break;

}

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

SetIndexStyle(0,DRAW_NONE);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexStyle(2,DRAW_HISTOGRAM);

IndicatorDigits(Dígitos+1);

SetIndexBuffer(0,ExtBuffer0);

SetIndexBuffer(1,ExtBuffer1);

SetIndexBuffer(2,ExtBuffer2);

IndicatorShortName(");// X :-)";

SetIndexLabel(0, NULL);

SetIndexLabel(1, NULL);

SetIndexLabel(2, NULL);

return(0);

}

int deinit()

{

//----

ObjectDelete("XPS");

ObjectDelete("XPS2");

ObjectDelete("XPS3");

//----

return(0);

}

int inicio() {

int límite;

int barras_contadas=IndicadorContado();

double prev,current,old;

double Value=0,Value1=0,Value2=0,Fish=0,Fish1=0,Fish2=0;

double precio;

double MinL=0;

double MaxH=0;

if(counted_bars>0) counted_bars--;

limit=Barras_contadas;

for(int i=0; i<limit; i++)

{ MaxH = Alto;

MinL = Low[Lowest(NULL,0,MODE_LOW,period,i)];

precio = (Alto+Bajo)/2;

Valor = 0,33*2*((precio-MinL)/(MaxH-MinL)-0,5) + 0,67*Valor1;

Valor=MathMin(MathMax(Valor,-0.999),0.999);

ExtBuffer0=0,5*MathLog((1+Valor)/(1-Valor))+0,5*Fish1;

Valor1=Valor;

Fish1=ExtBuffer0;

}

bool up = TRUE;

for(i=limit-2; i>=0; i--)

{

actual=ExtBuffer0;

prev=ExtBuffer0;

if (((current0))||(current<0)) up= false;

if (((current>0)&&(prev0)) up= true;

if(!up) {

ExtBuffer2=1;

ExtBuffer1=0;

if (alarm && i==0 && last != 2 && ExtBuffer1 == 0 && Bars>alertBar)

{

Alerta("OSC... Posible tendencia a la baja en ",Period()," ",Symbol());

alertBar = Bars;last = 2;

}

}

else {

ExtBuffer1=1;

ExtBuffer2=0;

if (alarm && i==0 && last != 1 && ExtBuffer2 == 0 && Bars>alertBar)

{

Alerta("OSC... Posible tendencia al alza en ",Period()," ",Symbol());

alertBar = Bars;

last = 1;

}

}

}/Finalización del bucle

ObjectDelete("XPS");

ObjectCreate("XPS", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS","!XPS v8", 28, "Arial Black", C'46,46,46');

ObjectSet("XPS", OBJPROP_CORNER, 2);

ObjectSet("XPS", OBJPROP_BACK, 0);

ObjectSet("XPS", OBJPROP_XDISTANCE, 6);

ObjectSet("XPS", OBJPROP_YDISTANCE, 8);

ObjectDelete("XPS2");

ObjectCreate("XPS2", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS2","!XPS v8", 28, "Arial Black", Silver);

ObjectSet("XPS2", OBJPROP_CORNER, 2);

ObjectSet("XPS2", OBJPROP_BACK, 0);

ObjectSet("XPS2", OBJPROP_XDISTANCE, 4);

ObjectSet("XPS2", OBJPROP_YDISTANCE, 10);

ObjectDelete("XPS3");

ObjectCreate("XPS3", OBJ_LABEL, 2, 0, 0);

ObjectSetText("XPS3", "Comercia como un JEFE", 9, "Arial Black", Silver);

ObjectSet("XPS3", OBJPROP_CORNER, 2);

ObjectSet("XPS3", OBJPROP_BACK, 0);

ObjectSet("XPS3", OBJPROP_XDISTANCE, 7);

ObjectSet("XPS3", OBJPROP_YDISTANCE, 3);

return(0);

}

¿Y qué?

Está aplicando el período 48 para cualquier marco de tiempo que no sea un marco de tiempo estándar (como los gráficos fuera de línea de "2 minutos")

Para las versiones de los vientos solares para los que se puede cambiar el período de cálculo, ver este hilo : https://www.mql5.com/en/forum/179650

 

Saludos a ustedes gurús, Por favor ayúdenme a editar este script y dejar SOLO orden, tamaño de lote, compra/venta. Ya tengo un EA que coloca take profit/stop loss automáticamente entrando en conflicto con ese indy.

Este script abre automáticamente cualquier número de órdenes de mercado que usted especifique en el MENÚ a la vez, pero actualmente sólo abre una orden incluso si usted introduce 5 órdenes. Por favor, ayúdenme a solucionar este ERROR y a ELIMINAR completamente el take profit/stop loss del SCRIPT

Gracias por su ayuda

Archivos adjuntos: