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

 
Николай Никитюк:
Hola, 2020.11.15_05:51 GMT+3. Algo así como que mi probador de estrategias en MT4 es demasiado lento. Parecía estar probando bien durante tres meses de historia en el gráfico horario del GBPUSD no mucho tiempo. Estaba probando mi Asesor Experto. Y recientemente probé mi EA en GOLD,M15 durante un mes de historia. Tardé una hora y cuarenta y siete minutos en comprobarlo, pero en el probador fue un día y medio. ¿Qué puedo hacer para que mi probador de estrategias funcione rápidamente? ¿Debo escribir al Servicio de Atención al Cliente? ¿Quién sabe qué hacer? Esperaré una respuesta. 06:04 GMT+3. Sí, puedo adjuntar el registro del probador de MT4.

Depende del indicador que esté instalado. Hay indicadores que no sólo ralentizan el probador, sino que todo el ordenador se cuelga.

 
SanAlex:

Depende del indicador que esté instalado. Hay tales indicadores, que no sólo el probador se ralentiza, sino que todo el ordenador se cuelga.

No espera una respuesta: ¡se acabó el tiempo!

Mensaje escrito:2020.11.15_05:51 GMT+3

La respuesta también se esperaba el día 15:"Estaré esperando una respuesta. 06:04 GMT+3"

probador de estrategias en MT4 es demasiado lento. Parecía funcionar bien en mis tres meses de historia en el gráfico horario del GBPUSD no mucho tiempo. Estaba probando mi Asesor Experto. Y recientemente probé un EA en GOLD,M15 durante un mes de historia. Tardé una hora y cuarenta y siete minutos en comprobarlo, pero en el probador fue un día y medio. ¿Qué puedo hacer para que mi probador de estrategias funcione rápidamente? ¿Debo escribir al Servicio de Atención al Cliente? ¿Quién sabe qué hacer? Esperaré una respuesta. 06:04 GMT+3. Sí, puedo adjuntar el registro del probador de MT4.


Así que si quieres ayudar, responde rápido y a tiempo.

P.D. No he tenido tiempo de responder yo mismo, me he quedado dormido.

 
Vitaly Muzichenko:

Ya no espera una respuesta: ¡se acabó el tiempo!

Mensaje escrito:2020.11.15_05:51 GMT+3

La respuesta también se esperaba el día 15:"Estaré esperando una respuesta. 06:04 GMT+3".


Así que, si quieres ayudar, responde rápido y a tiempo.

P.D. Yo mismo no he tenido tiempo de responder - me quedé dormido.

sucede: lo que uno pregunta y el otro encuentra la respuesta.

 
Gudgeon:
Por favor, dime cómo calcular la raíz cúbica? expresión MathPow(x,1/3)=1

1/3=0 por lo tanto uno de los valores debe ser del tipo doble es decir 1/3.0 o 1.0/3 o 1.0/3.0

 
Alexey Viktorov:

1/3=0 por lo tanto es necesario poner uno de los valores en tipo doble es decir 1/3.0 o 1.0/3 o 1.0/3.0

Gracias.

 

Hola.

He decidido empezar con un EA, para el primero, para rehacerlo, que ponga un stop loss en el punto de equilibrio.

Creo que todo es correcto, se compila, pero no se traduce, por favor ayuda.

//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"
#property strict
//#define MAGICMA  20131111
//--- Inputs
input double Lots          = 0.1;
input double MaximumRisk   = 0.02;
input double DecreaseFactor= 3;
input int    SL            = 600;
input int    Slip          = 50;
input int    MovingPeriod  = 12;
input int    MovingShift   = 6;
//extern string Trailing_Funcion   = "Main_step_tral";
//extern bool   tral               =true;
extern int    TralStop       = 40; // Растояние в пунктах, откуда начнем тралить : если цена прошла в плюс 40 пунктов, то стоп передвинется на 5 пунктов в плюсовом поле
extern int    Tral           = 5; // Шаг трала
extern int    MAGICMA        = 12345;

//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys,sells;
   buys=0;
   sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Функция выставления стоп лосс  в БУ                              |
//+------------------------------------------------------------------+
void T_SL()
{
int i=0;
for(i=0; i<OrdersTotal(); i++)
{
if((OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber()!=MAGICMA) continue;
if(OrderType()==OP_BUY)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TralStop*Point,Digits))
//if(OrderOpenPrice()<=(Bid-TralStop))//&&OrderOpenPrice()>OrderStopLoss())
{      
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Tral*Point,Digits),OrderTakeProfit(),0,Green);
}
}  
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TralStop*Point,Digits))
//if(OrderOpenPrice()>=(Ask+TralStop))//&&OrderOpenPrice()<OrderStopLoss()) 
{
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Tral*Point,Digits),OrderTakeProfit(),0,Red);
}
} 
}
}
//| Конец функции тралл стоп лосс |  
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slip,NormalizeDouble(Bid+SL*Point,Digits),0,"",MAGICMA,0,clrDarkRed);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slip,NormalizeDouble(Ask-SL*Point,Digits),0,"",MAGICMA,0,clrDarkGreen);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for start trall
   if (TralStop!=0) T_SL();
 //  if(tral){T_SL();}  // это строка запуска тралла
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders( Symbol())==0) CheckForOpen();
   else                                  CheckForClose();
//---
  }
//+------------------------------------------------------------------+
 



double   Fibo_Level= ObjectGetDouble(
                       0,          // идентификатор графика
                       n,              // имя объекта
                       OBJPROP_LEVELVALUE,           // идентификатор свойства
                       4     // модификатор свойства
                    );

Hola!!! ¿Puedes decirme cómo obtener el precio del nivel 61.8 de Fibonacci?

¿Por qué existe una función quedevuelve una descripción del nivel del objeto de Fibonacci? Si esta descripción no tiene referencia al precio, ¿cómo puede utilizarse desde el punto de vista práctico?)


¿Tendría que calcularse el precio por sí mismo en función de la distancia entre los puntos de anclaje?

Документация по MQL5: Операции с графиками / ChartID
Документация по MQL5: Операции с графиками / ChartID
  • www.mql5.com
ChartID - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Kira27:

Hola!!! ¿Puedes decirme cómo obtener el precio del nivel 61.8 de Fibonacci?

¿Por qué existe una función quedevuelve una descripción del nivel del objeto de Fibonacci? Si esta descripción no tiene referencia al precio, ¿cómo puede utilizarse desde el punto de vista práctico?)


¿Tendría que calcularse el precio por sí mismo por la distancia entre los puntos de anclaje?

Entre los precios de las coordenadas del objeto es el 100%. El nivel 61,8 es el precio del nivel 0 más el 61,8%. No se trata de una operación gráfica.

 
Alexey Viktorov:

Entre los precios de las coordenadas de los objetos es del 100%. El nivel 61,8 es el precio del nivel 0 más el 61,8%. No se trata de una operación de carta.

¡Gracias! Eso es lo que pensé.

 

Hola. La función MarketInfo() se utiliza en mql4 para obtener la información actual del mercado. ¿Qué función debo utilizar para obtener MODE_LOTSIZE, MODE_TICKVALUE y MODE_TICKSIZE no para el momento actual, sino según los precios de cierre de las barras en el historial?