[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 412

 

Buenos días a todos! mientras escribía un experto en meneo, estaba buscando puntos de salida más precisos y me encontré con un cruce entre el RSI (8) y el ADX(25). visualmente todo está bien cuando se opera manualmente en la demo.

Pregunta cómo escribir la condición de intersección de RSI (8) con ADX(25) DI + por ejemplo si, RSI (8) tiene un límite de 0 a 100, y ADX(25) no tiene límite. es decir, si usted lanza ADX en el gráfico sin límite y luego lanza RSI en él, entonces RSI escala por ADX máximo y mínimo. si ADX especificar límite de 0 a 100, entonces hay muy pocas intersecciones claras ADX con RSI.

¿Es posible definir el valor del RSI cuando es escalado por el ADX?

 
PapaYozh:

No
????... si no le importa, dé una respuesta más detallada... y sería genial si pudieras dar al menos algún script sencillo como ejemplo, que dejara claro para qué sirve la función WindowHandle
 
drimara: Es decir, si usted lanza ADX en el gráfico sin límites especificados y luego lanza RSI en él, entonces RSI escala por ADX máximo y mínimo. si ADX se especifica con límites de 0 a 100, entonces habrá muy pocos cruces obvios entre ADX y RSI.

¿Es posible definir el valor del RSI cuando es escalado por el ADX?

Y si luego lo mueves a la izquierda y a la derecha, los puntos de cruce comenzarán a desviarse
 
¿Existe un límite en el número de parámetros de un indicador no estándar, cuando se conecta a través de iCustom?

Tengo un indicador con unos 8 parámetros, he introducido todos los parámetros correctamente, lo he comprobado varias veces, pero en la compilación sigue apareciendo el error ')' - recuento de parámetros erróneos D:\NInstaTrader\Nexperto_2.mq4 (11, 280)
 
sss2019:
¿Existe un límite en el número de parámetros de un indicador no estándar, cuando se conecta a través de iCustom?

Tengo un indicador con unos 8 parámetros, he introducido todos los parámetros correctamente, lo he comprobado varias veces, pero en la compilación sigue apareciendo el error ')' - recuento de parámetros erróneos D:\NInstaTrader\Nexperto_2.mq4 (11, 280)
Mostrar código + parámetros de entrada en el indicador
 
7777877:
????... si no le importa, dé una respuesta más detallada... y sería genial si pudieras dar al menos algún script sencillo como ejemplo, que ayude a entender para qué sirve la función WindowHandle


Con tu nivel actual de conocimientos, no lo necesitas mucho.

Si tienes el deseo de convertirte en programador, entonces mastica la ciencia con la ayuda de Google. Consulta "descriptor de ventana site:mql4.com"

 
Pido a los gurús de la programación que me digan sobre mi pregunta, ¿es siquiera realista hacer este asesor?
 
stater:
Le pido al gurú de la programación que me diga sobre mi pregunta, ¿es siquiera realista hacer este asesor?

Todo es posible, si así lo quieres.

ver las siguientes cosas:

1) Control de apertura de la barra

2) OrderSend

Prueba y prueba, y los gurús corregirán

 

Aquí hay un EA para hacer que la orden se abre en el CIERRE de la vela, no sólo una cruz.

Que ayudará de antemano gracias.

//+------------------------------------------------------------------+

//| RSI_MA.mq4 ||

//| Copyright © 2008, AEliseev k800elik@gmail.com |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2008, Andrey E. k800elik@gmail.com"

#enlace de propiedad "http://www.metaquotes.net"


//---- parámetros de entrada

extern CCI_Per=14;

extern MA_Per=20;

extern CCI_close_Per=14;

extern double TakeProfit=500;

extern double StopLoss=150;

extern double Lots=0.01;

Depósito externo inttern=1000;

extern bool MM=false;

extern inttern _NúmeroMágico=1313;

extern int_Sleep=5000;


int LotA=1, Err=0;

int j=0; var2,var1;

int contador=0;

int ticket;

bool var3;


bool order=false;


//+------------------------------------------------------------------+

//| función de inicialización de expertos |

//+------------------------------------------------------------------+

int init()

{

Comentario ("CCI_MA v1.5 © 2008, Andrey E. k800elik@gmail.com");

return(0);

}

//+------------------------------------------------------------------+

//| función de desinicialización experta |

//+------------------------------------------------------------------+

int deinit()

{

/* int i, a1, a2;

//----

if (OrdersTotal()>0)

{

for (i=0; i==OrdersTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS);

if (OrderMagicNumber()==131313)

{

a1=CierreDeOrden(LoteA*Lotes,Pregunta,5,Rojo);

//a2=Cierre de la orden(var1,LoteA*Lotes,Pregunta,5,Rojo);

}

}

} */

return(0);

}

//+------------------------------------------------------------------+

//| función de inicio experto |

//+------------------------------------------------------------------+

int inicio()

{

//----

si (isNewBar()) EveryBar();

EveryTick();

//----

return(0);

}

//+------------------------------------------------------------------+


//+------------------------------------------------------------------+

//| Comprueba si hay una nueva barra |

//+------------------------------------------------------------------+

bool isNewBar()

{ static datetime TimeBar=0;

bool flag=false;

if(TimeBar!=Time[0])

{

TimeBar=Time[0];

flag=true;

}

return(flag);

}

//+------------------------------------------------------------------+

//| Ejecutar la acción cuando aparezca una nueva barra ||

//+------------------------------------------------------------------+

void EveryBar()

{

// Print("¡Ha llegado un nuevo bar!")

double MA[100], CCI[100], CCIclose[100], StandDevi[100];

int i,limit=Tamaño de la matriz(CCI);

doble SL, TP;

Dormir(_Dormir);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

TP = NormalizeDouble(Ask + TakeProfit*Point, Digits);

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

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

// comprueba si hay suficiente dinero para abrir un nuevo pedido

if(AccountFreeMargin()<(1000*Lots))

{

Print("No tenemos dinero. Margen libre = ", AccountFreeMargin());

return(0);

}

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

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

//---- repasar todos los puestos vacantes

for ( int z = _TotalPedidos - 1; z >= 0; z -- )

{

//---- si se produce un error en la selección de la posición, se pasa a la siguiente

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuar;

}

// si una posición se abre no para el símbolo actual, se salta

si ( OrderSymbol() != Symbol() ) continuar;

// si el MagicNumber no es igual a _MagicNumber, salta

// esta posición

if ( OrderMagicNumber() != _MagicNumber ) continue;

//---- si una posición BAY está abierta,

if ( OrderType() == OP_BUY )

{

//---- si el CCI cruza la línea 190 hacia abajo

if (((CCIclose[2]>190) && (CCIclose[1]<=100)) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit-MA_Per-2])

{

//---- posición de cierre

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 10, Green ) )

{

_GetLastError = GetLastError();

Print("Error de OrderClose # , _GetLastError );

Err=1;

return(-1);

}

}

// si la señal no ha cambiado, salir - es demasiado pronto para abrir

//nueva posición

si no

{ return(0); }

}

//---- si se abre una posición de venta,

if ( OrderType() = OP_SELL )

{

//---- si el CCI cruza la línea -190 hacia arriba,

if (((CCIclose[2]<-190) && (CCIclose[1]>=-300)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])

{

//---- posición de cierre

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 10, Red ) )

{

_GetLastError = GetLastError();

Print("Error de OrderClose # ", _GetLastError );

Err=2;

return(-1);

}

}

// si la señal no ha cambiado, salir - es demasiado pronto para abrir

// nueva posición

si no, return(0);

}

}

//+------------------------------------------------------------------+

//| si la ejecución ha llegado a este punto, no hay ninguna posición abierta

//| comprobar si es posible abrir una posición ||

//+------------------------------------------------------------------+

Dormir(_Dormir);

//---- si el CCI ha cruzado el MACD de abajo a arriba,

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Oferta + TakeProfit*Punto, Dígitos);

si ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<MA[limit-MA_Per-2])

{

//---- abrir posición BAY

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 5, SL, TP, "CCI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print( "OrderSend OP_BUY error # ", _GetLastError );

Err=3;

return(-1);

}

return(0);

}

//---- si el CCI ha cruzado el MACD de arriba a abajo,

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

si ((CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>MA[limit-MA_Per-2])

{

//---- abrir una posición de venta

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 5, SL, TP, "CCI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print("OrderSend OP_SELL error # ", _GetLastError );

Err=4;

return(-1);

}

return(0);

}

}

//+------------------------------------------------------------------+

//| Realiza los cálculos en cada cambio de precio |

//+------------------------------------------------------------------+

void EveryTick()

{

int i;

si (MM==true)

{

si (AccountBalance()>(2*Deposit)) LoteA=2;

si (AccountBalance()>(3*Deposit)) LoteA=3;

si (AccountBalance()>(4*Deposit)) LoteA=4;

si (AccountBalance()>(5*Deposit)) LoteA=5;

si (AccountBalance()>(6*Deposit)) LoteA=6; if (AccountBalance()>(6*Deposit); LotA=6;

si (AccountBalance()>(7*Deposit)) LoteA=7;

si (AccountBalance()>(8*Deposit)) LoteA=8;

si (AccountBalance()>(9*Deposit)) LoteA=9;

si (AccountBalance()>(10*Deposit)) LoteA=10;

si (AccountBalance()>(11*Deposit)) LoteA=11;

si (AccountBalance()>(12*Deposit)) LoteA=12;

si (AccountBalance()>(13*Deposit)) LoteA=13;

si (AccountBalance()>(14*Deposit)) LoteA=14;

si (AccountBalance()>(15*Deposit)) LoteA=15;

si (AccountBalance()>(16*Deposit)) LoteA=16;

si (AccountBalance()>(17*Deposit)) LoteA=17;

si (AccountBalance()>(18*Deposit)) LoteA=18;

si (AccountBalance()>(19*Deposit)) LoteA=19;

si (AccountBalance()>(20*Deposit)) LoteA=20;

}

int _GetLastError = 0, _OrdersTotal = OrdersTotal();

int z;

doble SL, TP;

double MA[100], CCI[100], CCIclose[100], StandDevi[100];

int limit=Tamaño de la matriz(CCI);

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

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

switch(Err)

{

caso 1:

for ( z=_OrdersTotal - 1; z >= 0; z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuar;

}

si ( OrderSymbol() != Symbol() ) continuar;

if ( OrderMagicNumber() != _MagicNumber ) continue;

if ( OrderType() == OP_BUY )

{

if (((CCIclose[2]>300) && (CCIclose[1]<=300) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit-MA_Per-2])

{

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )

{

_GetLastError = GetLastError();

Print("CASE OrderClose error # , _GetLastError );

Err=1;

return(-1);

}

Si no, Err=0;

}

}

}

romper;

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

caso 2:

for ( z=_OrdersTotal - 1; z >= 0; z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print("OrderSelect( ",z, ", SELECT_BY_POS ) - Error #", _GetLastError);

continuar;

}

si ( OrderSymbol() != Symbol() ) continuar;

if ( OrderMagicNumber() != _MagicNumber ) continue;

if ( OrderType() = OP_SELL )

{

if (((CCIclose[2]<-300) && (CCIclose[1]>=-300) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<=MA[limit-MA_Per-2])

{

if(!OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )

{

_GetLastError = GetLastError();

Print("CASE OrderClose error # ", _GetLastError );

Err=2;

return(-1);

}

Si no, Err=0;

}

}

}

romper;

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

caso 3:

SL = NormalizeDouble(Bid - StopLoss*Point, Digits);

TP = NormalizeDouble(Oferta + TakeProfit*Punto, Dígitos);

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 7, SL, TP, "AI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print( "CASE OrderSend OP_BUY error # ", _GetLastError );

Err=3;

return(-1);

}

Si no, Err=0;

romper;

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

caso 4:

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(Ask - TakeProfit*Point, Digits);

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 7, SL, TP, "AI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print("CASE OrderSend OP_SELL error # ", _GetLastError );

Err=4;

return(-1);

}

Si no, Err=0;

romper;

}

}

 
Neo777:

Aquí hay un EA para hacer que la orden se abre en el CIERRE de la vela, no sólo una cruz.

Me gustaría saber cómo abrir el pedido.


¿Y cómo piensas saber que la barra se cerrará con este tick? ¿Tal vez por la apertura de un nuevo bar?

El código se inserta mediante el botón SRC

Razón de la queja: