Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 168

 
TheXpert:
No hay ningún evento de "cierre de orden" en el terminal. Debe utilizar un script o un Asesor Experto. Como se muestra arriba.

¿Cómo se llama el evento cuando se pulsa la "cruz" para cerrar una orden abierta?

Eso es lo que necesitas para "asignar" un sonido

 
paladin800:

¡Muchas gracias!

También encontré mi error. La cuestión es que la condición "Buy_close", le da al programa una tarea para ejecutar la operación, y la comprobación de la posición es "Buy_opened".

La operación está cerrada y la condición "Buy_close" coincide, por lo que se genera un error.

Hizo la condición como sigue:

if(Buy_close && Buy_opened==true)
 
trora:

esta es la acción para "asignar" el sonido a

Buena suerte :)
 

No puedo obtener líneas MA con un desplazamiento de -+0,30%.

No hay ningúnproblema en llamar a la media móvil a partir de la cual se producirá el desplazamiento, pero no hay forma de obtener líneas de desplazamiento.

Código básico:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrMediumVioletRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_label1  ""
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrRed
#property  indicator_style2  STYLE_SOLID
#property  indicator_label2  "Sell TP
input int Period_ = 34;         //Период
int ma1Handle;
double ma1Val[]; 
double ExtMapBuffer1[];
double ExtMapBuffer2[]
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA)
ma1Handle=iMA(_Symbol,_Period,Period_,0,MODE_EMA,PRICE_CLOSE); 
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
CopyBuffer(ma1Handle,0,0,2,ma1Val);
ArraySetAsSeries(ma1Val,true);
int bars=Bars(_Symbol,_Period);
for(int i=0;i<bars;i++)
{
ExtMapBuffer2[i]=ma1Val[0] - ((ma1Val[0]/100)*0.3);//ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
}
//---   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
#property indicator_label2  "Sell TP
Dónde está la segunda coma invertida.
 
CopyBuffer(ma1Handle,0,0,2,ma1Val);
Esta cadena debe estar en un bucle e indexada.
 
sandex:
Esta cadena debe estar en un bucle e indexada.

¿Cómo puedo indexar una cadena? Probando esto, sale el error

ArraySetAsSeries(ma1Val,true);
int bars=Bars(_Symbol,_Period);
for(int i=0;i<bars;i++)
    {
    CopyBuffer(ma1Handle,0,0,2,ma1Val[i]);
    ExtMapBuffer2[i]=ma1Val[i] - ((ma1Val[i]/100)*0.3);//ЗДЕСЬ НЕ ПОЛУЧАЕТСЯ ПОЛУЧИТЬ ЛИНИЮ
    }
 

La indexación debe hacerse así:

CopyBuffer(ma1Handle,0,i,1,ma1Val);
 

Esta línea debe tener el siguiente aspecto:

ExtMapBuffer2[i]=ma1Val[0] - ((ma1Val[0]/100)*0.3);
 

Declara que el array es estático, de tamaño 1:

double ma1Val[1];