¡Pide! - página 11

 

Hablas de tener un script o algo que facilite como servidor para que los EAs puedan comunicarse. Creo que tardará en llegar algo así a metaquotes. Sin embargo mirando en mql4.com, dicen que la función de la que hablaba, GlobalVariableSetOnCondition() es atómica en la ejecución. Con eso, probablemente puedo llegar a un conjunto de funciones para hacer lo que necesito.

 

¿Puede alguien ayudarme: https://www.mql5.com/en/forum/174184?

 

Ayuda - ¿División a cero?

Hola a todos los codificadores...

¿Qué tengo que hacer para resolver este error: dividir por cero?

Gracias por cualquier ayuda...

Archivos adjuntos:
ok.gif  16 kb
error.gif  16 kb
ttm_stoch.mq4  5 kb
 

jma

hola codersguru,

¿puedo usar jma en lugar de ema en el código de EA?

 
 

Necesito ayuda - MACD ajustado

Estoy intentando crear un indicador que ajuste la línea de señal en función del valor del RSI. Realmente me gustaría dibujar otra línea de señal en el MACD que se ajusta y dejar la línea de señal regular en su lugar.

editar:

He conseguido que el indicador dibuje la línea del RSI (primer paso) en la misma ventana. Pero por alguna razón no dibuja el último periodo. Por favor, vea el archivo adjunto.

Archivos adjuntos:
 

cualquier ayuda seria genial

aquí es un poco de código im teniendo un problema con//// funciona cuando lo cargo en northfinace 1 vez y luego nunca hace un comercio de nuevo ... pero no hace nada en Interbank ... es un sistema de inversión utilizando kama el .0005 es pips de inversión ... No tengo idea de lo que está pasando, ya que hizo 1 comercio en northfinance perfectamente cuando lo cargué por primera vez, pero era un comercio existente que ya debería haber sido hecho ...

 

el código

#property copyright "Expert Advisor Builder"

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

extern int NúmeroMágico = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True

extern double Lots = 1;

extern int Slippage = 3;

extern bool StopLossMode = True

extern int StopLoss = 40;

extern bool TakeProfitMode = False

extern int TakeProfit = 60

extern bool TrailingStopMode = True

extern int TrailingStop = 35;

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SEÑAL_VENTA 2

#define SEÑAL_CLOSEBUY 3

#define SEÑAL_CLOSESELL 4

int BarCount;

int Actual;

bool TickCheck = False;

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

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

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

int init() {

BarCount = Bars;

si (EachTickMode) Current = 0; si no, Current = 1;

return(0);

}

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

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

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

int deinit() {

return(0);

}

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

//| función de inicio experta |

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

int inicio() {

int Pedido = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

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

Total = OrdersTotal();

Orden = SIGNAL_NONE;

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

//| Comienzo de la variable |++

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

double Var1 = iCustom(NULL, 0, "KAMATEST", 3, 2, 0.0005, 0, Current + 0);

double Var2 = iCustom(NULL, 0, "KAMA CCI", 14, 0, Current + 0);

double Var3 = iCustom(NULL, 0, "KAMARSI", 14, 0, Current + 0);

double Buy1_1 = Var1 ;

double Buy1_2 = 25;

double Buy2_1 = Var2 ;

double Buy2_2 = 80;

double Buy3_1 = Var3 ;

double Buy3_2 = 50;

double Venta1_1 = Var1 ;

double Sell1_2 = -25;

double Sell2_1 = Var2 ;

double Sell2_2 = -80

double Sell3_1 = Var3 ;

double Sell3_2 = -50;

double CierreCompra1_1 = Var1 ;

double CierreCompra1_2 = -25;

double CierreCompra2_1 = Var2 ;

double CierreCompra2_2 = -80;

double CierreCompra3_1 = Var3 ;

double CierreCompra3_2 = -50;

double CierreVenta1_1 = Var1 ;

double CierreVenta1_2 = 25

double CierreVenta2_1 = Var2 ;

double CerrarVenta2_2 = 80;

double CierreVenta3_1 = Var3 ;

double CierreVenta3_2 = 50;

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

//| Fin de la variable

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

//Comprobar posición

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) {

//Cerrar

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

//| Señal Inicio(Salida Compra) || /Cerrar

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

if (CloseBuy1_1 <= CloseBuy1_2 && CloseBuy2_1 <= CloseBuy2_2 && CloseBuy3_1 <= CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

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

//| Señal Fin(Salir de la Compra) |++

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

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;

continuar;

}

//Trailing stop

if(TrailingStopMode && 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;

continuar;

}

}

}

} else {

//Cerrar

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

//| Señal de inicio (salida de la venta)

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

if (CloseSell1_1 >= CloseSell1_2 && CloseSell2_1 >= CloseSell2_2 && CloseSell3_1 >= CloseSell3_2) Order = SIGNAL_CLOSESELL;

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

//| Señal Fin(Salida Venta) |+Señal_CLOSESELL

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

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;

continuar;

}

/Trailing stop

if(TrailingStopMode && 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;

continuar;

}

}

}

}

}

}

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

//| Señal Begin(Entry) |

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

if (Buy1_1 >= Buy1_2 && Buy2_1 >= Buy2_2 && Buy3_1 >= Buy3_2) Orden = SIGNAL_BUY;

if (Sell1_1 <= Sell1_2 && Sell2_1 = Sell3_2) Order = SIGNAL_SELL;

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

//| Fin de la señal

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

//Compra

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

if(!IsTrade) {

//Comprobar el margen libre

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

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

return(0);

}

si (StopLossMode) StopLossLevel = Ask - StopLoss * Point; si no StopLossLevel = 0.0;

si (TakeProfitMode) TakeProfitLevel = Ask + TakeProfit * Point; si no, 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("Orden de COMPRA abierta : ", OrderOpenPrice());

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

} else {

Print("Error al abrir la orden de COMPRA : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

/Vender

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

if(!IsTrade) {

//Comprobar el margen libre

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

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

return(0);

}

si (StopLossMode) StopLossLevel = Oferta + StopLoss * Punto; si no, StopLossLevel = 0,0;

si (TakeProfitMode) TakeProfitLevel = Bid - TakeProfit * Point; si no, 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("Orden de venta abierta : ", OrderOpenPrice());

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

} else {

Print("Error al abrir una orden de VENTA : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

 

He cambiado el valor de .0005 del indicador en el experto ya que sólo muestra la línea del canal en última instancia, los niveles son lo que hay que cambiar 25,-25 para .0005 ...30,,-30 para .0006, y así sucesivamente...

 

Problema con el breakeven y el trailing stop

Hola,

Estoy aprendiendo a codificar utilizando el tutorial MQL4 de Codersguru, y estoy trabajando en "My_First_EA". Realmente es mi primer EA. Funciona muy bien, pero estoy intentando escribir un breakeven stop y no lo consigo. El problema que tengo es que el breakeven stop sigue al precio igual que un trailing stop. Me gustaría que el stoploss inicial se moviera para mantener 1 pip de beneficio cuando hago 15 pips (por ejemplo), entonces quiero que el stoploss se mantenga en el breakeven stop (1 pip de beneficio) hasta que el trailing stop comience a trabajar en 25 pips de beneficio. Luego quiero que el trailing stop trabaje como siempre moviendo cada pip de ganancia. Creo que el problema puede ser el "OrderStopLoss()", pero ya no sé nada. Mi cerebro está hecho papilla. Gracias

Aquí está el código relevante que he hecho:

extern double TrailingStop=25.0;

extern double BreakEvenProfit=15;

extern double BreakEvenStop=1;

......................

mi código de entrada y apertura de órdenes aquí funciona bien

......................

for (cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

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

{

if(OrderType()==OP_BUY)/Se abre una posición larga

{

//¿Debe cerrarse?

if (FSAR > FMA) //mi señal de salida

{

//----CLOSE LONG POSITION funciona bien

OrderClose(OrderTicket(),OrderLots(),Bid,3,Magenta);

return(0);//salir

}

////////////////////ESTA ES LA ZONA PROBLEMÁTICA DE ABAJO/////////

//----COMPROBAR LA POSICIÓN LARGA DE PARADA DE EQUILIBRIO------

if (Bid-OrderOpenPrice() > BreakEvenProfit*Point)

{

si (OrderStopLoss() < OrderOpenPrice()+ BreakEvenStop*Point)

{

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() + BreakEvenStop*Point,OrderTakeProfit(),0,Yellow);

return(0);

}

}

//-----TODO LO QUE HAY AQUÍ ABAJO FUNCIONA COMO UN TRAILING STOP TÍPICO

//----check for trailing stop POSICIÓN LARGA

if(TrailingStop>0)

{

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

{

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

{

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

return(0);

}

}

}

}

else// pasar a la posición corta