Erros, bugs, perguntas - página 3163

 
Roman #:

Não há preço no forex Last.
Deve ser uma tal tareia ))

A solução é a seguinte.
Configure todas as propriedades de apresentação do gráfico como desejar, e guarde-o no modelo como padrão.tpl

Como se faz isto?

Não compreendo porque é que esta última linha de preços foi acrescentada, num sentido prático é inútil.

 
user4321 #:

como é que o faço?

PCM no gráfico -> Modelos -> Guardar modelo
Nome do ficheiro: default.tpl

 
Em alguns casos (nunca encontrei um padrão), ao compilar código com umavariável declarada não utilizada, oMetaEditor5 não avisa sobre a variável não utilizada.
 

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Quaisquer perguntas de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos

MrBrooklin, 2022.02.25 07:15

Bom dia, Caros Peritos!

Hoje enfrentei mais duas questões que não compreendo, mas desta vez estão no código extraído da Referência MQL5 na sua totalidade. Desta vez eu próprio não escrevi nada, mas apenas tomei um exemplo pronto.

Abro Referência MQL5 / Constantes, Enumerações e Estruturas / Estruturas de Dados / Estrutura de um Pedido de Comércio. Encontrei-o lá:

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

Isto é claro. Sou seguido por um exemplo com o seguinte 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);
        }
     }
  }
//+------------------------------------------------------------------+

Estou a tentar compreender a linha realçada em amarelo. Uma pergunta surge imediatamente: O que é que o PositionGetDouble(POSITION_PRICE_OPEN) tem a ver com istose este exemplo estiver relacionado com encomendas pendentes? Talvez, deveria haver uma linha como esta:

DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),digits)
Este é o primeiro ponto. O segundo número surge quando tento executar este guião num gráfico com uma ordem pendente de BUY_STOP que defini (apesar de tudo o que acontece semelhante a outros tipos de ordens pendentes). Então, o que acontece? Nada acontece! Não vejo qualquer modificação de uma ordem pendente. Talvez, eu não compreendo alguma coisa?

Só encontro isto no separador Especialistas:
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]
Caros Peritos, por favor ajudem-me a compreender este exemplo, porque é que ele está no directório, mas o seu código não funciona?

Cumprimentos, Vladimir.

 
Boa tarde. Pode dizer-me como levantar um depósito para um cartão?
 
801765632 #:
Olá. Pode dizer-me como levantar o depósito para o cartão?

Este é o website do criador da plataforma comercial. Não é um corretor, não é um CD, não existem contas comerciais reais.

Diz claramente isso no final da página:


Por favor, faça tais perguntas ao seu corretor - quem transferiu o dinheiro para a sua conta de negociação.

 
801765632 #:
Boa tarde. Pode dizer-me como levantar o depósito para o cartão?
Por favor contacte o corretor com quem abriu uma conta comercial real.
 

Caros programadores! Porque é que na segunda e terceira chamadas está (T* const Ptr) sobrecarregada em vez de (T* & Ptr)?

Isto é um insecto ou uma 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 no gráfico -> Modelos -> Guardar modelo
Nome do ficheiro: default.tpl

Por defeito, existe um modelo deste tipo. Eu substituí-o. Não ajudou, infelizmente. Continua a ser o mesmo quando se muda de ou para ele.

Sabe como escrever para os criadores? Certamente já lhes foi relatado algumas centenas de vezes, bem, vou escrever novamente.

 

Ao rolar, o cabeçalho nos sinais anda