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

 
Maksim Efimov MACD standard di una linea di segnale e un istogramma. L'idea è questa: su ogni nuova barra prendiamo le due candele precedenti e otteniamo i valori dell'indicatore su ciascuna di esse. Se il valore MACD sulla seconda candela è maggiore del valore del segnale e il valore MACD sulla prima candela è già sotto il segnale e tutti i valori sono sopra lo zero, significa che c'è un crossover verso l'alto e viceversa.

Ma, al momento di ottenere il valore diventa in qualche modo enorme. E solo uno - la linea di segnale della seconda candela. Può essere 8 a che grado, 4,5, 7, ecc. Quando appare la barra successiva, il valore della linea di segnale della seconda barra dalla nuova barra può già essere normale. Tutti gli altri risultano essere corretti. E nella finestra dei dati, il valore è anche corretto. Non riesco a capire perché. Cosa sto facendo di sbagliato?

Ho la sensazione che si tratti di un doppio variabile. Perché il valore nella finestra dei dati è 0,000081, ma risulta 8,1....., la stessa cosa ho notato con un altro valore - nella finestra dei dati 0,000071, ma nella variabile 7,1..... Ma sono tutti definiti come variabili doppie.

Non ci sono 8 nel commento, c'è una continuazione.

Сomment(DoubleToString(CtrlMACD)+" "+DoubleToString(CtrlSignalMACD)+" "+DoubleToString(PrevMACD)+" "+DoubleToString(PrevSignalMACD));
 
Vitaly Muzichenko #:

Non ce ne sono 8 nel commento, ma c'è un seguito.

Grazie. Questo lo mostra correttamente. Un errore stupido, ovviamente. Ma mi chiedo ancora perché tutti gli altri valori sono visualizzati normalmente e solo uno è storto.

 
Maksim Efimov #:

Grazie. Questo è il modo giusto per farlo. Un errore stupido, ovviamente. Ma mi chiedo ancora perché tutti gli altri valori sono visualizzati normalmente e solo uno è storto.

Non è storto, è corretto a livello della macchina, vedete che c'è "e-08" alla fine.

Per esempio, il numero 1e-05 non è un errore ma0,00001.

Dovete usare DoubleToString per vedere quello a cui siamo abituati e il programma funzionerà comunque correttamente

Leggi

Все калькуляторы
  • allcalc.ru
Онлайн калькулятор для перевода чисел в экспоненциальный вид и обратно, другим языком для вычисления чисел с буквой E. На компьютере (в частности в тексте компьютерных программ) экспоненциальную запись записывают в виде MEp (пример 1e-10), где: M — мантисса, E (exponent) — буква E, означающая «*10^» («…умножить на десять в степени…»), p — порядок. Это необходимо для представлении очень больших и очень малых чисел, а также для унификации их написания. Многие пользователи калькуляторов столкнулись с вопросом: Что означает буква "E" в цифровом калькуляторе? Это Экспоненциа́льная за́пись— представление действительных чисел в виде мантиссы и порядка. Удобна для записи очень больших и очень малых чисел.
 
Vitaly Muzichenko #:

Non è storto, è corretto a livello di macchina, vedi che c'è una "e-08" alla fine.

Per esempio, il numero 1e-05 non è un errore, è0,00001.

Per vedere quello a cui siamo abituati, dovete usare DoubleToString e il programma funzionerà comunque correttamente

Leggi

Grazie ancora. Lo leggerò.

 
In mql4 OrderSend() restituisce immediatamente il risultato dell'elaborazione dell'ordine da parte del server commerciale.
In mql5 una tale funzione deve essere scritta da te?

 
Tretyakov Rostyslav #:

Risolto, ora funziona. Ovviamente non è giusto, ma funziona.

{
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
                {
                 if(((NormalizeDouble((Bid - OrderOpenPrice()*Point),Digits) >= NormalizeDouble(((Bid - NormalizeDouble((iTrailStart * Point),_Digits))),_Digits) > OrderStopLoss() || OrderStopLoss()==0)));//true
                   {
                    if((OrderStopLoss() == 0.0 && NormalizeDouble(Bid - OrderStopLoss()* Point,Digits) < NormalizeDouble((Bid - NormalizeDouble((iTrailDist * Point),_Digits)),_Digits)));//true
                      {
                      if(iTrailStep > 0.0 && OrderStopLoss() >= 0.0 && NormalizeDouble(((Bid - OrderStopLoss() - iTrailDist * Point)),Digits) >= iTrailStep);//true
                        {
                         sl_lev = NormalizeDouble((Bid - iTrailDist * Point()),_Digits);
                         if(NormalizeDouble(Bid - sl_lev * Point,_Digits) < MarketInfo(Symbol(),MODE_STOPLEVEL));//false
                           {
                            if(!OrderModify(Forder,OrderOpenPrice(),NormalizeDouble(Bid - NormalizeDouble((iTrailStart * Point),_Digits),_Digits),tp,OrderExpiration()));
                            Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError());
                           }
                        }
                      }
                   }
                }
             }

Non imposta i fermi correttamente, come posso risolvere il problema?

 
Valeriy Yastremskiy #:

E guardare nella rivista per vedere cosa risulta essere)

All'inizio non ho scritto nulla, poi ho iniziato a guardare in sequenza e si è rivelato molto.

Grazie.

 
Alexander Avksentyev #:

Risolto, ora funziona. Ovviamente non è giusto, ma funziona.

Non imposta bene i fermi, come si fa a risolvere il problema?

Da dove prendete questi dati?

OrderTakeProfit()
OrderProfit() + OrderSwap() + OrderCommission()
OrderOpenPrice()
OrderStopLoss()
 
Tretyakov Rostyslav #:

Da dove prendete questi dati?

Dal mandato.

if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
       {
        if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
          {
           if(OrderType() == OP_BUY) 
             {
              if(iTrailTakeProfit > 0.0)
                {
                tp=OrderTakeProfit() + NormalizeDouble(iTrailTakeProfit * Point(),_Digits);
                if(NormalizeDouble(((tp - OrderTakeProfit())) < 0.0,Digits))return;
                tp = OrderTakeProfit();
                }else tp = 0.0;
              if(OrderProfit() + OrderSwap() + OrderCommission() > MarketInfo(Symbol(), MODE_TICKVALUE) * iTrailStart * OrderLots());
 
secret dell'elaborazione dell'ordine da parte del server commerciale.
In mql5, una tale funzione deve essere scritta da te?

Tipi di transazioni commerciali

MQL5 restituirà anche immediatamente

OrderSend

Se l'ordine viene accettato con successo dal server commerciale, la funzione OrderSend() restituisce true.

Motivazione: