Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1092

 
Reinstalar el sistema operativo. Cómo restaurar después de la reinstalación del sistema operativo MT4 al estado que tenía antes de la reinstalación.
Indicadores, EAs, scripts; plantillas, perfiles; cuentas
 
AlexandrL:
Reinstalar el sistema operativo. Cómo restaurar después de la reinstalación del sistema operativo MT4 al estado que tenía antes de la reinstalación.
Indicadores, Asesores Expertos, scripts; plantillas, perfiles; cuentas
Antes de la reinstalación copie la carpeta del terminal en una unidad flash. Si la versión es una 7 o superior, entonces la carpeta compartida también. Más detalles disponibles aquí
 

Por la tarde.

Un asesor basado en un indicador de flecha.

Vender en el fractal superior, comprar en el inferior. En el trabajo, máx. 1 pedido. Pero hay un error en alguna parte, porque el Asesor Experto no tiene en cuenta los fractales y se abre sólo en la compra. O no se abrirá en absoluto (si cambiamos el desplazamiento en iCustom). He intentado insertar una condición diferente en el Asesor Experto (en el cruce de la flecha). Todo funciona, pero no toma los datos del indicador de flecha.

indicador:

//+------------------------------------------------------------------+
//|                                                   MI_Fractal.mq4 |
//|                                                     Орешкин А.В. |
//|                                        http://www.vk.com/mtforex |
//+------------------------------------------------------------------+
#property copyright "Орешкин А.В."
#property link      "http://www.vk.com/mtforex"

#property indicator_chart_window
#property indicator_buffers 2
#property  indicator_color1 Aqua
#property  indicator_color2 Yellow
#property  indicator_width1 2
#property  indicator_width2 2

//--- input parameters
extern int       leftBars=10;
extern int       rightBars=2;
extern int       difference=10;
//extern int       maximumBars=1000;
extern bool      showUp=true;
extern bool      showDown=true;

bool  UP_Fractal,DOWN_Fractal;
double DEF,up[],down[];

int init()
  {
   DEF=NormalizeDouble(difference*Point,Digits);
   SetIndexBuffer(0,up);
   SetIndexBuffer(1,down);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexStyle(1,DRAW_ARROW);    
   SetIndexArrow(0,217);
   SetIndexArrow(1,218);
   return(0);
  }

int deinit(){return(0);}

int start()
  {   
   //for (int i=maximumBars;i>rightBars;i--)
   for (int i=Bars-IndicatorCounted()-leftBars-1;i>rightBars;i--)   
      {//3
      UP_Fractal=true;DOWN_Fractal=true;
      
      for (int x=i+leftBars;x>=i-rightBars;x--)
         {//0
         if (x==i) continue;
         if (High[i]-High[x]<DEF) UP_Fractal=false;
         if (Low[x]-Low[i]<DEF) DOWN_Fractal=false;
         }//0
      
      up[i]=EMPTY;
      down[i]=EMPTY;
      
      if (showUp)   
         if (UP_Fractal && !DOWN_Fractal) up[i]=High[i];
      
      if (showDown)   
         if (!UP_Fractal && DOWN_Fractal) down[i]=Low[i]; 
      }//3
   return(0);
  }


Código del búho:

double upFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,0,1);
double downFr=iCustom(Symbol(),0, "MI_Fractal",leftBars,rightBars,difference,showUp,showDown,1,1); 
     
   if (upFr!=EMPTY_VALUE)   
   //if (upFr<2) 
   //if (upFr>0)    
     {   
                                          
      Alert(upFr); 
      Opn_S=true;                             
      //Cls_B=true;                                
     }
 if (downFr!=EMPTY_VALUE)
   //if (downFr<2)
 //  if (downFr>0)                                              
     {                                         
     Opn_B=true;                              
     //Cls_S=true;                             
     }

Ya he probado todo tipo de soluciones, pero no funciona. Por favor, dígame dónde está el error.

Archivos adjuntos:
 

Buenas tardes.

Ayúdame a encontrar el precio de apertura de la primera barra del martes y a fijarlo para que pueda calcular a partir de él toda la semana.

Gracias.

 

Hola, agradecería que alguien me dijera qué poner aquí para que el EA deje de abrir órdenes pendientes después de que se disparen.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#enlace de propiedad "http://cmillion.ru"
#propiedad estricta
#property description "El Asesor Experto opera en las subidas del mercado sin utilizar ningún indicador."
#property description "La idea del Asesor Experto es que las órdenes de stop se muevan discretamente en el tiempo a una distancia determinada del precio actual."
#property description "Si el precio se ha movido lo suficientemente fuerte en una dirección, el EA simplemente no tiene tiempo para mover la orden y se convierte en una orden de mercado."
#descripción de la propiedad "Entonces se lanza una orden de trall".
//--------------------------------------------------------------------
extern int Stoploss = 10; // El Stoploss, si es 0, no cambia
Beneficio = 50; //el beneficio, si es 0, no cambia.
extern int TrailingStop = 10; //longitud de la rampa, si es 0, no hay trailing stop
extern int TrailingStart = 0; //cuando activar un trall, por ejemplo después de alcanzar 40 puntos de beneficio
extern int StepTrall = 2; //paso de rampa - mover StopLoss no más cerca que StepTrall
extern int NoLoss = 0, //transferencia al punto de equilibrio a un número determinado de puntos de beneficio, si es 0, entonces no hay transferencia al punto de equilibrio
MinProfitNoLoss = 0; //Ganancia mínima para la transferencia a lossless.
extern int Magia = 77; //magia
extern int Paso = 10; //distancia del precio
extern double Lot = 0.1;
extern intern TimeModify = 30; //el número de segundos antes de los cuales está prohibido modificar una orden
extern int slippage = 30; //desviación de precio máxima permitida para las órdenes de mercado (órdenes de compra y venta).
//--------------------------------------------------------------------
datetime TimeBarB,TimeBarS;
//--------------------------------------------------------------------
int inicio()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
doble OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
si (OT==OP_BUY)
{
b++;
si (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
si (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
else Print("Orden de compra modificar SL ",OSL,"->",SL);
}
}
si (OT==OP_SELL)
{
s++;
if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
si ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Orden Modificación Venta SL ",OSL,"->",SL);
else Print("Orden de venta modificar SL ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}
}
si (b+TicketB==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
si (s+TicketS==0)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
si (¡BilleteB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
si (¡BilleteS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
return(0);
}
//--------------------------------------------------------------------

Archivos adjuntos:
 
yaaarik777:

Buenas tardes.

Ayúdame a encontrar el precio de apertura de la primera barra del martes y a fijarlo para que pueda calcular a partir de él toda la semana.

Gracias.

if (DayOfWeek() == 1) Precio = iOpen(Symbol(), PERIOD_D1, 4);
if (DayOfWeek() >= 2) Precio = iOpen(Symbol(), PERIOD_D1, DayOfWeek() - 2);

 

Parece que MetaTrader tiene fallos: ¿alguien ha experimentado un cuelgue al intentar introducir un procedimiento?

Este es un código sencillo

void OnInit()

{

...

Print("Procedimiento externo");

IniciarCompra(Precio, Toma, Tope, Lote);

...

}

void IniciarCompra(double Precio, double Toma, double Tope, double Lote)

{

Print("Dentro del procedimiento");

....

}

Produce una línea Fuera del procedimiento y luego el probador se cuelga. ¿Qué es?

 
A13ksandr:

Parece que MetaTrader tiene fallos: ¿alguien ha experimentado un cuelgue al intentar introducir un procedimiento?

Este es un código sencillo

void OnInit()

{

...

Print("Procedimiento externo");

IniciarCompra(Precio, Toma, Tope, Lote);

...

}

Deja de comerciar en el inite, eso es lo que significa. Cuántas veces he dicho que inite debe tener un mínimo de código con la terminación más rápida de la ejecución, pero todavía hay alguien que es demasiado perezoso para leer. Hay funciones estándar predefinidas para ejecutar un programa.

Y el inite es como un int, no un input, con retorno del motivo de terminación, por cierto, recomiendo usarlo así.

 
Scarick1:

Hola, agradecería que alguien me dijera qué poner aquí para que el EA deje de abrir órdenes pendientes después de que se disparen.

//+------------------------------------------------------------------+
//| Copyright © 2014, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, cmillion@narod.ru"
#enlace de propiedad "http://cmillion.ru"
#propiedad estricta
#property description "El Asesor Experto opera en las subidas del mercado sin utilizar ningún indicador."
#property description "La idea del Asesor Experto es que las órdenes de stop se muevan discretamente en el tiempo a una distancia determinada del precio actual."
#property description "Si el precio se ha movido lo suficientemente fuerte en una dirección, el EA simplemente no tiene tiempo para mover la orden y se convierte en una orden de mercado."
#property description "Entonces se activa una orden de trallado".
//--------------------------------------------------------------------
extern int Stoploss = 10; // El Stoploss, si es 0, no cambia
Beneficio = 50; //el beneficio, si es 0, no cambia.
extern int TrailingStop = 10; //longitud de la rampa, si es 0, no hay trailing stop
extern int TrailingStart = 0; //cuando se incluye el trall, por ejemplo después de alcanzar los 40 p de beneficio.
extern int StepTrall = 2; //paso de rampa - mover StopLoss no más cerca que StepTrall
extern int NoLoss = 0, //transferencia al punto de equilibrio a un número determinado de puntos de beneficio, si es 0, entonces no hay transferencia al punto de equilibrio
MinProfitNoLoss = 0; //Ganancia mínima para la transferencia a lossless.
extern int Magia = 77; //magia
extern int Paso = 10; //distancia del precio
extern double Lot = 0.1;
extern intern TimeModify = 30; //el número de segundos antes de los cuales está prohibido modificar una orden
extern int slippage = 30; //desviación de precio máxima permitida para las órdenes de mercado (órdenes de compra y venta).
//--------------------------------------------------------------------

datetime TimeBarB,TimeBarS;

TradingAllowed = true;

//--------------------------------------------------------------------
int inicio()
{
double STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
doble OSL=0,StLo=0,PriceB=0,PriceS=0,OOP=0,SL=0,TP=0;
int b=0,s=0,TicketB=0,TicketS=0,OT;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
{
OT = OrderType();
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
SL=OSL;
si (OT==OP_BUY)

{

b++;

TradingAllowed = false;

si (OSL<OOP && NoLoss!=0)
{
StLo = NormalizeDouble(OOP+MinProfitNoLoss*Point,Digits);
if (StLo > OSL && StLo <= NormalizeDouble(Bid - STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (Bid - OOP)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (StLo>=OOP && StLo > OSL+StepTrall*Point) SL = StLo;
}
si (SL > OSL)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Order Modify Buy SL ",OSL,"->",SL);
else Print("Orden de compra modificar SL ",OSL,"->",SL);
}
}
si (OT==OP_SELL)
{

s++;

TradingAllowed = false;

if ((OSL>OOP || OSL==0) && NoLoss!=0)
{
StLo = NormalizeDouble(OOP-MinProfitNoLoss*Point,Digits);
if ((StLo < OSL || OSL==0) && StLo >= NormalizeDouble(Ask + STOPLEVEL * Point,Digits)) SL = StLo;
}
if (TrailingStop>=STOPLEVEL && TrailingStop!=0 && (OOP - Ask)/Point >= TrailingStart)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
if (StLo<=OOP && (StLo < OSL-StepTrall*Point || OSL==0)) SL = StLo;
}
si ((SL < OSL || OSL==0) && SL!=0)
{
if (!OrderModify(OrderTicket(),OOP,SL,TP,0,White)) Print("Error ",GetLastError(), "Orden Modificación Venta SL ",OSL,"->",SL);
else Print("Orden de venta modificar SL ",OSL,"->",SL);
}
}
if (OT==OP_BUYSTOP) {PriceB=OOP; TicketB=OrderTicket();}
if (OT==OP_SELLSTOP) {PriceS=OOP; TicketS=OrderTicket();}
}
}

}

if (b == 0 && s == 0) TradingAllowed = true;

if (b+TicketB==0 && TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(Ask+Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarB=TimeCurrent();
}
if (s+TicketS==0 && TradingAllowed)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Bid - Step * Point,Digits),slippage,SL,TP, "news",Magic,0,CLR_NONE)!=-1) TimeBarS=TimeCurrent();
}
si (¡BilleteB!=0)
{
if (TimeBarB<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Ask + Step * Point,Digits)-PriceB)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Bid - Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Ask + Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketB,NormalizeDouble(Ask + Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarB=TimeCurrent();
}
}
si (¡BilleteS!=0)
{
if (TimeBarS<TimeCurrent()-TimeModify && MathAbs(NormalizeDouble(Bid - Step * Point,Digits)-PriceS)/Point>StepTrall)
{
if (Stoploss>=STOPLEVEL && Stoploss!=0) SL = NormalizeDouble(Ask + Stoploss * Point,Digits); else SL=0;
if (Takeprofit>=STOPLEVEL && Takeprofit!=0) TP = NormalizeDouble(Bid - Takeprofit * Point,Digits); else TP=0;
if (OrderModify(TicketS,NormalizeDouble(Bid - Step * Point,Digits),SL,TP,0,CLR_NONE)) TimeBarS=TimeCurrent();
}
}
return(0);
}
//--------------------------------------------------------------------

De alguna manera...


 
evillive:

Отставить торговать в ините, вот что значит. Сколько уже повторяли что в ините должен быть минимум кода с максимально быстрым завершением исполнения, всё равно найдется кто-нибудь, кому лень читать. Есть же стандартные предопределенные функции для работы программы.

Да и инит типа инт, а не войд, с возвратом причины прекращения работы, между прочим, рекомендую так им и пользоваться. 

Lo siento. Por supuesto, todo ocurre en el void OnTick(). Me escribí a mí mismo)