Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1304

 
Николай Никитюк:
Bonjour, 2020.11.15_05:51 GMT+3. Quelque chose à propos de mon testeur de stratégie dans MT4 qui est trop lent. Il y a peu de temps, le graphique horaire de la paire GBPUSD semblait fonctionner correctement pendant trois mois. Je testais mon conseiller expert. Et récemment j'ai testé mon EA sur GOLD,M15 pour un mois d'historique. Il m'a fallu une heure et quarante-sept minutes pour le vérifier, mais dans le testeur, cela a pris un jour et demi. Que puis-je faire pour que mon testeur de stratégie fonctionne rapidement ? Dois-je écrire au Service Desk ? Qui sait ce qu'il faut faire ? Je vais attendre une réponse. 06:04 GMT+3. Oui, je peux joindre le journal du testeur MT4.

Cela dépend de l'indicateur qui est installé. Il y a des indicateurs qui non seulement ralentissent le testeur, mais aussi tout l'ordinateur qui se bloque.

 
SanAlex:

Cela dépend de l'indicateur qui est installé. Il existe des indicateurs tels que non seulement le testeur ralentit, mais aussi l'ordinateur tout entier se bloque.

Il ne s'agit pas d'attendre une réponse - le temps est écou lé !

Message écrit le :2020.11.15_05:51 GMT+3

La réponse était également attendue le 15 :"J'attends une réponse. 06:04 GMT+3"

testeur de stratégie dans MT4 qui est trop lent. Il semblait fonctionner correctement sur mes trois mois d'historique sur le graphique horaire GBPUSD depuis peu. Je testais mon conseiller expert. Et récemment j'ai testé mon EA sur GOLD,M15 pour un mois d'historique. Il m'a fallu une heure et quarante-sept minutes pour le vérifier, mais dans le testeur, cela a pris un jour et demi. Que puis-je faire pour que mon testeur de stratégie fonctionne rapidement ? Dois-je écrire au Service Desk ? Qui sait ce qu'il faut faire ? Je vais attendre une réponse. 06:04 GMT+3. Oui, je peux joindre le journal du testeur MT4.


Alors si vous voulez aider, répondez rapidement et à temps !

P.S. Je n'ai pas eu le temps de répondre moi-même - j'ai trop dormi.

 
Vitaly Muzichenko:

Il n'attend plus de réponse - le temps est écoulé !

Message écrit le :2020.11.15_05:51 GMT+3

La réponse était également attendue le 15 :"J'attends une réponse. 06:04 GMT+3."


Donc, si vous voulez aider, répondez rapidement et à temps !

P.S. Je n'ai moi-même pas eu le temps de répondre - j'ai dormi tout le temps.

se produit - ce que l'un demande et l'autre trouve la réponse.

 
Gudgeon:
Dites-moi comment calculer la racine cubique ? expression MathPow(x,1/3)=1

1/3=0 donc l'une des valeurs doit être de type double, c'est-à-dire 1/3.0 ou 1.0/3 ou 1.0/3.0.

 
Alexey Viktorov:

1/3=0 donc il faut mettre une des valeurs en type double c'est-à-dire 1/3.0 ou 1.0/3 ou 1.0/3.0

Merci !

 

Bonjour.

J'ai décidé de commencer avec un EA, pour le premier, pour le refaire, qu'il mettrait un stop loss au breakeven.

Je pense que tout est correct, il compile, mais il ne veut pas traduire, s'il vous plaît aidez.

//+------------------------------------------------------------------+
//|                                               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     // модификатор свойства
                    );

Bonjour !!! Pouvez-vous me dire comment obtenir le prix du niveau 61.8 Fibonacci ?

Pourquoi existe-t-il une fonction quirenvoie une description du niveau de l'objet Fibonacci ? Si cette description n'a aucune référence au prix, comment peut-elle être utilisée d'un point de vue pratique) ?


Le prix devrait-il être calculé tout seul en fonction de la distance entre les points d'ancrage???

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

Bonjour !!! Pouvez-vous me dire comment obtenir le prix du niveau 61.8 Fibonacci ?

Pourquoi existe-t-il une fonction quirenvoie une description du niveau de l'objet Fibonacci ? Si cette description n'a aucune référence au prix, comment peut-elle être utilisée d'un point de vue pratique) ?


Le prix devrait-il être calculé par lui-même en fonction de la distance entre les points d'ancrage???

La différence entre les prix des coordonnées de l'objet est de 100%. Le niveau 61.8 est le prix du niveau 0 plus 61.8%. Il ne s'agit pas d'une opération de cartographie.

 
Alexey Viktorov:

Le prix des coordonnées entre objets est de 100%. Le niveau 61.8 est le prix du niveau 0 plus 61.8%. Ce n'est pas une opération graphique.

Merci ! !! C'est ce que je pensais.

 

Bonjour. La fonction MarketInfo() est utilisée dans mql4 pour obtenir les informations actuelles sur le marché. Quelle fonction dois-je utiliser pour obtenir MODE_LOTSIZE, MODE_TICKVALUE et MODE_TICKSIZE non pas pour le moment présent, mais en fonction des prix de clôture des barres dans l'historique ?

Raison: