¿Cómo codificar? - página 289

 

Necesito ayuda para terminar este EA

Estoy tratando de codificar un EA (usando algunos códigos ya hechos) que hace lo siguiente:

  • Abre dos órdenes pendientes, una de venta y otra de compra, a una hora determinada (en este caso las 23:00), ambas con un SL y un TP.
  • Expira la orden pendiente a una hora determinada (por ejemplo a las 10:00) y no abre ninguna operación el viernes a las 23:00.
  • Si se abren dos operaciones y una alcanza el SL, a la otra se le aumenta el TP a una determinada cantidad (creo que un OrderModify resolverá algo así).
  • Las operaciones abiertas se cierran automáticamente a las 23:00 del día siguiente.
  • El EA está casi terminado y algunos problemas anteriores que tenía fueron resueltos y hace la mayor parte de lo anterior, pero todavía tengo los siguientes problemas y en este punto no sé cómo ir más allá, por lo que si alguien puede proporcionar el código necesario que sería muy útil.

  • Cuando dos operaciones están abiertas y una alcanza el stoploss, necesito que la otra operación que sigue abierta tenga su take profit incrementado en una cantidad determinada.
  • Las operaciones se siguen abriendo el viernes a las 23:00, lo que no quiero.
  • Todas las operaciones que sigan abiertas a las 23:00 deben cerrarse, independientemente de si tienen pérdidas o beneficios.

Soy un novato en MQL y he tratado de buscar las soluciones a algunos de los problemas anteriores y estoy teniendo problemas para encontrarlos. Creo que los problemas se pueden resolver con bastante facilidad y sin necesidad de una codificación tan complicada. Si alguien puede proporcionarme una solución o soluciones a cualquiera de los problemas anteriores, una vez más, se lo agradecería mucho.

Gracias,

madmax3

Archivos adjuntos:
 

...

Pruebe algo como esto :

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

int ticketBuy = OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,CLR_NONE);

if (ticketBuy>-1)

OrderModify(ticketBuy,OrderOpenPrice(),stopLossToUse,takeProfitToUse,0,CLR_NONE);

}

Simplemente reemplace stopLossToUse y takeLossToUse con los valores que desea que sean

kasio:
Amigos,

Soy un novato en la programación de MQL4 y necesito ayuda para adjuntar un SL & TP a un ORDERSEND con un broker ECN.

Inicialmente, no podía entender por qué los SL y TP estaban haciendo que mi orden resultara en un error hasta que alguien señaló que uno tiene que establecer el campo StopLoss y TakeProfit dentro del ORDERSEND a "0" o de lo contrario un corredor ECN/STP no ejecutará la orden.

Entonces, mi pregunta es: ¿Cómo puedo ejecutar una orden en el mercado y luego inmediatamente (o dentro de un segundo o dos) adjuntar un SL/TP a esa entrada?

Aquí está una parte del código pertinente a mi questino:

if((CurrentPriceBuy>UpperPriceTrigger) && TakeAction==1)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,Comm,0,0,CLR_NONE);

TakeAction=0;

}

¿Puede alguien ayudarme a insertar código justo después del comando OrderSend para que pueda adjuntar un TP/SL de, digamos, 25pips arbitrariamente a esa entrada específica?

Cualquier ayuda será muy apreciada. Gracias de antemano.

Saludos,

Kasio
 

¡ayuda!

¿puede alguien ayudarme a hacer que este indicador no se repinte por favor?

Archivos adjuntos:
pi_bg_v2.mq4  3 kb
 

...

Es un código descompilado, pero de todos modos mira este hilo : https://www.mql5.com/en/forum/179650

Es uno más renombrado viento solar, así que ...

phoenix:
¿puede alguien ayudarme a hacer este indicador para no repintar por favor?
 

¿Alguna idea sobre cómo codificar lo que he publicado? Mis disculpas si estoy siendo impaciente o algo así, sólo quiero saber si se ha leído.

Gracias,

madmax3

 

...

Añade algo así en tu EA al principio del procedimiento start() :
if (TimeDayOfWeek(TimeCurrent())==5 && TimeCurrent()>=StrToTime("22:59")) { CloseAll(); return(0); } [/PHP]

Añade esto en el código :

[¡PHP]void CloseAll()

{

for(int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderMagicNumber()!=MagicNumber) continue;

//

//

//

//

si (

OrderType()==OP_BUY

|| OrderType()==OP_SELL)

{

for(int c=0; c<3; c++)

{

RefreshRates();

if (OrderType()==OP_BUY)

{ double cp = Bid;}

else { cp = Ask;}

OrderClose(OrderTicket(),OrderLots(),cp,0,Yellow);

int err=GetLastError();

if(err==4 || err==136 || err==137 || err==138 | err==146)

{

Sleep(5000); continue;

}

break

;

}

break;

}

}

Eso resolverá tus puntos 2 y 3 (órdenes abiertas en viernes)

El primer punto es bastante complicado de codificar - probablemente tendrá que redefinir esa regla

madmax3:
¿Alguna idea sobre cómo codificar lo que he publicado? Mis disculpas si estoy siendo impaciente o algo así, sólo quiero saber si se ha leído.

Gracias,

madmax3
 

¡Por favor, ayuda! Número de error = 4103. pos = 10. No se puede abrir el archivo

Hola,

Soy nuevo aquí y nuevo en la programación de MT también. ¿Puede alguien ayudarme con esto?

Me sale "Se ha producido un error. Error number = 4103. pos = 10 (cannot open file) message".

El archivo se guarda correctamente como gif, pero estoy recibiendo el mensaje anterior. ¿Dónde está el problema?

El código:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Error de WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Se agradece cualquier ayuda. Gracias.

 

...

Funciona bien

El archivo debe estar en la subcarpeta experts\files y utilicé como ejemplo la entrada número 0, por lo que el nombre completo del archivo era en mi ejemplo "EURUSD_Demo_0_Open.gif" y lo abrió sin problema (lo hace bien si usas FILE_CSV así como con FILE_BIN). Así que, si se guarda en la carpeta correcta y el nombre correcto, su código funciona bien

Akkinmore:
Hola,

Soy nuevo aquí y nuevo en la programación de MT también. ¿Puede alguien ayudarme con esto?

Tengo "Un error ha ocurrido. Número de error = 4103. pos = 10 (no se puede abrir el archivo) mensaje".

El archivo se guarda correctamente como gif, pero estoy recibiendo el mensaje anterior. ¿Dónde está el problema?

El código:

void Screenshot(int ticket, int cmd, datetime orderOpenTime, double orderOpenPrice)

{

RefreshRates();

if (cmd==OP_BUY) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Buy: ",DoubleToStr(orderOpenPrice,Digits)) ;

if (cmd==OP_SELL) Comment (DateTimeInfo(),"\n", "Order Open Time: ",TimeToStr(orderOpenTime,TIME_DATE|TIME_SECONDS)," Sell: ",DoubleToStr(orderOpenPrice,Digits)) ;

string filename = Symbol()+"_"+"Demo "+"_"+ticket+"_Open.gif";

int handle = FileOpen(filename,FILE_CSV|FILE_READ);

if(handle<1)

{

if (GlobalVariableGet("_MonitorScreen_ScreenShot") != 0 )

{

if(!WindowScreenShot(filename,900,600)) Print("Error de WindowScreenShot: "+GetLastError());

}

}

else FileClose(handle);

}

Se agradece cualquier ayuda. Gracias.
 
mladen:
Funciona bien El archivo debe estar en la subcarpeta experts\files y utilicé como ejemplo la entrada número 0, por lo que el nombre completo del archivo era en mi ejemplo "EURUSD_Demo_0_Open.gif" y lo abrió sin problema (lo hace bien si se utiliza FILE_CSV así como con FILE_BIN). Por lo tanto, si se guarda en la carpeta correcta y el nombre correcto, su código funciona bien

Gracias. Sí, el archivo está guardado en la carpeta correcta y con el nombre correcto. Podría intentar utilizar el FILE_BIN en lugar de FILE_CSV para comprobar si el mensaje de error aparece de nuevo.

 

...

¿Cómo hacer que mi ordenador muestre correctamente las palabras en ruso en los indicadores?...Gracias...

Razón de la queja: