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
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...
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.
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