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

 
Galim_V:

Il compito è trovare la barra con la chiusura minima

for(int x=0; x<=xBars -1; x++)

{

contro++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

se(contatore > 20) pausa;

}

Il compilatore giura su Close

Scrivi i prezzi di chiusura in un array separato e poi fuori dal pulcino ArrauMinimum
 
Alekseu Fedotov:
Scrivi i prezzi di chiusura in un array separato e poi fuori dal pulcino ArrauMinimum
Grazie!
 
Galim_V:

Il compito è quello di trovare la barra con la chiusura minima

ci sono le funzioni iHighest e iLowest (ora anche in MT5)

 
Taras Slobodyanik:

ci sono le funzioni iHighest e iLowest (ora anche in MT5)

Grazie!
 
Galim_V:

Il compito è trovare la barra con la chiusura minima

for(int x=0; x<=xBars -1; x++)

{

contro++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

se(contatore > 20) pausa;

}

Il compilatore giura su Close

Il compito di cercare il prezzo minimo/massimo in MQL4 è risolto da una linea:

double fMinClose = iClose(NULL, 0, iLowest(NULL, 0, MODE_CLOSE, <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik:

è possibile, ma non sarà esattamente un timer.

Grazie.

Come si calcola il volume del lotto in incrementi? Se deposito =1000, lotto = 0,1, il deposito è diventato 2000 lotto = 0,2. Cioè, se il deposito è 1500 o 1700, il lotto non viene incrementato.

 
PolarSeaman:

Grazie.

Come si calcola il volume del lotto in incrementi? Se deposito =1000, lotto = 0,1, il deposito è diventato 2000 lotto = 0,2. Cioè, se il deposito è di 1500 o 1700, il lotto non aumenta.

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

In qualche modo...

 
Konstantin Nikitin:

Come questo...

No, no, con un deposito di 1100, il lotto sarà 0,11, e ho bisogno che il lotto non aumenti fino a 2000. Come faccio a impostare il passo =1000 nelle impostazioni?

 
Buon pomeriggio, potreste dirmi se è possibile aggiungere le coordinate dell'indicizzatore al mouse, se è possibile, per favore inviatemi una mail a ereminmikola@yandex.ru
 

Ciao programmatori. Potreste darmi un suggerimento su come affrontare correttamente la seguente condizione:

1. L'Expert Advisor apre 2 ordini a mercato (acquisto e vendita) con lo stesso lotto specificato nelle impostazioni. - L'ordine viene eseguito senza problemi

Il prossimo presenta un problema, il prezzo può muoversi sia in direzione SELL che in direzione BUY. Come possiamo organizzare il codice in modo che quando sono passati n punti, l'Expert Advisor scannerizzi la redditività di queste due operazioni in LIVE e chiuda l'ordine che ha un saldo negativo dopo n punti? Se avete altre idee su come farlo, per favore consigliatemi.

Vi do il codice - progetto, solo il primo punto viene eseguito, e si aprono 2 trade con TP e SL

2. Quando il prezzo raggiunge la quantità specificata di pip, allora chiudo l'ordine con un saldo negativo e apro altri 2 ordini (acquisto e vendita) con lo stesso lotto,

Gli stop sono fissati al prezzo di apertura del primo ordine, cioè se il trend si inverte, tutti e 3 gli ordini dovrebbero chiudersi simultaneamente.


extern int    _ms = 1000;  
extern double _lots = 0.01;
extern double _TP = 80;
extern double _SL = 35;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 
   pt = Point;
   if (Digits==3||Digits==5) {pt*=10;} else pt = Point;
   _mn = MagicNumberGenerator(_ms);
   Print("The magic number is ",_mn);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (IsNewCandle())
    {
      if (TotalOpenOrders(_mn)==0)
      {
        EnterTrade(OP_BUY);
        EnterTrade(OP_SELL);
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade(int type)
{
   double price = 0; double sl = 0; double tp = 0; double lot = _lots;
   
   if      (type == OP_BUY)  price = Ask;
   else if (type == OP_SELL) price = Bid;
   
   int err = 0;
   int ticket = OrderSend(_Symbol, type, lot, price, 30, 0, 0, NULL, _mn, 0, clrGreen);
   if (ticket == -1)
   {
     err = GetLastError();
     Print("Could not place the order due to error ",err," ",ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED) Alert("You need to enable you autotrade button");
   }
   else 
   {
     if(!OrderSelect(ticket,SELECT_BY_TICKET))
     {
       err = GetLastError();
       Print("Could not select the order due to error ",err," ",ErrorDescription(err));
     }
     else 
     {
       if (OrderType()==OP_SELL)
       {
         sl = OrderOpenPrice()+(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()-(_TP*pt);
       }  
       else if (OrderType()==OP_BUY)
       {
         sl = OrderOpenPrice()-(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()+(_TP*pt);
       }
       if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0, clrNONE))
       err = GetLastError();
       Print("Could not modify the order due to error ",err," ",ErrorDescription(err));
     }
   }
}
Motivazione: