Si quieres mirar en el probador, puedes quitar la prueba para una hora posterior a la actual. Esto es en OnInit. Y no recuerdo si en 4ka en el probador una solicitud de tiempo devolverá exactamente el tiempo del probador. Creo que devolverá la hora actual, por lo que en el probador sólo hay que poner órdenes a la vez y ya está. Además, al solicitar la hora local se obtendrá la hora local actual.
Es en el 5k en el probador un emulador de entorno completo.
Por favor, ayúdenme a hacer correcciones. Este EA no cierra forzosamente las órdenes abiertas. Me gustaría que junto a la hora de establecer los límites también pudiéramos establecer la hora de su cierre forzoso. Necesitamos TP y trall para optimizarlos. Un trall, para que todos los límites se cerraran en una pequeña forma pero recoger el ruido nocturno.
Hola. Quién puede ayudar con un EA para MT4. Necesito un EA sin ningún tipo de truco para seguir las órdenes colocadas manualmente (con o sin magia). Si una orden se cierra en un stop loss, elEA abrir á una nueva orden en la misma direccióncon un lote, SL y TP especificados. Si una orden se cierra en un take profit, el EA abrirá una nueva orden en la dirección opuesta con un lote, SL y TP especificados. Quizás haya alguna solución ya hecha, yo no he sido capaz de encontrar nada. Muchas gracias de antemano.
Establezca 2 órdenes limitadas de compra/venta dirigidas de forma diferente a una distancia X entre sí con stop, take, trawl.
Por ejemplo:
Si el precio alcanza cualquiera de los límites y cierra esta orden en el stop o en la toma, el límite opuesto se cancela y se vuelven a establecer 2 límites dirigidos de forma diferente.
¿Y cómo se puede limitar la extensión de los limitadores?
Es decir, si el spread es superior a 5 pips, por ejemplo, entonces no coloque órdenes pendientes, pero si es demasiado problema, puede omitir este parámetro.
Ivan Bielyi #: Me refiero a que si el spread es superior a 5 puntos entonces no debemos colocar órdenes pendientes, pero si es muy problemático, podemos omitir este parámetro.
¿Qué sentido tiene? No se ejecutarán ahora (son límites). Y cuando llegue el momento de la ejecución, el diferencial será completamente diferente.
Si quieres mirar en el probador, puedes quitar la prueba para una hora posterior a la actual. Esto es en OnInit. Y no recuerdo si en 4ka en el probador una solicitud de tiempo devolverá exactamente el tiempo del probador. Creo que devolverá la hora actual, por lo que en el probador sólo hay que poner órdenes a la vez y ya está. Además, al solicitar la hora local se obtendrá la hora local actual.
Es en el 5k en el probador un emulador de entorno completo.
Gracias por la aclaración
https://www.mql5.com/ru/code/10236
//+------------------------------------------------------------------+
//| i`lbeback.mq4 |
//| Copyright ? 2011, AM2 && Tiburond |
//| http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright ? 2011, AM2 && Tiburond"
#property link "http://www.forexsystems.biz"
#define MAGIC 20110406
extern int StopLoss = 1300; //???????? ??????
extern int StartHour = 21; //??? ?????? ????????(???????????? ?????)
extern int Distance = 250; //?????????? ?? ???? ??? ????????? ??????
extern int Step = 50; //??? ????????? ???????
extern int Count = 4; //?????????? ??????????????? ???????
extern int Expiration = 4; //????? ????????? ??????
extern double Lots = 1; //???
extern bool MM = true; //?????????? ???????????????
extern double TSP = 5; //????
extern bool BU = true; //?????????? ?????? ??????? ? ????????? ? ??????? ???
extern int BUHour = 2; //??? ????? ??????? ??????? ??????? ? ?????????
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int b=0,s=0,res;
datetime expiration = TimeCurrent()+3600*Expiration;
double BuyPrice=fND(Open[0]-Distance*Point);
double SellPrice=fND(Open[0]+Distance*Point);
for (int i=OrdersTotal()-1;i>=0;i--)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue;
if (OrderType()==OP_BUYLIMIT) b++;
if (OrderType()==OP_SELLLIMIT) s++;
}
}
if (Hour()>BUHour && Hour()<StartHour && AllProfit()>0) ClosePositions();
if (Hour()>BUHour && DayOfWeek() == 5) ClosePositions();
if (Hour()==StartHour && b<1 && DayOfWeek() != 5)
for(i=1;i<=Count;i++)
{
{
res=OrderSend(Symbol(),OP_BUYLIMIT,fLots(),fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point),fND(Open[0]),"",MAGIC,expiration,Blue);
Sleep(3000);
if(res<0)
{
Print("??????: ",GetLastError());
} else {
RefreshRates();
}
}
}
if (Hour()==StartHour && s<1 && DayOfWeek() != 5)
for(i=1;i<=Count;i++)
{
{
res=OrderSend(Symbol(),OP_SELLLIMIT,fLots(),fND(Bid+(Distance*Point+i*Step*Point)),3,fND(SellPrice+StopLoss*Point),fND(Open[0]),"",MAGIC,expiration,Red );
Sleep(3000);
if(res<0)
{
Print("??????: ",GetLastError());
} else {
RefreshRates();
}
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
double fND(double d, int n=-1)
{
if (n<0) return(NormalizeDouble(d, Digits));
return(NormalizeDouble(d, n));
}
//+------------------------------------------------------------------+
double fLots()
{
double lot=Lots;
double lot_min =MarketInfo( Symbol(), MODE_MINLOT );
double lot_max =MarketInfo( Symbol(), MODE_MAXLOT );
if (MM)
{
double lot_step =MarketInfo( Symbol(), MODE_LOTSTEP );
double lotcost =MarketInfo( Symbol(), MODE_TICKVALUE );
double dollarsPerPip=0.0;
lot = AccountFreeMargin()*TSP/100.0;
dollarsPerPip=lot/StopLoss;
lot=fND(dollarsPerPip/lotcost, 2);
lot=fND(lot/lot_step, 0) * lot_step;
}
if (lot<lot_min) lot=lot_min;
if (lot>lot_max) lot=lot_max;
return(lot);
}
//+------------------------------------------------------------------+
void ClosePositions()
{
if(BU)
for (int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
}
Sleep(1000);
}
}
}
//+------------------------------------------------------------------+
double AllProfit()
{
double Profit = 0;
for (int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC)
if (OrderType() == OP_BUY || OrderType() == OP_SELL) Profit += OrderProfit();
}
return (Profit);
}
//+------------------------------------------------------------------+
Por favor, ayúdenme a hacer correcciones. Este EA no cierra forzosamente las órdenes abiertas. Me gustaría que junto a la hora de establecer los límites también pudiéramos establecer la hora de su cierre forzoso.
Necesitamos TP y trall para optimizarlos. Un trall, para que todos los límites se cerraran en una pequeña forma pero recoger el ruido nocturno.
Si tienes una buena estrategia y estás dispuesto a compartirla, puedo escribir un EA.
¿Cómo puedo limitar el spread en las órdenes limitadas?
¿Y cómo se puede limitar la extensión de los limitadores?
Me refiero a que si el spread es superior a 5 puntos entonces no debemos colocar órdenes pendientes, pero si es muy problemático, podemos omitir este parámetro.
¿Qué sentido tiene? No se ejecutarán ahora (son límites). Y cuando llegue el momento de la ejecución, el diferencial será completamente diferente.
¿Qué sentido tiene? No se ejecutarán ahora (son límites). Y cuando llegue el momento de la ejecución, el diferencial será completamente diferente.
Lo que toma como base y lo complejo que es el algoritmo.
Determina la tendencia de la media móvil