¿Cómo codificar? - página 186

 

Bien, sobre la pregunta original:

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

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

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

Supongo que quiero reemplazar la última pieza de código que me permite actualizar en el objeto incicador la variable sobre la que se realiza el seguimiento, para poder utilizarla posteriormente como línea de parada. Sin embargo, el resto del código es irrelevante. Cuando ejecuto la función anterior espero que antaria mueva la posición de 1.39 o lo que sea que empiece, a 1.2. No recuerdo si uso la variable 200. Creo que he cortado mis comentarios de cabecera y pie de página, pero todo el indicador de esclavos está ahí, que es AntariaRising meantioned en el código inmediatamente anterior

esta fue la única función que pude encontrar que hablaba con los objetos del indicador, y la uso para leer los valores en otras áreas.

 

Sobre el código de su indicador. Está mal.

Var. límite igual a cero nunca.

Quita la cadena:

int limit;

desde el inicio().

 

Ayuda con este código por favor

quiero que alguien me ayude con este código se abre el comercio cuando lo quiero, pero se cierra automáticamente por lo que quiero que el comercio con la pérdida de la parada no cerrar cuando no cruzar de nuevo este es el código

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

//| JR300.mq4

//| onelove |||| Foro de Forex

//| Foro de Forex | Tsd de Forex | Foro de Metatrader ||| El código es el siguiente

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- parámetros de entrada

extern double TakeProfit=250.0;

extern double Lots=0,1;

extern double TrailingStop=35,0;

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

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

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

int init()

{

//----

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

int Cruzado (doble línea1 , doble línea2)

{

static int última_dirección = 0

static int dirección_actual = 0;

if(línea1>línea2)dirección_actual = 1; //arriba

if(línea1<línea2)dirección_actual = 2; //abajo

if(dirección_actual != última_dirección) //cambio

{

última_dirección = última_dirección;

return (última_dirección);

}

else

{

return (0);

}

}

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

//| función de inicio experto ||

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

int inicio()

{

//----

int cnt, ticket, total

double shortEma, longEma;

if(Bars<100)

{

Print("barras inferiores a 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit menos de 10");

return(0); // comprobar TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,

"Mi EA",12345,0,Verde);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de COMPRA abierta : ",OrderOpenPrice());

}

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

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,

Bid-TakeProfit*Point, "Mi EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Orden de venta abierta : ",OrderOpenPrice());

}

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

return(0);

}

return(0);

}

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

{

// ¿se debe cerrar?

if(isCrossed == 2)

{

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

// cerrar la posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Punto*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // ir a la posición corta

{

// ¿se debe cerrar?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

// cerrar la posición

return(0); // salir

}

// comprobar el trailing stop

if(TrailingStop>0)

{

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

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

 

Prueba esto:

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

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

return(0);

}

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

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

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

Gracias

Roger09:
Intenta esto:
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

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

}

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

return(0);

}

return(0);

}

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

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

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

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

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

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

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

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

gracias roger09 Dios te bendiga

 

Gracias Roger, he eliminado esa segunda declaración de límite de mi función de inicio. Me sorprende que el compilador la permitiera, pero no había afectado a mi programa de forma notable.

Aún así no estoy seguro de cómo alterar la instancia de ejecución de ese indcador desde mi EA. Un método sería muy apreciado, o al menos la confirmación de que la API no me permite actualmente pasar información a los indicadores en ejecución.

Gracias.

 
yingli:
El objetivo de este artículo es que los usuarios de la web sepan que el indicador es muy fiable y que si alguien puede hacer un EA para él, es casi el santo grial. Es un indicador muy fiable y si alguien pudiera hacer un EA para él.es casi un santo grial.tia.

El principio básico es:

1. Abrir una posición de venta cuando aparezca la flecha roja,

2. Abrir una posición de compra cuando aparezca la flecha blanca y cerrar automáticamente todas las posiciones de venta.

3. Aplicar para cualquier marco de tiempo.

4.no stop loss,

5.add función de la orden.

Espero la respuesta.

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

//| IINWMARROWS.mq4 |||| Basado en EMA_CROSS.mq4

//| Basado en EMA_CROSS.mq4

//| Copyright ?2006, MetaQuotes Software Corp. |

//| Software de comercio de divisas: Plataforma de Comercio Forex MetaTrader 4

//| Última modificación por Iin Zulkarnain

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

#property copyright "Copyright ?2006, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//----

#property indicator_chart_window

#property indicator_buffers 2

#property indicador_color1 Blanco

#property indicator_color2 Rojo

#property indicator_width1 2

#property indicator_width2 2

//----

double CrossUp[];

double CrossDown[];

extern int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int FasterMA= 3;

extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int SlowerMA= 3;

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

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

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

int init()

{

//---- indicadores

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

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

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

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

int deinit()

{

//----

//----

return(0);

}

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

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

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

int inicio()

{

int límite, i, contador;

double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;

double Rango, AvgRange;

int barras_contadas=IndicadorContado();

//---- comprobar posibles errores

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

//---- la última barra contada se vuelve a contar

if(counted_bars>0) counted_bars--;

//----

limit=Barras_contadas;

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

{

contador=i;

Rango=0;

AvgRange=0;

for(contador=i ;contador<=i+9;contador++)

{

AvgRange=AvgRange+MathAbs(Alto[contador]-Bajo[contador]);

}

Range=AvgRange/10;

fasterMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);

slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);

slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);

if ((fasterMAnow > slowerMAnow) && (fasterMAprevious slowerMAafter))

{

CrossUp=Low - Range*0.5;

}

else if ((fasterMAnow slowerMAprevious) && (fasterMAafter < slowerMAafter))

{

CrossDown=Alto + Rango*0,5;

}

}

return(0);

}

//+------------------------------------------------------------------+ este hilo para aprender a codificar correctamente,estoy aprendiendo a codificar para

El objetivo de este artículo es que el usuario pueda ver la información que se le ofrece en la página web.

 

Calculadora de Oscar de George - ¿Alguien puede codificar un indicador para ella?

Hola amigos,

No sé si alguien está familiarizado con Forex Made-EZ por George Smith.

Actualmente estoy revisando su trabajo y me pregunto si alguien ha codificado un indicador para el oscilador Oscar que utiliza?

La fórmula es

A = el máximo más alto de las últimas ocho barras (incluyendo esta)

dejemos que B = el mínimo de las últimas ocho barras (incluyendo esta)

dejemos C = el precio de cierre de la barra actual

dejemos que X = la cifra anterior del oscilador (Oscar)

El oscilador "aproximado" de hoy es igual a (C-B) dividido por (A-B) por 100.

A continuación "suavizamos" nuestra cifra aproximada (llamémosla Y) de la siguiente manera

Número del oscilador final = ((X dividido por 3) por 2), más (Y dividido por 3).

Si alguien ha codificado esto o puede codificar esto sería muy apreciado.

Saludos Steve

 

Trailing Stop invertido

Hola,

Quiero que me ayuden con una idea.

Estoy usando trailing stops en mis EAs (3 step trailing), pero quiero hacer lo de invertido para proteger las pérdidas.

Voy a tratar de explicar:

Abro una orden, con un stop loss inicial.

Si la operación va 15 pips en dirección a la pérdida y vuelve 10 pips, cierro la operación (primer paso).

Si la operación va 30 pips en dirección de pérdida y vuelve 15 pips, cierro la operación (segundo paso).

Algo así.

Gracias por la ayuda

 
dedreko:
Hola,

Quiero que me ayuden con una idea.

Estoy usando trailing stops en mis EAs (trailing de 3 pasos), pero quiero hacer lo invertido para proteger las pérdidas.

Voy a tratar de explicar:

Abro una orden, con un stop loss inicial.

Si la operación va 15 pips en dirección a la pérdida y vuelve 10 pips, cierro la operación (primer paso).

Si la operación va 30 pips en dirección de pérdida y vuelve 15 pips, cierro la operación (segundo paso).

Algo así.

Gracias por la ayuda

Esto es algo nuevo para mí.

Entonces, el cierre de la operación perdedora siempre tiene que esperar hasta que rebote, ¿verdad?

¿Y si no rebota?

¿Cerraremos con el SL inicial?

Razón de la queja: