Errores, fallos, preguntas - página 3163

 
Roman #:

No hay precio en forex Last.
Debe ser una paliza ))

La solución es la siguiente.
Configure todas las propiedades de visualización del gráfico a su gusto, y guárdelo en la plantilla como default.tpl

¿Cómo se hace esto?

No entiendo por qué se añadió esta última línea de precios, en un sentido práctico es inútil.

 
user4321 #:

¿cómo lo hago?

PCM en gráfico -> Plantillas -> Guardar plantilla
Nombre del archivo: default.tpl

 
En algunos casos (nunca he encontrado un patrón), al compilar código con unavariable declarada no utilizada,MetaEditor5 no advierte sobre la variable no utilizada.
 

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos

MrBrooklin, 2022.02.25 07:15

¡Buenos días, queridos expertos!

Hoy me he encontrado con otros dos problemas que no entiendo, pero esta vez están en el código sacado de la Referencia MQL5 en su totalidad. Esta vez no he escrito nada, sino que he tomado un ejemplo ya hecho.

Abro MQL5 Reference / Constantes, Enumeraciones y Estructuras / Estructuras de Datos / Estructura de una Solicitud de Comercio. Lo encuentro allí:

Estructura de la solicitud comercial
Modify Pending Order
Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:
    action
    order
    price
    sl
    tp
    type_time
    expiration
 Пример торговой операции TRADE_ACTION_MODIFY для модификации уровней цен отложенного ордера:

Esto está claro. Me sigue un ejemplo con este código:

#define  EXPERT_MAGIC 123456  // MagicNumber эксперта
//+------------------------------------------------------------------+
//| Модификация отложенных ордеров                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//-- объявление и инициализация запроса и результата
   MqlTradeRequest request={};
   MqlTradeResult  result={};
   int total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебор всех установленных отложенных ордеров
   for(int i=0; i<total; i++)
     {
      //--- параметры ордера
      ulong  order_ticket=OrderGetTicket(i);                             // тикет ордера
      string order_symbol=Symbol();                                      // символ
      int    digits=(int)SymbolInfoInteger(order_symbol,SYMBOL_DIGITS);  // количество знаков после запятой
      ulong  magic=OrderGetInteger(ORDER_MAGIC);                         // MagicNumber ордера
      double volume=OrderGetDouble(ORDER_VOLUME_CURRENT);                // текущий объем ордера
      double sl=OrderGetDouble(ORDER_SL);                                // текущий Stop Loss ордера
      double tp=OrderGetDouble(ORDER_TP);                                // текущий Take Profit ордера
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE); // тип ордера
      int offset = 50;                                                   // отступ от текущей цены для установки ордера, в пунктах
      double price;                                                      // цена срабатывания ордера
      double point=SymbolInfoDouble(order_symbol,SYMBOL_POINT);          // размер пункта
      //--- вывод информации об ордере
      PrintFormat("#%I64u %s  %s  %.2f  %s  sl: %s  tp: %s  [%I64d]",
                  order_ticket,
                  order_symbol,
                  EnumToString(type),
                  volume,
                  DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),digits),
                  DoubleToString(sl,digits),
                  DoubleToString(tp,digits),
                  magic);
      //--- если MagicNumber совпадает, Stop Loss и Take Profit не заданы
      if(magic==EXPERT_MAGIC && sl==0 && tp==0)
        {
         request.action=TRADE_ACTION_MODIFY;                           // тип торговой операции
         request.order = OrderGetTicket(i);                            // тикет ордера
         request.symbol   =Symbol();                                   // символ
         request.deviation=5;                                          // допустимое отклонение от цены
        //--- установка уровня цены, тейк-профит и стоп-лосс ордера в зависимости от его типа
         if(type==ORDER_TYPE_BUY_LIMIT)
           {
            price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)-offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_LIMIT)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)+offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_BUY_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_ASK)+offset*point; 
            request.tp = NormalizeDouble(price+offset*point,digits);
            request.sl = NormalizeDouble(price-offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         else if(type==ORDER_TYPE_SELL_STOP)
           {
           price = SymbolInfoDouble(Symbol(),SYMBOL_BID)-offset*point; 
            request.tp = NormalizeDouble(price-offset*point,digits);
            request.sl = NormalizeDouble(price+offset*point,digits);
            request.price    =NormalizeDouble(price,digits);                 // нормализованная цена открытия
           }
         //--- отправка запроса
         if(!OrderSend(request,result))
            PrintFormat("OrderSend error %d",GetLastError());  // если отправить запрос не удалось, вывести код ошибки
         //--- информация об операции   
         PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);
         //--- обнуление значений запроса и результата
         ZeroMemory(request);
         ZeroMemory(result);
        }
     }
  }
//+------------------------------------------------------------------+

Estoy tratando de entender la línea resaltada en amarillo. Enseguida surge una pregunta: ¿Qué tiene que ver PositionGetDouble(POSITION_PRICE_OPEN)si este ejemplo está relacionado con órdenes pendientes? Tal vez, debería haber una línea como esta:

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
Esto es lo primero. El segundo problema surge cuando intento ejecutar este script en un gráfico con una orden pendiente BUY_STOP que he establecido (aunque todo lo que sucede es similar a otros tipos de órdenes pendientes). Entonces, ¿qué pasa? No pasa nada. No veo ninguna modificación de una orden pendiente. ¿Quizás no entiendo algo?

Sólo lo encuentro en la pestaña de Expertos:
2022.02.25 08:41:38.491 4 (EURUSD,M1)   #4727791  EURUSD  ORDER_TYPE_BUY_STOP  0.10  0.00000  sl: 0.00000  tp: 0.00000  [0]
Estimados expertos, por favor ayúdenme a entender este ejemplo, ¿por qué está en el directorio, pero su código no funciona?

Saludos, Vladimir.

 
Buenas tardes. ¿Pueden decirme cómo retirar un depósito a una tarjeta?
 
801765632 #:
Hola. ¿Pueden decirme cómo retirar el depósito a la tarjeta?

Este es el sitio web del desarrollador de la plataforma de negociación. No es un broker, no es un DC, no hay cuentas reales de trading.

Lo dice claramente al final de la página:


Por favor, pregunte a su agente de bolsa: a quién transfirió el dinero a su cuenta comercial.

 
801765632 #:
Buenas tardes. ¿Pueden decirme cómo retirar el depósito a la tarjeta?
Por favor, póngase en contacto con el broker con el que abrió una cuenta de trading real.
 

Queridos desarrolladores ¿Por qué en la segunda y tercera llamada se sobrecarga (T* const Ptr) en lugar de (T* & Ptr)?

¿Es un error o una característica? b3213.


template <typename T>
void f1(T* const Ptr) {Print(__FUNCSIG__);}

template <typename T>
void f1(T* & Ptr) {Print(__FUNCSIG__);}


class X {};

void OnStart()
  {
   const X* Ptr = new X;

   f1(Ptr);                                //void f1<const X>(const X*&)
   f1((X*)Ptr);                            //void f1<X>(X*const)
   f1((const X*) Ptr);                     //void func_902::f1<const X>(const X*const)

   delete Ptr;
  }
 
Roman #:

PCM en gráfico -> Plantillas -> Guardar plantilla
Nombre del archivo: default.tpl

Existe esta plantilla por defecto. Lo he sustituido. No ayudó, por desgracia. Sigue siendo lo mismo cuando se cambia a o desde ella.

¿Sabes cómo escribir a los desarrolladores? Seguro que ya se les ha denunciado unos cientos de veces, bueno, volveré a escribir.

 

Al desplazarse, la cabecera en las señales se desplaza