![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Cómo solucionar la falta de estructura de datos de tipo mixto
Hola amigos,
Tengo muchos mensajes privados pidiéndome ayuda con algunos trozos de código.
Aquí podéis publicar vuestras preguntas relacionadas con el MQL4, y haré lo posible por responderlas.Hola,
Me gustaría aprovechar su invitación para plantear el siguiente problema.
Cuál sería la mejor solución para almacenar y ordenar una lista de símbolos en función de sus cambios de precio ya que no se puede utilizar una datastructure de tipo mixto como: EURUSD->1.29, USDGBP->0.22 ?
No hay enum y no hay estructuras de datos de tipo mixto que puedan contener una cadena y un valor doble relacionado en mql4. Las soluciones que se me ocurren son o bien utilizar un fichero, pero eso requeriría una actividad de lectura y escritura en disco casi constante. O utilizar tres arrays; 1 para la lista de símbolos, uno para el almacenamiento y seguimiento de los valores del lugar del índice y otro para los valores reales.
Parece que uno tiene que codificar alrededor de un problema muy básico (simple). Lo único que me gustaría es comparar todos los pares de euros entre sí para la fuerza relativa. ¿Cómo resolvería esto, qué estructura de datos recomendaría?
¡Gracias por cualquier respuesta o indicación a este novato !
Bibberpool
Búsqueda de indicadores de fuerza relativa y correlación
Hola,
¿Cuál sería la mejor solución para almacenar y ordenar una lista de símbolos en función de sus cambios de precio ya que no se puede utilizar una estructura de datos de tipo mixto como: EURUSD->1.29, USDGBP->0.22 ?
...
Parece que uno tiene que codificar alrededor de un problema muy básico (simple). Lo único que me gustaría es comparar todos los pares de euros entre sí para la fuerza relativa. ¿Cómo resolverías esto, qué estructura de datos recomendarías?
¡Gracias por cualquier respuesta o indicaciones a este novato ! BibberpoolHola Bibberpool,
Busca en este sitio de Forex TSD indicadores de Fuerza Relativa e indicadores de Correlación...
Este tipo de indicadores están diseñados para analizar diferentes pares y precios y sus fuerzas relativas.
Puede que encuentres buenos ejemplos para lo que quieres hacer.
Espero que esto te ayude,
Robert
Gracias por su respuesta
Hola Bibberpool,
Busque en este sitio de Forex TSD indicadores de Fuerza Relativa e indicadores de Correlación...
Este tipo de indicadores están diseñados para analizar diferentes pares y precios y sus fuerzas relativas.
Puede que encuentres buenos ejemplos para lo que quieres hacer.
Espero que esto te ayude,
RobertHola, gracias por tu respuesta y ciertamente buscaré en los hilos sugeridos. Sin embargo, hay tanto código alrededor.
Mientras tanto, he hecho un pequeño prototipo en C. Sólo tomé una ordenación de inserción básica ya que los datos consisten sólo en pequeños conjuntos y actualicé esa rutina para actualizar una matriz de cadenas en consecuencia.
Lo trasladaré (copiar/pegar) a mi primer programa en mql4 a finales de esta semana. Aquí está el código, tal vez sea útil para otros o alguien quiera comentarlo para crear algo mejor.
#include
int main(void) {
int max = 5;
int array[5] = { 3, 5, 2, 1, 4 };
char *symbl[5] = { "EURUSD", "EURGBP", "EURJPY", "EURCHF", "EURCAD" };
int idx = 0;
int swp = 0;
int tmp = 0;
char *tmpsymb = NULL;
printf("--- before\n");
for(idx = 0; idx <= max - 1; idx++) {
printf("%d - %s\n", array, symbl);
}
for(idx = 1 ; idx <= max - 1; idx++) {
swp = idx;
while(swp > 0 && array[swp] < array[swp - 1]) {
tmp = array[swp];
tmpsymb = symbl[swp];
array[swp] = array[swp - 1];
symbl[swp] = symbl[swp - 1];
array[swp - 1] = tmp;
symbl[swp - 1] = tmpsymb;
swp--;
}
}
printf("--- after\n");
for(idx = 0; idx <= max - 1; idx++) {
printf("%d - %s\n", array, symbl);
}
return 0;
}
el programa debe imprimir:
--- antes
3 - EURUSD
5 - EURGBP
2 - EURJPY
1 - EURCHF
4 - EURCAD
--- después
1 - EURCHF
2 - EURJPY
3 - EURUSD
4 - EURCAD
5 - EURGBP
Buscando indies del autor Kravchuk
Hola Comunidad,
Estoy buscando indies del autor Kravchuk, que diseña indies para vender. Yo estaba dispuesto a buyu pero no podemos recomcile en la forma de pago (no cantidad!?). ¿Alguien tiene sus indies ft.dejavu, ft.rainbow,barstatline,diver,linerenko? Agradecería su ayuda. Gracias
Hola Comunidad, estoy buscando indies del autor Kravchuk, que diseña indies para vender. Estaba dispuesto a comprarlos pero no podemos recomendar la forma de pago (¡no la cantidad!). ¿Alguien tiene sus indies ft.dejavu, ft.rainbow,barstatline,diver,linerenko? Agradecería su ayuda. Gracias
Hola bershk
Si su solicitud no es obsoleta todavía podemos ayudar aquí - hemos trabajado con algunos de estos indicadores.
Por favor, tenga en cuenta que debe comprar la licencia del autor y no proporcionamos ningún material descompilado u obtenido ilegalmente.
Si usted está interesado en comprar - aquí están los precios actuales del autor:
Dejavu - $20; Rainbow - $15; Barstatline - $10; Diver - $20; LineRenko - $15.
Si necesita ayuda para comprarlos por favor escríbanos a info@raitsoft.com, le ayudaremos a comprar la licencia sin ninguna comisión.
hola amigos ...................
he empezado a aprender a programar en mql4, y para empezar estoy analizando idicadores y ea .
Tengo el indicador "daily_close _line" y he mirado el código y me han salido estas dos líneas de código que no tengo ni idea de lo que están haciendo
y cómo funcionan.
Si no se puede, se puede ver el código y decir lo que está pasando.
gracias de antemano.
eran
//* my_DailyOpen_indicator
//*
//* Revision 1.1 2005/11/13 Midnite
//* Initial DailyOpen indicator
//* based pm
//*
#property copyright "Midnite"
#property link "me@home.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_style1 2
#property indicator_width1 1
double TodayOpenBuffer[];
extern int TimeZoneOfData= 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TodayOpenBuffer);
SetIndexLabel(0,"Open");
SetIndexEmptyValue(0,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int lastbar;
int counted_bars= IndicatorCounted();
if (counted_bars>0) counted_bars--;
lastbar = Bars-counted_bars;
DailyOpen(0,lastbar);
return (0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int DailyOpen(int offset, int lastbar)
{
int shift;
int tzdiffsec= TimeZoneOfData * 3600;
double barsper30= 1.0*PERIOD_M30/Period();
bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------
// lastbar+= barsperday+2; // make sure we catch the daily open
lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------
for(shift=lastbar;shift>=offset;shift--){
TodayOpenBuffer[shift]= 0;
if (ShowDailyOpenLevel){
if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change
TodayOpenBuffer[shift]= Open[shift];
TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line
}
else{
TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];
}
}
}
return(0);
}ERAN123
Hace lo siguiente: encuentra el precio de apertura diario (teniendo en cuenta TimeZoneOfData como cambio de zona horaria) y dibuja esa línea a través de ese día. Aquí hay una imagen en la que es fácil ver cómo se dibuja el mismo precio de apertura diaria a través del día:
he empezado a aprender a programar en mql4, y para empezar estoy analizando idicadores y ea.
Tengo el indicador "daily_close _line" y he mirado el código y he sacado estas dos líneas de código que no tengo ni idea de lo que están haciendo
y cómo funcionan.
Si no se puede hacer nada, se puede hacer un seguimiento del código y decirme qué está pasando.
gracias de antemano.
eran
//* my_DailyOpen_indicator
//*
//* Revision 1.1 2005/11/13 Midnite
//* Initial DailyOpen indicator
//* based pm
//*
#property copyright "Midnite"
#property link "me@home.net"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_style1 2
#property indicator_width1 1
double TodayOpenBuffer[];
extern int TimeZoneOfData= 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,TodayOpenBuffer);
SetIndexLabel(0,"Open");
SetIndexEmptyValue(0,0.0);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int lastbar;
int counted_bars= IndicatorCounted();
if (counted_bars>0) counted_bars--;
lastbar = Bars-counted_bars;
DailyOpen(0,lastbar);
return (0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int DailyOpen(int offset, int lastbar)
{
int shift;
int tzdiffsec= TimeZoneOfData * 3600;
double barsper30= 1.0*PERIOD_M30/Period();
bool ShowDailyOpenLevel= True;//<<<<---------- thise line-------------------------------
// lastbar+= barsperday+2; // make sure we catch the daily open
lastbar= MathMin(Bars-20*barsper30-1, lastbar);//<<<<-------------------thise line-----------------------
for(shift=lastbar;shift>=offset;shift--){
TodayOpenBuffer[shift]= 0;
if (ShowDailyOpenLevel){
if(TimeDay(Time[shift]-tzdiffsec) != TimeDay(Time[shift+1]-tzdiffsec)){ // day change
TodayOpenBuffer[shift]= Open[shift];
TodayOpenBuffer[shift+1]= 0; // avoid stairs in the line
}
else{
TodayOpenBuffer[shift]= TodayOpenBuffer[shift+1];
}
}
}
return(0);
}ERAN123
Hace lo siguiente: encuentra el precio de apertura diario (teniendo en cuenta TimeZoneOfData como cambio de zona horaria) y dibuja esa línea a través de ese día. Aquí hay una imagen en la que es fácil ver cómo se dibuja el mismo precio de apertura diaria a través del día:
sory i ment esta línea :
double barsper30= 1.0*PERIOD_M30/Period();
y esta otra también.
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
¿para qué sirve el "20" y el "-1" y cómo funcionan las 2 líneas juntas?
muchas gracias.
Originalmente escribí algo más.
Olvídese de esas líneas : son, por alguna razón tratando de limitar el inicio donde los valores se empiezan a calcular (y que debe ser algunas horas de la barra más antigua en el gráfico). Lo que el codificador quería conseguir con ello quizá sólo lo sepa él
sory i ment esta línea :
double barsper30= 1.0*PERIOD_M30/Period();
y este también
lastbar= MathMin(Bars-20*barsper30-1, lastbar);
¿para qué sirve el "20" y el "-1" y cómo funcionan las 2 líneas juntas?
gracias a ti, un loot.gracias mi amigo .....you me ayudó![](https://c.mql5.com/forextsd/smiles/party.png)