Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1304

 
Николай Никитюк:
Ciao, 2020.11.15_05:51 GMT+3. Qualcosa riguardo al mio tester di strategia in MT4 che è troppo lento. Sembrava che stesse testando bene per tre mesi di storia sul grafico orario di GBPUSD non molto tempo. Stavo testando il mio Expert Advisor. E recentemente ho testato il mio EA su GOLD,M15 per un mese di storia. Ho impiegato un'ora e quarantasette minuti per controllarlo, ma nel tester è stato un giorno e mezzo. Cosa posso fare per far funzionare velocemente il mio tester di strategie? Devo scrivere al Service Desk? Chi sa cosa fare? Aspetterò una risposta. 06:04 GMT+3. Sì, posso allegare il log del tester MT4.

Dipende da quale indicatore è installato. Ci sono indicatori che non solo rallentano il tester, ma anche l'intero computer si blocca.

 
SanAlex:

Dipende da quale indicatore è installato. Ci sono tali indicatori che non solo il tester rallenta, ma anche l'intero computer si blocca.

Non sta aspettando una risposta - il tempo è scaduto!

Messaggio scritto:2020.11.15_05:51 GMT+3

La risposta era attesa anche il 15:"Aspetto una risposta. 06:04 GMT+3"

tester di strategia in MT4 che è troppo lento. Sembrava funzionare bene sui miei tre mesi di storia sul grafico orario GBPUSD non molto tempo fa. Stavo testando il mio Expert Advisor. E recentemente ho testato un EA su GOLD,M15 per un mese di storia. Ho impiegato un'ora e quarantasette minuti per controllarlo, ma nel tester è stato un giorno e mezzo. Cosa posso fare per far funzionare velocemente il mio tester di strategie? Devo scrivere al Service Desk? Chi sa cosa fare? Aspetterò una risposta. 06:04 GMT+3. Sì, posso allegare il log del tester MT4.


Quindi, se vuoi aiutare, rispondi rapidamente e in tempo!

P.S. Non ho avuto il tempo di rispondere io stesso - ho dormito troppo.

 
Vitaly Muzichenko:

Non aspetta più una risposta - il tempo è scaduto!

Messaggio scritto:2020.11.15_05:51 GMT+3

La risposta era attesa anche il 15:"Aspetto una risposta. 06:04 GMT+3".


Quindi, se vuoi aiutare, rispondi velocemente e in tempo!

P.S. Io stesso non ho avuto il tempo di rispondere - ho dormito.

succede - quello che uno chiede e l'altro trova la risposta.

 
Gudgeon:
Per favore, ditemi come calcolare la radice cubica? espressione MathPow(x,1/3)=1

1/3=0 quindi uno dei valori deve essere di tipo doppio cioè 1/3.0 o 1.0/3 o 1.0/3.0

 
Alexey Viktorov:

1/3=0 quindi è necessario mettere uno dei valori nel tipo doppio cioè 1/3.0 o 1.0/3 o 1.0/3.0

Grazie!

 

Salve.

Ho deciso di iniziare con un EA, per il primo, per rifarlo, che avrebbe messo uno stop loss a pareggio.

Penso che tutto sia corretto, compila, ma non traduce, per favore aiutatemi.

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

Ciao!!! Puoi dirmi come ottenere il prezzo del livello 61.8 di Fibonacci?

Perché esiste una funzione cherestituisce una descrizione del livello dell'oggetto Fibonacci? Se questa descrizione non ha alcun riferimento al prezzo, come può essere utilizzata dal punto di vista pratico?)


Il prezzo dovrebbe essere calcolato da solo in base alla distanza tra i punti di ancoraggio?

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

Ciao!!! Puoi dirmi come ottenere il prezzo del livello 61.8 di Fibonacci?

Perché esiste una funzione cherestituisce una descrizione del livello dell'oggetto Fibonacci? Se questa descrizione non ha alcun riferimento al prezzo, come può essere utilizzata dal punto di vista pratico?)


Il prezzo dovrebbe essere calcolato da solo in base alla distanza tra i punti di ancoraggio?

Tra i prezzi delle coordinate dell'oggetto è 100%. Il livello 61,8 è il prezzo del livello 0 più il 61,8%. Questa non è un'operazione grafica.

 
Alexey Viktorov:

Tra i prezzi delle coordinate degli oggetti è il 100%. Il livello 61,8 è il prezzo del livello 0 più il 61,8%. Non è un'operazione da grafico.

Grazie!!! È quello che ho pensato.

 

Salve. La funzione MarketInfo() è usata in mql4 per ottenere le informazioni correnti del mercato. Quale funzione dovrei usare per ottenere MODE_LOTSIZE, MODE_TICKVALUE e MODE_TICKSIZE non per il momento attuale, ma secondo i prezzi di chiusura delle barre nella storia?

Motivazione: