¿Cómo codificar? - página 50

 

Recuperar un tipo de dato de un indicador

Hola

¿Es posible recuperar un tipo de datos de un indicador (3 MA Cross w alert) para ponerlo en un EA?

Esto es lo que quiero hacer:

En el indicador (3 MA Cross w alert) pongo un tipo de dato :

double execute_trade = "ok_buy" o execute_trade = "ok_sell" aquí :

************Indicator ************

si ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprevious <= slowerMAprevious &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

string execute_trade = "ok_buy";

}

if ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprevious >= slowerMAprevious &&

mediumMAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

y me gustaría recuperar "excute_trade" en mi EA así :

***********EA***************

if (excute_trade== "ok_buy")

Orden = SIGNAL_BUY;

if (excute_trade== "ok_sell")

Orden = SEÑAL_VENTA;

****************************

Pero no sé cómo hacer

ayuda por favor

Saludos cordiales

Archivos adjuntos:
 
Julia:
¿Puede alguien ser tan amable y decirme cómo codificar el siguiente código?

Si mi Ea se activa en el gráfico M30, quiero que el código diga

if(en el marco temporal M5, el cierre de hoy es>el cierre de ayer)

{

.........

}

El cierre de hoy es el BID actual; el cierre de ayer es independiente del marco temporal, por lo que no importa el marco temporal M30 o M5.

if(Bid > iClose(NULL,PERIOD_D1,1))

{

...

}

 
natsirte:
Hola

¿Es posible recuperar un tipo de datos de un indicador (3 MA Cross w alert) para ponerlo en un EA?

Esto es lo que quiero hacer:

En el indicador (3 MA Cross w alert) pongo un tipo de datos :

double execute_trade = "ok_buy" o execute_trade = "ok_sell" aquí :

************Indicator ************

si ((fasterMAnow > slowerMAnow &&

fasterMAprevious <= slowerMAprevious &&

fasterMAafter > slowerMAafter &&

mediumMAnow > slowerMAnow )

||

(fasterMAnow > slowerMAnow &&

mediumMAnow > slowerMAnow &&

mediumMAprevious <= slowerMAprevious &&

mediumMAafter > slowerMAafter ))

{

CrossUp = Low - Range*0.5;

string execute_trade = "ok_buy";

}

if ((fasterMAnow < slowerMAnow &&

fasterMAprevious >= slowerMAprevious &&

fasterMAafter < slowerMAafter &&

mediumMAnow < slowerMAnow )

||

(fasterMAnow < slowerMAnow &&

mediumMAnow < slowerMAnow &&

mediumMAprevious >= slowerMAprevious &&

mediumMAafter < slowerMAafter ))

{

CrossDown = High + Range*0.5;

execute_trade = "ok_sell";

}

************************

y me gustaría recuperar "excute_trade" en mi EA así :

***********EA***************

if (excute_trade== "ok_buy")

Orden = SIGNAL_BUY;

if (excute_trade== "ok_sell")

Orden = SEÑAL_VENTA;

****************************

Pero no sé cómo hacer

ayuda por favor

Saludos cordiales

Debes utilizar la función iCustom para recuperar el valor de los buffers (es decir, las flechas);

double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Calcula el indicador personalizado especificado y devuelve su valor. El indicador personalizado debe ser compilado (archivo *.EX4) y estar en el directorio terminal_directory\experts\indicators.

Parámetros:

symbol - Símbolo cuyos datos deben utilizarse para calcular el indicador. NULL significa símbolo actual.

timeframe - Timeframe. Puede ser cualquiera de los valores de la enumeración Timeframe. 0 significa el marco de tiempo del gráfico actual.

name - Nombre del programa compilado del indicador personalizado.

... - Conjunto de parámetros (si es necesario). Los parámetros pasados y su orden deben corresponder con el orden de desclasificación y el tipo de variables externas del indicador personalizado.

mode - Índice de línea. Puede ser de 0 a 7 y debe corresponder con el índice utilizado por una de las funciones SetIndexBuffer.

shift - Índice del valor tomado del buffer del indicador (desplazamiento relativo a la barra actual la cantidad dada de períodos atrás).

Ejemplo:

double val=iCustom(NULL, 0, "SampleInd",13,1,0);

En tu caso la sintaxis debería ser :

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 0, 0) > 0) // Buy

{

...

}

if(iCustom(NULL, 0, "3 MA Cross w_Alert v2", p1, , , , p10, 1, 0) > 0) // Sell

{

...

}

Los parámetros p1 a p10 son los valores a enviar al indicador como parámetros externos. Por ejemplo, p1 significa el valor a asignar a FasterMA, p2 a FasterShift, y así sucesivamente hasta la última declaración externa p10 SoundAlert. Consulta el código del indicador para conocer el orden y el significado de los mismos.

 

Gracias Michel.

¿Pero qué pasa si el código está en un código de indicador?

Es:

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????

 
Beno:
Hoy estoy arreglando poco a poco los errores en algunos de mis ea's (y aprendiendo mucho en el camino) pero que significa esto.

2007.10.24 21:22:24 1998.11.20 06:00 The Abyss GBPJPY,Daily: número doble no válido como parámetro 6 para la función Order Send

No puedo encontrar nada en ese error lo que debería estar mirando.

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Como puede ver el parámetro seis es el stoploss. Asegúrese de que su stoploss está definido como un int. A continuación, asegúrese de que en su comando OrderSend() está multiplicando el stoploss por un punto. Esto se convierte en el doble correcto para la divisa con la que está operando.

Ejemplo para largo:

ticketa=OrderSend(Symbol(),OP_BUY,lotsize,Ask,slip,Ask-intStopLoss*Point,Ask+intTakeProfit*Point, "Comment",magic,0,Green);

Ejemplo para abreviar:

ticketb=OrderSend(Symbol(),OP_SELL,lotsize,Bid,slip,Bid+intStopLoss*Point,Bid-intTakeProfit*Point, "Comment",magic,0,Blue);

Espero que esto ayude.

 

Gracias Wolfe

Eso ayudó mucho pero ha abierto un nuevo problema lol ahora compra pero no vende bien no en el lugar correcto. He estado tratando de comprar lo que los tres indi son azules y vender cuando todos los rojos.

Creo que he elegido el nombre correcto "El Abismo" para el ea. ya que es donde estoy sentado tratando de codificar mi salida. LOL

2007.11.24 10:14:44 2007.11.23 12:00 The Abyss EURUSD,H4: Error al abrir la orden SELL: 0

void CheckForSignals() {

double TML=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,0,shift);

double TMS=iCustom(NULL,0, "TrendManager",TM_Period,TM_Shift,1,shift);

double hasOpenLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,1,shift) ;

double hasCloseLong=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,3,shift) ;

double hasOpenShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,0,shift) ;

double hasCloseShort=iCustom(NULL,0, "Heiken_Ashi_Smoothed",MaMetod,MaPeriod,MaPeriod2,2,shift) ;

double SDLL=iCustom(NULL,0, "Línea de dirección de la pendiente",period,method,price,0,shift);

double SDLS=iCustom(NULL,0, "Slope Direction Line",period,method,price,1,shift);

buysig=false;

sellsig=false;

closebuy=false;

closesell=false;

bool Largo1 = TML;

bool Short1 = TMS;

bool Long2 = SDLL;

bool Short2 = SDLS;

bool Long3 = hasOpenLong > hasCloseLong;

bool Short3 = hasOpenShort < hasCloseShort;

buysig = Long1 && Long2 && Long3;

sellsig = Short1 && Short2 && Short3;

closebuy=sellsig;

closesell=buysig;

}

void CheckForOpen() {

if (last==Time[0]) return;

int res,ord;

doble entrada,parada;

ord=CalcularOrdenesActualess();

if (ord!=0) CheckForClose();

//---- condiciones de compra

if (buys< buysig) {

res=OpenAtMarket(OP_BUY,Lots);

if (res<0) Print("Error al abrir la orden de COMPRA : ",(GetLastError());

si no res=Tiempo[0];

}

//---- condiciones de venta

if (sells< sellsig) {

res=OpenAtMarket(OP_SELL,Lots);

if (res<=0) Print("Error al abrir una orden de VENTA : ",(GetLastError());

else last=Tiempo[0];

}

}

int OpenAtMarket(int modo,double lote) {

int tr,col;

double openprice;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

if (mode==OP_SELL) {

openprice=Bid;

col=Rojo;

} else {

//openprice=nd(Ask);

openprice=Ask;

col=Azul;

}

OrderSend(Symbol(),mode,lot,openprice,slippage,sl,tp,EAName+Magic,Magic,0,col);

}

return;

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

//| Comprobar las condiciones de la orden de cierre ||.

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

void CheckForClose() {

int total;

//----

total=Total de pedidos();

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

{

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continuar;

if(OrderMagicNumber()!=Magic | OrderSymbol()!=Symbol()) continue;

//---- comprueba el tipo de orden

if(OrderType()==OP_BUY && closebuy) CloseAtMarket(OrderTicket(),OrderLots());

if(OrderType()==OP_SELL && closesell) CloseAtMarket(OrderTicket(),OrderLots());

}

}

bool CloseAtMarket(int ticket,double lot) {

bool bres=false; int tr;

tr=0; while (tr<5 && !IsTradeAllowed()) { tr++; Sleep(2000); }

RefreshRates();

bres=OrderClose(ticket,lot,OrderClosePrice(),slippage,White);

if (!bres) Print("Error al cerrar la orden : ",(GetLastError());

}

 
Julia:
Gracias Michel.

¿Pero qué pasa si el código está en un indicador?

Lo es:

if(Close[pos]>iHigh(Symbol(),PERIOD_M5,[pos+1])?????

Sí, puede ser eso; todo depende de lo que se pretenda hacer...

 

Ayuda Plz - Convertir estos en Mq4 - Muchas gracias

Estimados todos:

Estoy construyendo un sistema que creo que es muy bueno, he probado la idea antes de 3 meses, ahora estoy tratando de codificación de un indicador que será lo antes posible en el foro para que podamos probarlo y que realmente va a hacer buen dinero creo:

Por favor, ayúdame a convertir estas líneas en la codificación mql4:

1- Tengo vairable X , esto tendrá un valor y lo estoy calculando ahora

Así que tenemos X como un entero

2- el indicador debe comprobar la hora GMT actual, debe ser 6:00am GMT - Time Frame 1 H

-- comprobar la HORA GMT 6:00am, CUANDO esta vela se cierre, necesitamos calcular la siguiente Variable De esta vela:

Alto - Bajo = A

A / 2 = B

B - Alto = C = SL

D = X * 30%

Buy_Entry= D + C

Buy_Target= C + (X * 60%)

Entrada_de_venta= C - D

Venta _Objetivo= C - (X * 60%)

Entonces:

Quiero que el resultado se muestre como líneas en el gráfico con el área verde para la compra y el área roja para la venta.

estos deben aparecer automáticamente tan pronto como termine la vela de las 6:00 GMT, marco de tiempo 1H, por lo que la caluculación debe ser de acuerdo a la vela alta y baja de las 6:00 a las 6:59am GMT

Por favor, convierta esto en MQL4, para que pueda probarlo y volver a publicar el resultado.

MUCHAS GRACIAS

 
Beno:
Gracias Wolfe

Eso ayudó mucho pero ha abierto un nuevo problema lol ahora compra pero no vende bien no en el lugar correcto. He estado tratando de comprar lo que los tres indi son azules y vender cuando todos los rojos.

Creo que he elegido el nombre correcto "El Abismo" para el ea. ya que es donde estoy sentado tratando de codificar mi salida. LOL

Beno, no estoy seguro de esto. Normalmente no he tenido buena experiencia con el uso de indicadores que cambian de color en los EA. Abra su ventana de datos con sus indicadores adjuntos y averiguar qué valor numérico se devuelve para cada color. Eso puede ayudar a su codificación, también asegúrese de que usted está llamando el búfer indicador correcto en el momento adecuado. (Estoy seguro de que ya has hecho eso) Usted puede tener mejor suerte con la ayuda si usted publica el EA completo, si realmente necesita ayuda. Además, personalmente lo codificaría con 2 funciones Ordersend() separadas, una dedicada a los cortos y otra a los largos. Es sólo mi opinión, hace las cosas más fáciles de seguir.

Buena suerte, ¡todos hemos tenido nuestras propias versiones de "el abismo"!

 

Saludos Wolfe

Voy a probar la opción de 2 Ordersend a ver que pasa. una vez que lo tenga en marcha lo publicaré.