Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 170

 
ponochka:
Hola! Hago una captura de pantalla utilizando la función:
WindowScreenShot ("Screenshotname.png",1280,720); pero guarda todo en la carpeta Files, ¡y necesito especificar la ruta en otra carpeta que lo guarde!
Utilizar enlaces simbólicos
 

¡Hola!

Originalmente, la posibilidad de bloqueo de emergencia por margen libre se implementó en el Asesor Experto. aquí hay una parte del código

si(AccountFreeMargin() <= inpMarginLock)

{

gv.isEmergencyLock = true;

.....................

Con el tiempo, quedó claro que esto no era del todo conveniente.

Me gustaría implementar un bloqueo de emergencia a través de la retirada de fondos.

Es decir, al llegar a, digamos, -100 dólares en el depósito, el bloqueo debería activarse.

Me gustaría pedir ayuda, si puedo añadir este código en lugar deAccountFreeMargin(), para activar

Ayúdame a escribir en código en lugar deFreeMargin() para que se produzca el bloqueo no en el margen libre, sino al llegar a una reducción del depósito.

¡¡¡¡¡¡¡Gracias de antemano!!!!!!!

 
Hola , tengo un problema , cuando pulso F9 me sale el menú habitual para abrir una orden pero tengo que elegir un par de símbolos , no como antes , el menú sale para el símbolo que abrí , aconséjame como solucionarlo.
 
Andrey Sablin:
Hola , tengo un problema , cuando pulso F9 me sale el menú habitual para abrir una orden pero tengo que elegir un par de símbolos , no como antes , el menú sale para el símbolo que abrí , aconséjame como solucionarlo.

Servicio --> Ajustes --> Comercio


 

Buenas tardes)

Ayuda por favor, soy un novato..... tratando de hacer un EA en la intersección de los indicadores de super-señales-canal y ZigZag encontrado una plantilla. He puesto los indicadores, pero las órdenes siguen sin abrirse. Aquí está una parte del código.... ¿qué estoy haciendo mal...?

void Señal(double& ar[][],bool& op[],bool& cl[])

{

int trd=-1;

doble up=0.0,dn=0.0;

//---

ArrayInitialize(cl,false);

ArrayInitialize(op,false);

//conectar el indicador de filtro ZigZag

up=iCustom(_Symbol,tf, "ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//nombre, ajustes, buffer, vela de inicio para BUY

dn=iCustom(_Symbol,tf, "ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//nombre, configuración, buffer, inicio de vela para la VENTA

if(dn==EV) trd=0;

if(up==EV) trd=0; //Comentar(trd);

//conectar el reverso y el indicador de salida

up=iCustom(_Symbol,tf, "SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,0,0);//comienza la vela de COMPRA

dn=iCustom(_Símbolo,tf, "SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,1,0,0);//comienza la vela de VENTA

if(up>0.0 && up<EV) cl[1]=true;

if(dn>0.0 && dn<EV) cl[0]=true;

up=0.0;

dn=0,0;

// indicador básico, por el que entramos en el mercado

interruptor(Indicador)

{

caso SuperSignalsChannel:

up=iCustom(_Symbol,tf, "SuperSignalsChannel",SignalGap,ShowBars,dist_0,1,0);//comienza la vela de COMPRA

dn=iCustom(_Símbolo,tf, "SuperSignalsChannel",SignalGap,ShowBars,dist_0,0,0);//comienza la vela de VENTA

romper;


P.D. Si hay un hilo similar en algún foro, deja el enlace, por favor

 


Buenas tardes. Tengo este EA, estoy tratando de modificarlo para que se adapte a mis necesidades, pero hasta ahora no es muy bueno. Las órdenes se abren a precio alto y bajo, pero necesito que sea alto + 5 pips. Sé que esto es responsable de esto, pero no puedo aplicarlo en el código. Espero que me ayuden. Gracias))))

//+------------------------------------------------------------------+
//|                                                 
//+------------------------------------------------------------------+


extern string TimeTrade  = "19:00";    // Время открытия позиции
extern int    DistanceSet    = 100;
extern int TYPE = 0;
extern int TP = 50;
extern int SL = 4500;
extern double lot = 0.1;
extern int Magic_Number = 639713;

int init(){   return(0);}
int deinit(){   return(0);}
int start()
{
   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   double pAsk=Ask+(DistanceSet)*Point;
  double pBid=Bid-DistanceSet*Point;

   if(Orders_Total( Magic_Number, Symbol()) == 0 )
   {
      //Установка ордеров
      if(TYPE<=0)
      {
         // Здесь установим STOP-ордера
         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)
            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+SPREAD,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)
            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1),3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");
      }
      if(TYPE>=1)
      {
         // Здесь установим LIMIT-ордера
         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)
            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1),3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)
            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+SPREAD,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");
      }
   }
   return(0);
}


//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//
int Orders_Total( int mn, string sym)
{
   int num_orders=0;
   for(int i= OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber() == mn && sym==OrderSymbol())
         num_orders++;
   }
   return(num_orders);
}



 
Aleksandr SHablevskiy:


Buenas tardes. Tengo este EA, estoy tratando de modificarlo para que se adapte a mis necesidades, pero hasta ahora no es muy bueno. Las órdenes se abren a precio alto y bajo, pero necesito que sea alto + 5 pips. Sé que esto es responsable de esto, pero no puedo aplicarlo en el código. Espero que me ayuden. Gracias))))




extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

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

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

//+------------------------------------------------------------------+



 
Lehfr:

extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

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

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

//+------------------------------------------------------------------+



Gracias amable hombre, todo funciona))))
 

Buenas tardes, por favor, dígale a un joven adepto dónde está enterrado el perro))

He cambiado un poco el Momentum, parece que funciona como debe ser, pero cuando intento utilizarlo en un Asesor Experto veo que ocurren cosas extrañas, parece que sigue el algoritmo correcto, pero no sé de dónde sale el 0,0449 extra.

input int InpMomPeriod=1; // Período de impulso

void OnTick()

{

double High1 = iCustom(Symbol(),PERIOD_CURRENT, "INdekators 1.0",InpMomPeriod,0,0);

}

Archivos adjuntos:
GBPUSDH11.png  16 kb
GBPUSDH1.png  16 kb
 

Hola, queridos programadores.
Te felicito.

Hay un EA que después de cerrar las órdenes y enviar un mensaje,

Necesito desactivar el comercio automático en el terminal ( pulsar el botón )

No lo hace si el usuario está desconectado del servidor UPN.
Cuando el usuario está conectado al servidor cps y el terminal está abierto, las ventanas están abiertas,
el Asesor Experto está funcionando, pulsando el botón funciona bien
pero cuando ejecute el Asesor Experto, desconéctese del servidor PPS
y después de recibir un mensaje de que Expert Advisor funcionaba
al volver a la UPU, el botón no está pulsado.

El Asesor Experto se ejecuta en el servidor UPP Windows Server 16.

Esta parte del código es responsable de esta función

if(AutotradeOFF)PressOrReleaseAutotrade();

Conclusión - esta función no funciona cuando el usuario está desconectado del servidor VPS.
¿Tal vez haya algunas alternativas para resolver el problema?

¿Cuál puede ser el problema?

Por favor, ayúdenme a resolver este problema.

Se adjunta el código.

¡Muchas gracias de antemano por cualquier ayuda para resolver este problema!

Archivos adjuntos: