Ayuda a la codificación - página 248

 

Hola, amigos. Es gran indicador Dynamic_Momentum_Index para Thinkorswim. Es posible reescribirlo para metatrader 4?. O tal vez alguien tiene tal indicatorfor MT4?

declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' must be positive: " + DYMILengthLowerLimit);assert(DYMILength entre DYMILengthLowerLimit y DYMILengthUpperLimit, "'dymi length' debe estar entre el límite inferior y el superior: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 de precisión para el multiplicador emadef expIndex = si limitedLength == 0 entonces 1 sino max(1, bn - ceil(-5 / lg(1 - sf));def fromIndex = si isNan(expIndex) entonces 1 sino expIndex;def chg = precio - precio[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex to bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex to bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5));DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("Sobrecompra", GetColor(1));DYMI.AssignValueColor(if RSI > sobrecompra then DYMI.Color("Sobrecompra") else if RSI =Sobrecompra, "Sobrecompra", Alert.BAR, Sound.ring);Alert (DYMI=Sobrecompra then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else double.nan;Dotup.setStyle(curve.POINTS);Dotup.setPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal", Alert.BAR, Sound.ring);

Archivos adjuntos:
image_4.jpg  392 kb
 
olvus:
Hola, amigos. Es gran indicador Dynamic_Momentum_Index para Thinkorswim. Es posible reescribirlo para metatrader 4?. O tal vez alguien tiene tal indicatorfor MT4?

declare lower;input price = close;input stdevLength = 5;input avgOfStdevLength = 10;input DYMILength = 30;input DYMILengthLowerLimit = 3;input DYMILengthUpperLimit = 30;assert(DYMILengthLowerLimit > 0, "'dymi length lower limit' debe ser positivo: " + DYMILengthLowerLimit);assert(DYMILength entre DYMILengthLowerLimit y DYMILengthUpperLimit, "'dymi length' debe estar entre el límite inferior y el superior: " + DYMILength);def std = stdev(price, stdevLength);def ratio = std / Average(std, avgOfStdevLength);def dynamicLength = Floor(DYMILength / ratio);def limitedLength = if dynamicLength between DYMILengthLowerLimit and DYMILengthUpperLimit then dynamicLength else 0;def sf = 2 / (limitedLength + 1);def bn = Max(barNumber(), 0);# 10^-5 de precisión para el multiplicador emadef expIndex = si limitedLength == 0 entonces 1 sino max(1, bn - ceil(-5 / lg(1 - sf));def fromIndex = si isNan(expIndex) entonces 1 sino expIndex;def chg = precio - precio[1];def absChg = AbsValue(chg);def netChgAvg = fold indexN = fromIndex to bn + 1 with accuN do sf * (if isnan(getValue(chg, bn - indexN)) then 0 else getValue(chg, bn - indexN)) + (1 - sf) * accuN;def totChgAvg = fold indexT = fromIndex to bn + 1 with accuT do sf * (if isnan(getValue(absChg, bn - indexT)) then 0 else getValue(absChg, bn - indexT)) + (1 - sf) * accuT;def RSI = if totChgAvg != 0 and limitedLength != 0 then 50 * (netChgAvg / totChgAvg + 1) else RSI[1];plot DYMI = RSI;plot OverBought = 90;plot OverSold = 10;DYMI.DefineColor("OverBought", GetColor(5));DYMI.DefineColor("Normal", GetColor(7));DYMI.DefineColor("Sobrecompra", GetColor(1));DYMI.AssignValueColor(if RSI > sobrecompra then DYMI.Color("Sobrecompra") else if RSI =Sobrecompra, "Sobrecompra", Alert.BAR, Sound.ring);Alert (DYMI=sobrecompra then high*72 else double.nan;DotDn.setStyle(curve.POINTS);DotDn.setPaintingStrategy(paintingStrategy.arROW_DOWN);DotDn.setLineWeight(3);DotDn.setDefaultColor(color.wHITE);plot DotUp = if DYMI<=OverSold then low*-2 else double.nan;Dotup.setStyle(curve.POINTS);Dotup.setPaintingStrategy(paintingStrategy.arROW_UP);Dotup.setLineWeight(3);Dotup.setDefaultColor(color.wHITE);alert(Dotup, "Scalper Buy Signal", Alert.BAR, Sound.ring);alert(DotDn, "Scalper Buy Signal", Alert.BAR, Sound.ring);

olvus,

Ver este post : https://www.mql5.com/en/forum/172919/page4. Tal vez eso ayude

 

Hola mladen, me gustaría pedirte este favor.... ¿tienes la posibilidad de traducir este programa para MT4?

Gracias de todos modos..

ESTE ES EL PROGRAMA EN OTRO IDIOMA:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;

// var1= ((H/C[1])-1)*V;

// var2= ((L/C[1]-1)*V*(-1);

// domanda= MOV(var1,450,S);

// offerta= MOV(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, green, solid, 1);

// PlotChart(offerta, indzona1, red, solid, 1);ESTE ES MI TRABAJO PARA EL LENGUAJE MT4, PERO DESPUÉS DE LA ÚLTIMA ACTUALIZACIÓN, YA NO FUNCIONA:

#property indicador_separar_ventana

#property indicator_buffers 2

#property indicador_color1 Verde

#property indicator_color2 Rojo

#property indicator_width1 1

#property indicador_ancho2 1

extern int periodo=128;

double DOMANDA[];

double OFERTA[];

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

//| Función de inicialización del indicador personalizada ||.

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

int init()

{

IndicatorDigits(6);

IndicatorBuffers(2);

SetIndexBuffer(0,DOMANDA);

SetIndexBuffer(1,OFFERTA);

return(0);

}

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

//| Función de desinicialización del indicador personalizado ||.

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

int deinit()

{

//----

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int inicio()

{

int barras_contadas=IndicadorContado();

int limit = Bares - counted_bars;

double var_dom[10000];

double var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

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

{

var_dom = ((High/Close)-1)*Volumen;

var_off = ((Bajo/Cierre)-1)*Volumen * (-1);

DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);

OFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

return(0);

}//+------------------------------------------------------------------+

 
Stephan73:
Hola mladen, me gustaría pedirte este favor.... ¿tienes la posibilidad de traducir este programa para MT4?

Gracias de todos modos..

ESTE ES EL PROGRAMA EN OTRO LENGUAJE:// var: domanda(0), offerta(0), var1(0), var2(0), indzona1;

// var1= ((H/C[1])-1)*V;

// var2= ((L/C[1]-1)*V*(-1);

// domanda= MOV(var1,450,S);

// offerta= MOV(var2,450,S);

// indzona1= CreateWiewport(100);

// PlotChart(domanda, indzona1, green, solid, 1);

// PlotChart(offerta, indzona1, red, solid, 1);ESTE ES MI TRABAJO PARA EL LENGUAJE MT4, PERO DESPUÉS DE LA ÚLTIMA ACTUALIZACIÓN, YA NO FUNCIONA:

#property indicator_separate_window

#property indicator_buffers 2

#property indicador_color1 Verde

#property indicator_color2 Rojo

#property indicator_width1 1

#property indicador_ancho2 1

extern int periodo=128;

double DOMANDA[];

double OFERTA[];

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

//| Función de inicialización del indicador personalizada ||.

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

int init()

{

IndicatorDigits(6);

IndicatorBuffers(2);

SetIndexBuffer(0,DOMANDA);

SetIndexBuffer(1,OFFERTA);

return(0);

}

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

//| Función de desinicialización del indicador personalizado ||.

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

int deinit()

{

//----

//----

return(0);

}

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

//| Función de iteración del indicador personalizada ||

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

int inicio()

{

int barras_contadas=IndicadorContado();

int limit = Bares - counted_bars;

double var_dom[10000];

double var_off[10000];

ArraySetAsSeries(var_dom,true);

ArraySetAsSeries(var_off,true);

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

{

var_dom = ((High/Close)-1)*Volumen;

var_off = ((Bajo/Cierre)-1)*Volumen * (-1);

DOMANDA = iMAOnArray(var_dom,0,periodo,0,MODE_SMA,i);

OFERTA = iMAOnArray(var_off,0,periodo,0,MODE_SMA,i);

}

return(0);

}//+------------------------------------------------------------------+

Stephan

Aquí tienes :

Archivos adjuntos:
_stephan.mq4  2 kb
stephan.gif  61 kb
 
mladen:
Stephan Aquí tienes :

¡¡¡¡Sí, perfecto !!!!

¡¡¡Muchas gracias!!!

 

Sr. mladen, ¿es posible reescribir el indicador thinkorswim a indicador de metatrader 4 (post 2474)?

 

Hola a todos ,

Digamos que tengo una función que hace un bucle a través de todas las órdenes de mercado y selecciona la última usando lastTicket(). entonces uso ot = orderopentime() . cómo obtengo el valor de ot de tal manera que puedo usar el valor de ot en cualquier otra función del programa. no quiero llamar a checko() desde dentro del bucle a través de toda la función ej.

void checko()

{

if (ot>presetdatetime)

{

closeorder();

}

}

 
hermes:
Hola a todos ,

Digamos que tengo una función que hace un bucle a través de todas las órdenes de mercado y selecciona la última usando lastTicket(). entonces uso ot = orderopentime() . cómo obtengo el valor de ot de tal manera que puedo usar el valor de ot en cualquier otra función del programa. no quiero llamar a checko() desde dentro del bucle a través de toda la función ej.

void checko()

{

if (ot>presetdatetime)

{

closeorder();

}

}

hermes

Una pregunta : por último billete de orden te refieres al mayor (que suele ser el más reciente) o al menor (que suele ser el más antiguo)?

 
mladen:
hermes Una pregunta: ¿por último billete de orden te refieres al más grande (que suele ser el más reciente) o al más pequeño (que suele ser el más antiguo)?

Gracias Mladen, me refiero al más grande que es el orden más reciente.

 
hermes:
Gracias Mladen, me refiero a la mayor que es la orden más reciente.

entonces puede utilizar una función como esta :

void deleteGreatestTicketOrder(datetime timeLimit)

{

int largestTicketNo = -1;

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

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

largestTicketNo = MathMax(largestTicketNo,OrderTicket());

}

//

//

//

//

//

if (largestTicketNo>-1 )

{

if (OrderSelect(largestTicketNo,SELECT_BY_TICKET,MODE_TRADES))

if (OrderOpenTime()>timeLimit)

OrderDelete(largestTicketNo);

}

}

P.D.: no hace diferencia entre los símbolos o los eventuales números mágicos. Si necesitas que se comprueben esos también, entonces hay que añadir algún código adicional a la función anterior