Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 836

 
Alexey Viktorov:

¿Está bien que diga

nada, el hilo es para MT4, así que no le hagas caso

OK, ponte a trabajar, esto es aburrido

 

Saludos a todos. Buena suerte en la vida y provecho en el trabajo.

Estoy pidiendo ayuda (inesperadamente, ¿eh? :) ).

En Mql soy un zerobom, 2 días "en el tema". Si el EA real me obliga a usar el trading automático, estoy tratando de escribir (recogerlo en tiempo real de diferentes partes) búho para mi EA plana y, por supuesto, me estoy cansando de ella :). Llevo unas 10 horas intentando solucionar otro problema y aún no lo he conseguido. Si el consejo de alguien o un ejemplo será muy agradecido (verbalmente y por escrito, y lo más importante en la ducha).

En general... Hay TC, utilizado con éxito por mí durante mucho tiempo. En las condiciones de comercio en el mismo instrumento puede multidireccional órdenes de mercado (no pendientes). A la posición bajada se puede llenar en una señal de comercio, siempre que la posición ha caído por lo menos X pips, a veces sucede y hacer una adición al relleno (en las mismas condiciones (señal de comercio + tamaño drawdown)). El problema (actual) está en la apertura de posiciones adicionales, es decir... cómo comprobar y devolver el valor de la pérdida en una posición larga. Siguiendo el ejemplode https://www.mql5.com/ru/forum/117061, he retocado el código para asignar a cada posición su propio Magik, pero eso es todo. Cómo seleccionar exactamente una posición que se ha sentado y devolver su valor de pérdida.... :(.

"mi" código para abrir operaciones.

//-----------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

si (mis condiciones de entrada)

{

si (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); si no TP = 0;

si (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); si no SL = 0;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "BUY",Magic,0,Blue);

if(ticket < 0) { Print("Error al abrir la orden BUY #", GetLastError());}

}}

if(NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

si (mis condiciones de entrada)

{

si (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); si no TP = 0;

si (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); si no SL = 0;

ticket=OrderSend(Symbol(),OP_SELL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP, "SELL",Magic,0,Red);

if(ticket < 0) { Print("Error al abrir la orden de VENTA #", GetLastError());}

}}

//---------------

Está previsto que se abran órdenes adicionales con el siguiente código

//---------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)==1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

si (mis condiciones de entrada && GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "Extra Buy",Magic_2,0,Blue);

if(ticket < 0) { Print("Error al abrir el pedido BUY #", GetLastError()); }

} }

//---------------

Y ahí es donde me quedé atascado :). Qué utilizar en lugar de GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic). Creo que necesito usar Drawdown_level(Symbol(),OP_BUY,Magic) pero cómo conseguirlo...

Ayuda POR FAVOR, sean amigos.
Z.U. Si me aconsejas, por favor, ten en cuenta que todavía estoy nubyara que no demasiado perezoso para enviarme un poco más de detalle, ya sabes, como si: FOREST THERE, entonces no olvide especificar la dirección <------ || ------>.

Gracias por su atención :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu:

Nada, el hilo es para MT4, así que no le prestas atención.

Ok, ponte a trabajar, esto es aburrido

Dime dónde está una rama similar para MT5, preguntaré allí...

 
Alexander Layzerevich:

Dime dónde hay un hilo similar para MT5, preguntaré allí...

Pregunta aquí. Aquí para ambos idiomas.
 
Alexey Viktorov:

¿Está bien especificar

La función resaltada no es diferente de la declaración de la función. Resulta que la función se declara en los parámetros de entrada de la función.

En MT4 la llamada a la función desde el Indicador va sin errores y funciona como es necesario(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Pensé que podría ser lo mismo en MT5.

Por favor, aconséjeme cómo hacerlo correctamente.

 
Alexander Layzerevich:

En MT4 la llamada a la función desde el Indicador va sin errores y funciona como es necesario(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Pensé que podría ser lo mismo en MT5.

¿Pueden decirme cómo hacerlo correctamente?

Es imposible obtener los datos de Envelopes en mql4
 
Artyom Trishkin:
Así que es imposible obtener los datos de Envelopes en mql4

Este es el código de MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Todo funciona perfectamente. Me gustaría lo mismo en MT5

 
Alexander Layzerevich:

Este es el código de MT4

Todo funciona perfectamente. Me gustaría lo mismo en MT5

Bueno, eso es porque es un código diferente y funcionará.
 
Artyom Trishkin:
Bueno, eso es porque es un código diferente y funcionará.

Corregido el código de MT5 para enviar datos al Indicador:

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIMEFRAMES    TimeFrames    = PERIOD_M5;             // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
double Signal_Buy = (int)Envelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2,  Deviation(1)); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes(string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation(int kanal))
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), tf, period, shift, method, price, Deviation(kanal));
   if(handle<0)
   {
    Print("Failed to create handle ATR, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator ATR, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

Pero el error es el mismo.

 
Alexander Layzerevich:

Este es el código de MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Todo funciona perfectamente. Me gustaría lo mismo en MT5

Cuidado con las manos:

En mi post anterior se destaca esto en su código

double Deviation(int Time_Frames, int _Kanal)

y en el código de este, el mensaje citado es una declaración de función. También destacó.

Y esto

Deviation(TimeFrames, Kanal)

Llamar a una función de usuario que existe. Aunque este método de programación es inaceptable para mí, sigue siendo comprensible. Pero cómo describir el error en ese código, estoy perdido.

Razón de la queja: