Ayuda a la codificación - página 606

 

Hola,

Tengo un problema con mi indicador. Este código funciona muy bien:

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

//| RSMA.mq4 |

//| |

//| |

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

#property copyright "Tartut"

#property link ""

#property indicator_separate_window

#property indicator_minimum -40

#property indicator_maximum 100

#property indicator_level1 19

#property indicator_level2 -19

#property indicator_level3 0

#property indicator_buffers 3

#property indicator_color1 Lime

#property indicator_color2 Yellow

#property indicator_color3 MediumOrchid

extern int RSI_Period = 9;

extern int RSI_Applied_Price = 0;//0=close, 1=open, 2=high, 3=low, 4=(high+low)/2, 5=(high+low+close)/3, 6=(high+low+close+close)/4

extern int MA_Period = 12;

extern int MA_Method = 1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

double MA_Array[],RSI[], Histo[];

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators setting

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);

SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

IndicatorShortName("RSMA");

SetIndexBuffer(0,Histo);

SetIndexLabel(0,"RSMA");

SetIndexBuffer(1,MA_Array);

SetIndexLabel(1,"MA("+MA_Period+")");

SetIndexBuffer(2,RSI);

SetIndexLabel(2,"RSI("+RSI_Period+")");

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int limit = Bars - IndicatorCounted() - 1;

//---- indicator calculation

ArrayResize(RSI,limit+1);

ArrayResize(MA_Array,limit+1);

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

{

RSI= iRSI(NULL,0,RSI_Period,RSI_Applied_Price,i);

}

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

{

MA_Array = iMAOnArray(RSI,0,MA_Period,0,MA_Method,i);

}

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

{

Histo = RSI-MA_Array;

}

//----

return(0);

}

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

Me gustaría eliminar la línea RSI y EMA, pero cuando lo hago, el valor de cambio de histograma. :/

Agrego adjunto dos indicadores. ¡Ayúdenme!

Lo siento por mi Inglés.

Archivos adjuntos:
 
Tartut:
Hola,

Tengo un problema con mi indicador. Este código funciona muy bien:

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

//| RSMA.mq4 |

//| |

//| |

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

#property copyright "Tartut"

#property link ""

#property indicator_separate_window

#property indicator_minimum -40

#property indicator_maximum 100

#property indicator_level1 19

#property indicator_level2 -19

#property indicator_level3 0

#property indicator_buffers 3

#property indicator_color1 Lime

#property indicator_color2 Yellow

#property indicator_color3 MediumOrchid

extern int RSI_Period = 9;

extern int RSI_Applied_Price = 0;//0=close, 1=open, 2=high, 3=low, 4=(high+low)/2, 5=(high+low+close)/3, 6=(high+low+close+close)/4

extern int MA_Period = 12;

extern int MA_Method = 1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

double MA_Array[],RSI[], Histo[];

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators setting

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);

SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

IndicatorShortName("RSMA");

SetIndexBuffer(0,Histo);

SetIndexLabel(0,"RSMA");

SetIndexBuffer(1,MA_Array);

SetIndexLabel(1,"MA("+MA_Period+")");

SetIndexBuffer(2,RSI);

SetIndexLabel(2,"RSI("+RSI_Period+")");

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int limit = Bars - IndicatorCounted() - 1;

//---- indicator calculation

ArrayResize(RSI,limit+1);

ArrayResize(MA_Array,limit+1);

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

{

RSI= iRSI(NULL,0,RSI_Period,RSI_Applied_Price,i);

}

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

{

MA_Array = iMAOnArray(RSI,0,MA_Period,0,MA_Method,i);

}

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

{

Histo = RSI-MA_Array;

}

//----

return(0);

}

//+------------------------------------------------------------------+[/CODE]

I would like delete RSI and EMA line, but when I do it, histogram change value. :/

I add attachment two indicators. Help me!

Sorry for my English.

Cambia el inicio por esto :

[CODE]//+------------------------------------------------------------------+

//| RSMA.mq4 |||||||||

//| |

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

#property copyright "Tartut"

#property link ""

#propiedad indicador_separación_ventana

#propiedad indicador_mínimo -40

#propiedad indicador_máximo 100

#propiedad indicador_nivel1 19

#propiedad indicador_nivel2 -19

#propiedad indicador_nivel3 0

#propiedad indicator_buffers 1

#property indicador_color1 Cal

extern int RSI_Period = 9;

extern int RSI_Applied_Price = 0;//0=close, 1=open, 2=high, 3=low, 4=(high+low)/2, 5=(high+low+close)/3, 6=(high+low+close)/4

extern int MA_Period = 12;

extern int MA_Método = 1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

double MA_Array[],RSI[], Histo[];

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

//| Función de inicialización de los indicadores personalizados

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

int init()

{

IndicatorBuffers)3);

//---- ajuste de los indicadores
 
mladen:

Cambia el comienzo por este :

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

//| RSMA.mq4 |

//| |

//| |

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

#property copyright "Tartut"

#property link ""

#property indicator_separate_window

#property indicator_minimum -40

#property indicator_maximum 100

#property indicator_level1 19

#property indicator_level2 -19

#property indicator_level3 0

#property indicator_buffers 1

#property indicator_color1 Lime

extern int RSI_Period = 9;

extern int RSI_Applied_Price = 0;//0=close, 1=open, 2=high, 3=low, 4=(high+low)/2, 5=(high+low+close)/3, 6=(high+low+close+close)/4

extern int MA_Period = 12;

extern int MA_Method = 1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

double MA_Array[],RSI[], Histo[];

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers)3);

//---- indicators setting

¡Sí! Es un trabajo. Gracias.

 

Tengo el siguiente problema. Mi indicador no cambia el valor de la barra actual. Debo Refrescar el gráfico.

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

//| RSMA Histogram.mq4 |

//| |

//| |

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

#property copyright "Tartut"

#property link ""

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Lime

#property indicator_minimum -35

#property indicator_maximum 35

#property indicator_level1 19

#property indicator_level2 -19

#property indicator_level3 0

//#property indicator_color2 Yellow

//#property indicator_color3 MediumOrchid

extern double OverSold=-19.0;

extern double OverBought=19.0;

extern int RSI_Period=9;

extern int RSI_Applied_Price=0;

extern int MA_Period=12;

extern int MA_Method=1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

extern bool ShowArrows=true;

extern color OverSoldColor=Gold;

extern color OverBoughtColor = Gold;

extern string arrowsIdentifier = "RSMA arrows";

extern int arrowsWidth = 1;

extern int IDWindow=1;

extern string _Divergence="<>";

extern string _CBars="<>";

extern int CBars=99;

extern bool CheckDivergence=false;

extern bool CheckSlowDownMomentum=false;

extern string DivergenceIndentifier="RSMA Divergence";

double MA_Array[],RSI[],Histo[];

int trend[];

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(3);

//---- indicators setting

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);

SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

IndicatorShortName("RSMA Histogram");

SetIndexBuffer(0,Histo);

SetIndexLabel(0,"RSMA");

SetIndexBuffer(1,MA_Array);

SetIndexLabel(1,"MA("+MA_Period+")");

SetIndexBuffer(2,RSI);

SetIndexLabel(2,"RSI("+RSI_Period+")");

return(0);

}

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

//| |

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

int deinit()

{

deleteArrows();

fnDeleteAllDivergence();

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int limit=Bars-IndicatorCounted();

if(limit<0) return(-1);

if(limit>0) limit--;

//---- indicator calculation

ArrayResize(trend,limit+1);

ArrayResize(RSI,limit+1);

ArrayResize(MA_Array,limit+1);

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

{

RSI=iRSI(NULL,0,RSI_Period,RSI_Applied_Price,i);

}

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

{

MA_Array=iMAOnArray(RSI,0,MA_Period,0,MA_Method,i);

}

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

{

Histo=RSI-MA_Array;

if(Histo>OverBought)

trend=1;

else if(Histo<OverSold)

trend=-1;

manageArrow(i);

}

if(CheckDivergence==true)

{

int x= CBars/3;

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

{

double open0=iOpen(NULL,0,i);

double close0= iClose(NULL,0,i);

double open1 = iOpen(NULL,0,i+1);

double close1= iClose(NULL,0,i+1);

double open2 = iOpen(NULL,0,i+2);

double close2 = iClose(NULL, 0, i+2);

bool momentum = true;

if(CheckSlowDownMomentum==true)

{

double bar0 = MathAbs(open0-close0);

double bar1 = MathAbs(open1-close1);

double bar2 = MathAbs(open2-close2);

if(bar0<bar1 && bar1<bar2)

momentum=true;

else

momentum=false;

}

//PUT

if(Histo<Histo && Histo<Histo && open0<close0 && open1<close1 && open2<close2 && momentum==true)

{

double high0 = iHigh(NULL, 0, i);

double high2 = iHigh(NULL, 0, i+2);

TrendCreate(DivergenceIndentifier+"Sub"+i,Time,Histo,Time,Histo,Red,STYLE_SOLID,1,IDWindow);

TrendCreate(DivergenceIndentifier+"Main"+i,Time,high2,Time,high0,Red,STYLE_SOLID,1,0);

}

else if(Histo>Histo && Histo>Histo && open0>close0 && open1>close1 && open2>close2 && momentum==true)

{

double low0 = iLow(NULL, 0, i);

double low2 = iLow(NULL, 0, i+2);

TrendCreate(DivergenceIndentifier+"Sub"+i,Time,Histo,Time,Histo,Red,STYLE_SOLID,1,IDWindow);

TrendCreate(DivergenceIndentifier+"Main"+i,Time,low2,Time,low0,Red,STYLE_SOLID,1,0);

}

}

}

return(0);

}

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

void manageArrow(int i)

{

if(ShowArrows)

{

deleteArrow(Time);

if(trend ==-1) drawArrow(i,OverBoughtColor,159,false);

if(trend == 1) drawArrow(i,OverSoldColor ,159,true );

}

}

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

//| |

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

void fnDeleteAllDivergence()

{

string lookFor=DivergenceIndentifier;

string objectName;

int lookForLength=StringLen(lookFor);

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

{

objectName=ObjectName(i);

if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);

}

}

//

//

//

//

//

void drawArrow(int i,color theColor,int theCode,bool up)

{

string name=arrowsIdentifier+":"+Time;

double gap=3.0*iATR(NULL,0,10,i)/4.0; //20

//

//

//

//

//

ObjectCreate(name,OBJ_ARROW,0,Time,0);

ObjectSet(name,OBJPROP_ARROWCODE,theCode);

ObjectSet(name,OBJPROP_COLOR,theColor);

ObjectSet(name,OBJPROP_WIDTH,arrowsWidth);

if(up)

ObjectSet(name,OBJPROP_PRICE1,High+gap);

else ObjectSet(name,OBJPROP_PRICE1,Low-gap);

}

//

//

//

//

//

void deleteArrows()

{

string lookFor = arrowsIdentifier+":";

int lookForLength = StringLen(lookFor);

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

{

string objectName=ObjectName(i);

if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);

}

}

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

//| |

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

void deleteArrow(datetime time)

{

string lookFor=arrowsIdentifier+":"+time; ObjectDelete(lookFor);

}

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

//| |

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

//

//

//

//

//

bool TrendCreate(string name="Line1",

datetime time1=0, // first point time

double price1=0, // first point price

datetime time2=0, // second point time

double price2=0, // second point price

const color clr=clrRed, // line color

const ENUM_LINE_STYLE style=STYLE_SOLID, // line style

const int width=1,

const int window=0 // line width // highlight to move

)

{

//--- reset the error value

ResetLastError();

//--- create a trend line by the given coordinates

if(!ObjectCreate(name,OBJ_TREND,window,time1,price1,time2,price2))

{

Print(__FUNCTION__,": failed to create a trend line! Error code = ",GetLastError());

return(false);

}

//--- set line color

ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

//--- set line display style

ObjectSetInteger(0,name,OBJPROP_STYLE,style);

//--- set line width

ObjectSetInteger(0,name,OBJPROP_WIDTH,width);

ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

//--- enable (true) or disable (false) the mode of continuation of the line's display to the right

ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);

//--- successful execution

return(true);

}

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

//| |

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

void CleanPoint(int i,double &first[],double &second[])

{

if((second!=EMPTY_VALUE) &&(second !=EMPTY_VALUE))

second=EMPTY_VALUE;

else

if((first!=EMPTY_VALUE) && (first!=EMPTY_VALUE) && (first==EMPTY_VALUE))

first=EMPTY_VALUE;

}

//

//

//

//

//

void PlotPoint(int i,double &first[],double &second[],double &from[])

{

if(first==EMPTY_VALUE)

{

if(first==EMPTY_VALUE)

{

first = from;

first = from;

second = EMPTY_VALUE;

}

else

{

second = from;

second = from;

first = EMPTY_VALUE;

}

}

else

{

first = from;

second = EMPTY_VALUE;

}

}

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

//---

 
Tartut:
Tengo el siguiente problema. Mi indicador no cambia el valor de la barra actual. Debo Refrescar el gráfico.

Prueba así:

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

//| RSMA Histogram.mq4 |

//| |

//| |

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

#property copyright "Tartut"

#property link ""

#property indicator_separate_window

#property indicator_buffers 1

#property indicator_color1 Lime

#property indicator_minimum -35

#property indicator_maximum 35

#property indicator_level1 19

#property indicator_level2 -19

#property indicator_level3 0

//#property indicator_color2 Yellow

//#property indicator_color3 MediumOrchid

extern double OverSold=-19.0;

extern double OverBought=19.0;

extern int RSI_Period=9;

extern int RSI_Applied_Price=0;

extern int MA_Period=12;

extern int MA_Method=1;// 0=SMA, 1=EMA, 2=SMMA, 3=LWMA

extern bool ShowArrows=true;

extern color OverSoldColor=Gold;

extern color OverBoughtColor = Gold;

extern string arrowsIdentifier = "RSMA arrows";

extern int arrowsWidth = 1;

extern int IDWindow=1;

extern string _Divergence="<>";

extern string _CBars="<>";

extern int CBars=99;

extern bool CheckDivergence=false;

extern bool CheckSlowDownMomentum=false;

extern string DivergenceIndentifier="RSMA Divergence";

double MA_Array[],RSI[],Histo[];

double trend[];

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(4);

//---- indicators setting

SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);

SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);

SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);

IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

IndicatorShortName("RSMA Histogram");

SetIndexBuffer(0,Histo);

SetIndexLabel(0,"RSMA");

SetIndexBuffer(1,MA_Array);

SetIndexLabel(1,"MA("+MA_Period+")");

SetIndexBuffer(2,RSI);

SetIndexLabel(2,"RSI("+RSI_Period+")");

SetIndexBuffer(3,trend);

return(0);

}

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

//| |

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

int deinit()

{

deleteArrows();

fnDeleteAllDivergence();

return(0);

}

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

//| Custom indicator iteration function |

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

int start()

{

int counted_bars=IndicatorCounted();

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

int limit = MathMin(Bars-counted_bars,Bars-1);

//---- indicator calculation

Comment(limit);

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

{

RSI=iRSI(NULL,0,RSI_Period,RSI_Applied_Price,i);

}

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

{

MA_Array=iMAOnArray(RSI,0,MA_Period,0,MA_Method,i);

}

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

{

Histo=RSI-MA_Array;

if(Histo>OverBought)

trend=1;

else if(Histo<OverSold)

trend=-1;

manageArrow(i);

}

if(CheckDivergence==true)

{

int x= CBars/3;

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

{

double open0=iOpen(NULL,0,i);

double close0= iClose(NULL,0,i);

double open1 = iOpen(NULL,0,i+1);

double close1= iClose(NULL,0,i+1);

double open2 = iOpen(NULL,0,i+2);

double close2 = iClose(NULL, 0, i+2);

bool momentum = true;

if(CheckSlowDownMomentum==true)

{

double bar0 = MathAbs(open0-close0);

double bar1 = MathAbs(open1-close1);

double bar2 = MathAbs(open2-close2);

if(bar0<bar1 && bar1<bar2)

momentum=true;

else

momentum=false;

}

//PUT

if(Histo<Histo && Histo<Histo && open0<close0 && open1<close1 && open2<close2 && momentum==true)

{

double high0 = iHigh(NULL, 0, i);

double high2 = iHigh(NULL, 0, i+2);

TrendCreate(DivergenceIndentifier+"Sub"+i,Time,Histo,Time,Histo,Red,STYLE_SOLID,1,IDWindow);

TrendCreate(DivergenceIndentifier+"Main"+i,Time,high2,Time,high0,Red,STYLE_SOLID,1,0);

}

else if(Histo>Histo && Histo>Histo && open0>close0 && open1>close1 && open2>close2 && momentum==true)

{

double low0 = iLow(NULL, 0, i);

double low2 = iLow(NULL, 0, i+2);

TrendCreate(DivergenceIndentifier+"Sub"+i,Time,Histo,Time,Histo,Red,STYLE_SOLID,1,IDWindow);

TrendCreate(DivergenceIndentifier+"Main"+i,Time,low2,Time,low0,Red,STYLE_SOLID,1,0);

}

}

}

return(0);

}

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

void manageArrow(int i)

{

if(ShowArrows)

{

deleteArrow(Time);

if(trend ==-1) drawArrow(i,OverBoughtColor,159,false);

if(trend == 1) drawArrow(i,OverSoldColor ,159,true );

}

}

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

//| |

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

void fnDeleteAllDivergence()

{

string lookFor=DivergenceIndentifier;

string objectName;

int lookForLength=StringLen(lookFor);

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

{

objectName=ObjectName(i);

if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);

}

}

//

//

//

//

//

void drawArrow(int i,color theColor,int theCode,bool up)

{

string name=arrowsIdentifier+":"+Time;

double gap=3.0*iATR(NULL,0,10,i)/4.0; //20

//

//

//

//

//

ObjectCreate(name,OBJ_ARROW,0,Time,0);

ObjectSet(name,OBJPROP_ARROWCODE,theCode);

ObjectSet(name,OBJPROP_COLOR,theColor);

ObjectSet(name,OBJPROP_WIDTH,arrowsWidth);

if(up)

ObjectSet(name,OBJPROP_PRICE1,High+gap);

else ObjectSet(name,OBJPROP_PRICE1,Low-gap);

}

//

//

//

//

//

void deleteArrows()

{

string lookFor = arrowsIdentifier+":";

int lookForLength = StringLen(lookFor);

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

{

string objectName=ObjectName(i);

if(StringSubstr(objectName,0,lookForLength)==lookFor) ObjectDelete(objectName);

}

}

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

//| |

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

void deleteArrow(datetime time)

{

string lookFor=arrowsIdentifier+":"+time; ObjectDelete(lookFor);

}

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

//| |

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

//

//

//

//

//

bool TrendCreate(string name="Line1",

datetime time1=0, // first point time

double price1=0, // first point price

datetime time2=0, // second point time

double price2=0, // second point price

const color clr=clrRed, // line color

const ENUM_LINE_STYLE style=STYLE_SOLID, // line style

const int width=1,

const int window=0 // line width // highlight to move

)

{

//--- reset the error value

ResetLastError();

//--- create a trend line by the given coordinates

if(!ObjectCreate(name,OBJ_TREND,window,time1,price1,time2,price2))

{

Print(__FUNCTION__,": failed to create a trend line! Error code = ",GetLastError());

return(false);

}

//--- set line color

ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

//--- set line display style

ObjectSetInteger(0,name,OBJPROP_STYLE,style);

//--- set line width

ObjectSetInteger(0,name,OBJPROP_WIDTH,width);

ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

//--- enable (true) or disable (false) the mode of continuation of the line's display to the right

ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);

//--- successful execution

return(true);

}

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

//| |

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

void CleanPoint(int i,double &first[],double &second[])

{

if((second!=EMPTY_VALUE) &&(second !=EMPTY_VALUE))

second=EMPTY_VALUE;

else

if((first!=EMPTY_VALUE) && (first!=EMPTY_VALUE) && (first==EMPTY_VALUE))

first=EMPTY_VALUE;

}

//

//

//

//

//

void PlotPoint(int i,double &first[],double &second[],double &from[])

{

if(first==EMPTY_VALUE)

{

if(first==EMPTY_VALUE)

{

first = from;

first = from;

second = EMPTY_VALUE;

}

else

{

second = from;

second = from;

first = EMPTY_VALUE;

}

}

else

{

first = from;

second = EMPTY_VALUE;

}

}

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

//---
 
mladen:

Prueba así :

Eres el mejor Gracias

 

Hola a todos, puede alguien arreglar este indicador para que muestre las barras rojas hacia abajo, ya que sólo puedo ver las verdes hacia arriba. Gracias de antemano. (Volumen Deltaforce)

También podríais arreglar esto para que pueda ajustar el grosor de las barras. (Deltaforce) Gracias de nuevo

Archivos adjuntos:
 

Hola Mladen y Mr. Tools

Tengo un problema y no tengo idea de cómo hacerlo, tal vez con un indicador o con EA, pero realmente lo necesito, tal vez me puedan ayudar:

Necesito un sistema de órdenes semiautomático, es decir, obtengo manualmente la primera operación, "orden de mercado" con SL y TP, si se alcanza el SL el sistema crea una nueva orden en sentido contrario con SL (para la nueva orden es la entrada), la entrada de la primera operación es ahora el SL y el TP que siempre es el mismo valor en pips, pero me gustaría poner manualmente en la configuración, cuantos lotes o mini lotes deben abrirse en la operación progresiva, tipo martingala, pero no realmente...., hasta que el TP sea alcanzado, el sistema debería crear nuevas órdenes, cuando el TP sea alcanzado el sistema se detendrá o cerrará, hasta que yo ponga manualmente la primera orden de nuevo. Espero no haber creado un lío en la explicación ;-)

¿Hay algo como esto que pueda usar?

Muchas gracias

 
laborax:
Hola Mladen y Mr. Tools

Tengo un problema y no tengo ni idea de cómo hacerlo, quizás con un indicador o con un EA, pero realmente lo necesito, quizás me podáis ayudar:

Necesito un sistema de órdenes semiautomático, es decir, obtengo manualmente la primera operación, "orden de mercado" con SL y TP, si se alcanza el SL el sistema crea una nueva orden en sentido contrario con SL (para la nueva orden es la entrada), la entrada de la primera operación es ahora el SL y el TP que siempre es el mismo valor en pips, pero me gustaría poner manualmente en la configuración, cuantos lotes o mini lotes deben abrirse en la operación progresiva, tipo martingala, pero no realmente...., hasta que el TP sea alcanzado, el sistema debería crear nuevas órdenes, cuando el TP sea alcanzado el sistema se detendrá o cerrará, hasta que yo ponga manualmente la primera orden de nuevo. Espero no haber creado un lío en la explicación ;-)

¿Hay algo como esto que pueda usar?

Muchas gracias

laborax

Esas reglas son demasiado flojas para hacer un EA basado en eso y hasta donde yo sé, no existe tal EA

 

He encontrado este EA, que es lo que estaba buscando... ¿qué te parece?

https://www.mql5.com/en/forum/184476