Función ICustom - página 7

 

Quiero escribir un EA utilizando este indicador ADX avanzado... ¿Cómo puedo extraer el valor y el color del indicador...

Comprar

ADX color verde y (ADX esta hora> ADX hora anterior)

Vender

ADX color rojo y (ADX esta hora< ADX hora anterior)

He probado abit en la codificación por mi cuenta. ¿La codificación es correcta con mi regla?

thx

sonic

for (i = Bars - 205; i >= 0; i --)

{

double adx1 =iCustom(NULL, 0, "Advanced_ADX",13,0,i);

double adx2 =iCustom(NULL, 0, "Advanced_ADX",13,1,i);

if ((adx1>adx2)&&(adx1 > adx1) // BUY

{ BUY routine}

if ((adx1<adx2)&&(adx1 < adx1) // SELL

{ SELL routine}

}
Archivos adjuntos:
 

ICustom Indicador EA

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

//| This MQL is generated by Expert Advisor Builder |

//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |

//| |

//| In no event will author be liable for any damages whatsoever. |

//| |

//| |

//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 0.2;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 27;

extern bool UseTakeProfit = True;

extern int TakeProfit = 34;

extern bool UseTrailingStop = False;

extern int TrailingStop = 30;

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

double Buy1_1 = iOBV(NULL, 0, PRICE_LOW, Current + 0);

double Buy1_2 = iCustom(NULL, 0, "synthetic_", 22, 0, Current + 0);

double Sell1_1 = iOBV(NULL, 0, PRICE_HIGH, Current + 0);

double Sell1_2 = iCustom(NULL, 0, "synthetic_", 22, 0, Current + 0);

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

//| Variable End |

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

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 != Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 != Sell1_2) Order = SIGNAL_SELL;

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

//| Signal End |

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

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

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

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

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

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

hola

esta es mi estrategia

double Buy1_1 = iOBV(NULL, 0, PRICE_LOW, Current + 0);

double Buy1_2 = iCustom(NULL, 0, "synthetic_", 22, 0, Current + 0);

double Sell1_1 = iOBV(NULL, 0, PRICE_HIGH, Current + 0);

double Sell1_2 = iCustom(NULL, 0, "synthetic_", 22, 0, Current + 0);

quiero que cuando mi indicador personalizado cruce la línea obv venda o compre el mercado

pero

no funciona

¿qué es lo que falla en el código?

 

Indi de 2 colores

Hola a todos,

El indi del fondo (Complex_Pairs1) sólo tiene un color. Podría alguien ayudarme, y cambiarlo a 2 colores en su lugar. Azul para subir, y Rojo para bajar. Al igual que el indi del gráfico (Execute Line).

He intentado por todos los medios cambiar el código yo mismo, pero sin éxito.

Después de compilar no hay errores, pero no pasa nada cuando intento abrir el indi.

Esto es probablemente un pedazo de la torta para todos los codificadores expertos, y espero que pueda aprender de ella.

¡Gracias!

Klondyke

Archivos adjuntos:
 

¿Buscando un documento o un hilo del foro?

Hola, he tratado de buscar una guía de usuario o un hilo del foro en Google sobre cómo trazar un indicador personalizado en un experto. En realidad quiero una información de cómo utilizar mejor la función iCustom y un par de ejemplos .... ¡Gracias de antemano !

 

He movido tu hilo al hilo de funciones de iCustom.

Espero que lo encuentres todo.

También mira este post https://www.mql5.com/en/forum

 

Ya entendí el punto, gracias amigos.

 

¿alguien sabe cómo añadir a mQL ea

el indicador zig zag utilizando la función icustom.

He intentado

double x = iCustom(NULL,PERIOD_M5, "ZigZag",3,0,0);

pero estoy obteniendo una variedad de números en mi función de impresión.

También he probado una variedad de números.

cualquier ayuda es apreciada.

Archivos adjuntos:
zigzag.mq4  7 kb
 
ajk:
¿alguien sabe cómo añadir a mQL ea

el indicador de zig zag utilizando la función icustom.

He probado

double x = iCustom(NULL,PERIOD_M5, "ZigZag",3,0,0);

pero estoy obteniendo una variedad de números en mi función de impresión.

También he probado una variedad de números.

cualquier ayuda es apreciada.

Una forma es: iCustom(NULL,0, "ZigZag",depth,deviation,backstep,0,1)

 

zigzag

hey ajk....... zigzag difiere de la mayoría de los indicadores en que la mayor parte del tiempo su valor es 0, con sólo un número ocasional distinto de cero..... que lo hace casi inutilizable en la forma estándar de iCustom.....

// ---> zig = iCustom(NULL,0, "ZigZag",15,5,3, 0, i);

para que sea útil es casi seguro que tendrás que crear un array para almacenar todos los números "no nulos"..... como;

if(zig>0)

{

zag[n] = zig;

}

entonces puedes hacer lo común

if(zag[1] > zag[2]) // haz esto

si no // o

if(zag[1] < zag[2]) // hacer esto

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

hay un poco más, pero esa es la idea básica.....h

 

Necesito ayuda

Hola...

He encontrado el Univeral MA Cross EA ..

es un buen EA ..

Archivos adjuntos: