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

 
Una variabile, non una citazione. C'è un conteggio in una variabile stringa, e il doppio viene convertito in una variabile stringa con la precisione specificata. Questo è ovviamente forte.
 
A proposito, questo è a proposito di una citazione in cinque cifre che arriva con più di cinque cifre decimali. Volevo fare un controllo automatico, ma ho scoperto che non è così facile in questa lingua. Nel frattempo, ho controllato manualmente con una stampante. Non ci sono più di cinque cifre decimali, quanto spesso accade? Forse era al terminal 4?
 
Ok, c'è un'ignoranza sistematica dei messaggi. Dovremmo ricominciare un thread.
 
pribludilsa #:
Ok, c'è un'ignoranza sistematica dei messaggi. Dovremmo ricominciare un thread.

ci sono già stati argomenti su questo argomento. in una stringa e il numero di stringhe da contare. Devi prima contare il numero di cifre prima del punto decimale. Potete convertirlo in un numero intero. Ed è altrettanto imbarazzante stringere))))

 
Alexey Viktorov #:

Nel tester di mt4 non è possibile aprire ordini su altre coppie, tutto il resto è disponibile senza problemi.

Grazie, è effettivamente possibile ottenere i valori dell'indicatore da un altro strumento nel tester.
Alexander #:

Controlla la disponibilità di quotazioni su AUDUSD, sul TF corretto

Questo era esattamente il problema. La questione è che stavo testando in un giorno di riposo (domenica) e ho "scaricato" un archivio di quotazioni per il simbolo richiesto (AUDUSD), ma si è scoperto che non potevano essere scaricati nel giorno di riposo, perché i server del mio rivenditore forex non erano disponibili in quel giorno di riposo. E oggi, lunedì, il download dell'archivio delle quotazioni e il test hanno avuto successo.
MakarFX #:
Mi dispiace, ho sbagliato, non lo sapevo nemmeno io.
Va bene, le tue risposte nei messaggi privati erano molto più preziose.

È davvero bello avere persone che rispondono e si aiutano a vicenda qui. Non tutte le risposte possono essere trovate nella documentazione)
 
Valeriy Yastremskiy #:

ci sono già stati argomenti su questo argomento. in una stringa e il numero di stringhe da contare. Devi prima contare il numero di cifre prima del punto decimale. Potete convertirlo in un numero intero. Ed è anche un po' complicato portare)))) ad una stringa.

Sì, volevo farlo anch'io, solo la conversione del doppio in stringa viene fatta con la precisione specificata, se la precisione non è specificata, 8 cifre di default.

 
Valeriy Yastremskiy #:

ci sono già stati argomenti su questo argomento. in una stringa e il numero di stringhe da contare. Devi prima contare il numero di cifre prima del punto decimale. Potete convertirlo in un numero intero. Ed è altrettanto imbarazzante stringere))))

La conversione degli interi, sì, è probabilmente l'unica. L'ho pensato anch'io, ma mi sembrava troppo complicato fare una specie di ciclo di moltiplicazione o di divisione per 10. Non ci ho ancora pensato.
 
MakarFX #:
//+----------------------------------------------------------------------------+
//| Модификация ордеров                           |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
{
 double
   BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, 
   SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;

   int
   BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;

   double
   op = 0, lt = 0, order_lots = 0;

   int
   tk = 0, b = 0, s = 0;
   price = 0;tp = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol() &&  OrderType() == otype)
              {
               op = NormalizeDouble(OrderOpenPrice(), Digits());
               lt = NormalizeDouble(OrderLots(), 2);
               tk = OrderTicket();
               if(otype == OP_BUY)
                 {
                  b++;
                  if(op > BuyPriceMax || BuyPriceMax == 0)
                    {
                     BuyPriceMax    = op;
                     BuyPriceMaxLot = lt;
                     BuyPriceMaxTic = tk;
                    }
                  if(op < BuyPriceMin || BuyPriceMin == 0)
                    {
                     BuyPriceMin    = op;
                     BuyPriceMinLot = lt;
                     BuyPriceMinTic = tk;
                    }
                 }
               
               if(otype == OP_SELL)
                 {
                  s++;
                  if(op > SelPriceMax || SelPriceMax == 0)
                    {
                     SelPriceMax    = op;
                     SelPriceMaxLot = lt;
                     SelPriceMaxTic = tk;
                    }
                  if(op < SelPriceMin || SelPriceMin == 0)
                    {
                     SelPriceMin    = op;
                     SelPriceMinLot = lt;
                     SelPriceMinTic = tk;
                    }
                 }
               if (otype == OP_BUY || otype == OP_SELL) 
                  {
                   price += OrderOpenPrice() * OrderLots();
                   order_lots += OrderLots();
                  }
              }
//*************************************************************//
double   AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;
      if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/
         (BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Point(), Digits());
      if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
         AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/ 
         (SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());
      if (Drawdown < DrawdownClosingMinMaxOrder) 
         avg_price = NormalizeDouble(price / order_lots, Digits);
//*************************************************************//
   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == Magic)
            if(OrderSymbol() == Symbol())
              {
               op  = NormalizeDouble(OrderOpenPrice(), Digits());
               tp = NormalizeDouble(OrderTakeProfit(), Digits());
               lt  = NormalizeDouble(OrderLots(), 2);
               tk  = OrderTicket();

                  if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)
                        if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                  if(otype == OP_SELL && s >= 2  && Drawdown >= DrawdownClosingMinMaxOrder)
                    {
                     if(tk == SelPriceMaxTic || tk == SelPriceMinTic)
                        if(Ask > AwerageSelPrice && tp != AwerageSelPrice)
                           if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))
                              Print("OrderModify error #", GetLastError());

                     if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)
                        if(!OrderModify(tk, op, 0, 0, 0, clrRed))
                           Print("OrderModify error #", GetLastError());
                    }
                 if (Drawdown < DrawdownClosingMinMaxOrder)    
                 if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
                 if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits); 
                    {
                    if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
                      Print("Ордера успешно модифицированы!");
                      else Print("Ошибка модификации ордеров!");
                    } 
             } 
}
 
Valeriy Yastremskiy #:

C'è qualcosa che non so? Inoltre non è possibile ottenere i dati delle barre da altri strumenti in base all'ora del tester, saranno ricevuti in base all'ora corrente. Ecco perché non posso testare la multivaluta anche solo nella parte di calcolo in 4ka.

Ho sempre pensato che MT4 tester emula completamente l'ambiente di un singolo strumento, e MT5 l'intero ambiente che è disponibile.

O non è così?

Valery, presta attenzione alla linea

  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);

nel mio codice... Ho usato le funzioni hex per molto tempo, ma ecco una funzione simile

SymbolInfoInteger("EURJPY", SYMBOL_DIGITS);

ha dato uno stackey 0.

Quindi, pensate a dove si trova il bug... E dato che mt4 si rifiuta di supportarlo, potete supporre che non sarà mai risolto...

Tutto il resto deve essere controllato. Non me ne occupo più da così tanto tempo che non voglio nemmeno ricordare.

 

Alexey Viktorov #:

Ho usato le funzioni del venerdì per molto tempo

Potete suggerirmi dove posso imparare MQL5 (in russo)?

Motivazione: