Según tengo entendido, es el responsable de que el EA retrase el recálculo hasta que aparezca una nueva barra. Hasta que no cambie la hora de apertura de la barra cero, el recálculo se detiene.
En consecuencia, si abro un EA en minutos, se recalculará con cada nuevo minuto. Y si lo abro en H4, se recalculará cada 4 horas.
¿Cómo escribir esta línea correctamente, para que el EA no tome la hora de apertura de la barra actual, es decir, la barra en la que está abierto el terminal, sino la que yo especifique en la configuración? Es decir, coloco el EA en H4, por ejemplo, y recalculará cada 5 minutos, porque así lo he configurado. O cada minuto.
1) Cualquier estrategia debe estar definida por el número de órdenes abiertas al mismo tiempo. En consecuencia, antes de abrir la siguiente orden, debemos comprobar cuántas están ya abiertas.
2) En una barra, no puede haber fractales SUPERIORES y INFERIORES al mismo tiempo, respectivamente, el control se clasifica como
pertenece a la categoría de la idiotez del programador.
3) Antes de escribir las condiciones para devolver los valores del indicador de la memoria intermedia, es necesario saber exactamente qué valor es "vacío" para ella. ¿Has comprobado que es 0?
4) La construcción.
Aunque funcionará (en la mayoría de los casos), pero no es natural, porque es una idea de "libre albedrío" del promotor, y es poco informativa para el comerciante. Una alternativa: el seguimiento de un nuevo bar.
5) Hay que empezar por lo básico, porque esto:
Indica que no entiendes nada de lo que escribes.
La mejor manera de entenderlo es estudiar cómo funcionan los códigos de otras personas y modificarlos para tus propios fines. Buena suerte.
Los muestra tal y como están escritos, punto por punto. No los modifica, de lo que no has dicho ni una palabra. Aquí está el código completo:
//+------------------------------------------------------------------+//| Strategy 3.mq4 |//| |//| |//+------------------------------------------------------------------+#property copyright""#property link""#include <Library1.mqh>
externint Magic=111;
externint TP=20;
externint SL=30;
externint Trall_dist=10;
externint Shag=10;
externbool Isp_shag=false;
externbool Isp_bezubitok=false;
externdouble Lot=0.1;
double SS=0,BS=0;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
double tp,sl;
if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнака
elseif(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
double Up=iFractals(Symbol(),0,MODE_UPPER,3); //верхний фрактал,формируется на третьей свече
double Down=iFractals(Symbol(),0,MODE_LOWER,3); //нижний фрактал,формируется на третьей свече
//----if(Up>0&&Down==0&&Volume[0]<2) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:
OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупку
else {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка)
{
for (int pos=0;pos==OrdersTotal();pos++)
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
}
}
}
elseif(Up==0&&Down>0&&Volume[0]<2)
{
if((Bid-Low[3]-5*Point)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL))
OrderSend(Symbol(),OP_SELLSTOP,Lot,Low[3]-5*Point,20,Low[3]+sl,Low[3]-tp,NULL,Magic,0,Red);
else {SS=Low[3]-5*Point; Print("Виртуальный SS:",SS);}
{
for (pos=1;pos==OrdersTotal();pos++)
{
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_SELLSTOP)
{
OrderModify(OrderTicket(),Down-5*Point,Low[3]+sl,Low[3]-tp,0,CLR_NONE);
}
}
}
if(OrdersTotal()>0)
Trailing_stop(Magic,Symbol(),Trall_dist,Shag,Isp_shag,Isp_bezubitok);
return(0);
}}
//+------------------------------------------------------------------+
Intento escribir como he leído, mirado, entendido. Tu crítica me recuerda a un manual de MQL4 - lo entiendo sólo si alguien me lo explica.
if(Up>0&&Down==0&&Volume[0]<2) //если верхний фрактал есть а нижнего нету и прошло не больше 2х тиков то:
{
if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если расстояние 0 бара от хая фрактала позволяет то:OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green);//выставляем отложенный на покупкуelse {BS=High[3]+5*Point; Print("Виртуальный BS:",BS);} // а ели нет то запоминаем(позже будет добавлен вход с рынка){ // К чему относится эта скобка???
for (int pos=0;pos==OrdersTotal();pos++)
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)
{
OrderModify(OrderTicket(),Up+5*Point,High[3]-sl,High[3]+tp,0,CLR_NONE);
}
} // это пара к той...
}
Y este código
if(Digits==3||Digits==5) {tp=TP*10*Point;sl=SL*10*Point;} // условие для пятизнакаelseif(Digits==2||Digits==4) {tp=TP*Point;sl=SL*Point;} // условие для четырехзнака
es mejor escribir en init() y mejor no así
double point; // на уровне глобальных переменныхintOnInit()
{
point = Digits%2 == 0 ? _Point : _Point * 10;
}
2) No puede haber fractales SUPERIOR y INFERIOR en la misma barra al mismo tiempo, respectivamente, compruebe
pertenece a la categoría de la idiotez del programador.
Así que estas citas son sólo para idiotas.
2) No puede haber fractales SUPERIOR y INFERIOR en la misma barra al mismo tiempo, respectivamente, compruebe
pertenece a la categoría de idiotez de los programadores.
Ambos fractales pueden estar en la misma barra
quería decir minutos, pero se olvidó de los meses
¿Cuál es la diferencia entre minutos y meses?
¿De qué se queja el registro de modificaciones? "Estúpidamente abre nuevas órdenes pendientes" porque no hay límite, pero hay un OrderSend.
¿Cuál es la diferencia entre minutos y meses?
1) Cualquier estrategia debe estar definida por el número de órdenes abiertas al mismo tiempo. En consecuencia, antes de abrir la siguiente orden, debemos comprobar cuántas están ya abiertas.
2) En una barra, no puede haber fractales SUPERIORES y INFERIORES al mismo tiempo, respectivamente, el control se clasifica como
pertenece a la categoría de la idiotez del programador.
3) Antes de escribir las condiciones para devolver los valores del indicador de la memoria intermedia, es necesario saber exactamente qué valor es "vacío" para ella. ¿Has comprobado que es 0?
4) La construcción.
Aunque funcionará (en la mayoría de los casos), pero no es natural, porque es una idea de "libre albedrío" del promotor, y es poco informativa para el comerciante. Una alternativa: el seguimiento de un nuevo bar.
5) Hay que empezar por lo básico, porque esto:
Indica que no entiendes nada de lo que escribes.
La mejor manera de entenderlo es estudiar cómo funcionan los códigos de otras personas y modificarlos para tus propios fines. Buena suerte.
Y este código
es mejor escribir en init() y mejor no así
y luego en start()
tp = High[3]+TP*point;