Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1814

 
Maksim Efimov MACD estándar de una línea de señal y un histograma. La idea es la siguiente: en cada nueva barra tomamos las dos velas anteriores y obtenemos los valores del indicador en cada una de ellas. Si el valor del MACD en la segunda vela es mayor que el valor de la señal y el valor del MACD en la primera vela ya está por debajo de la señal y todos los valores están por encima de cero, significa que hay un cruce en la parte superior y viceversa.

Pero, en el momento de obtener el valor se convierte en algo enorme. Y sólo una: la línea de señal de la segunda vela. Puede ser 8 hasta qué punto, 4,5, 7, etc. Cuando aparece la siguiente barra, el valor de la línea de señal de la segunda barra desde la nueva barra puede ser ya normal. Todos los demás resultan ser correctos. Y en la ventana de datos, el valor también es correcto. No puedo entender por qué. ¿Qué estoy haciendo mal?

Tengo la sensación de que se trata de un doble variable. Porque el valor en la ventana de datos es 0,000081, pero resulta 8,1....., lo mismo noté con otro valor - en la ventana de datos 0,000071, pero en la variable 7,1..... Pero todas están definidas como variables dobles.

No hay 8 en el comentario, hay una continuación.

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

No hay 8 en el comentario, pero hay una secuela.

Gracias. Eso lo muestra correctamente. Estúpido error, por supuesto. Pero sigo preguntándome por qué todos los demás valores se muestran normalmente y sólo uno está torcido.

 
Maksim Efimov #:

Gracias. Esa es la forma correcta de hacerlo. Un error estúpido, por supuesto. Pero sigo preguntándome por qué todos los demás valores se muestran con normalidad y sólo uno está torcido.

No está torcido, es correcto a nivel de máquina, ves que hay "e-08" al final.

Por ejemplo, el número 1e-05 no es un error, sino0,00001.

Hay que utilizar DoubleToString para ver lo que estamos acostumbrados y el programa funcionará correctamente de todos modos

Leer

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

No está torcido, es correcto a nivel de máquina, vea que hay una "e-08" al final.

Por ejemplo, el número 1e-05 no es un error, es0,00001.

Para ver lo que estamos acostumbrados, es necesario utilizar DoubleToString y el programa funcionará correctamente de todos modos

Leer

Gracias de nuevo. Lo leeré.

 
En mql4 OrderSend() devuelve inmediatamente el resultado del procesamiento de la orden por parte del servidor comercial.
¿En mql5 tal función tiene que ser escrita por ti mismo?

 
Tretyakov Rostyslav #:

Arreglado, ahora funciona. Por supuesto que no está bien, pero funciona.

{
              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());
                           }
                        }
                      }
                   }
                }
             }

No fija los topes correctamente, ¿cómo lo arreglo?

 
Valeriy Yastremskiy #:

Y mira en la revista para ver lo que resulta ser)

Al principio no escribí nada, luego empecé a buscar secuencialmente y resultó ser mucho.

Gracias.

 
Alexander Avksentyev #:

Arreglado, ahora funciona. No está bien, por supuesto, pero funciona.

No pone bien los topes, ¿cómo se arregla?

¿De dónde sacas estos datos?

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

¿De dónde sacas estos datos?

De la orden.

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 del procesamiento de la orden por parte del servidor comercial.
En mql5, una función de este tipo tiene que ser escrita por ti mismo?

Tipos de transacciones comerciales

MQL5 también devolverá inmediatamente

PedirEnviar

Si la orden es aceptada con éxito por el servidor comercial, la función OrderSend() devuelve true.