Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1620

 
Uma variável, não uma citação. Há uma contagem em uma variável string, e o duplo é convertido em uma variável string com a precisão especificada. Isto, é claro, é forte.
 
A propósito, isto é sobre o assunto de uma citação em cinco dígitos que chega com mais de cinco casas decimais. Eu queria fazer uma verificação automática, afinal não é tão fácil nesta linguagem. Enquanto isso, eu verifiquei manualmente com uma impressora. Não há mais do que cinco casas decimais, com que freqüência isso acontece? Talvez tenha sido no terminal 4?
 
OK, há uma ignorância sistemática das mensagens. Devemos recomeçar um fio novamente.
 
pribludilsa #:
Há uma ignorância sistemática das mensagens. Devemos recomeçar um fio novamente.

já houve tópicos sobre este assunto. Em um fio e o número de cordas a contar. Você realmente tem que contar o número de dígitos antes do ponto decimal primeiro. Você pode convertê-lo em um número inteiro. E é igualmente constrangedor para o string))))

 
Alexey Viktorov #:

No testador mt4 não é possível abrir pedidos em outros pares, todo o resto está disponível sem problemas.

Obrigado, de fato é possível obter valores indicadores de outro instrumento no aparelho de teste.
Alexander #:

Verifique a disponibilidade de citações em AUDUSD, na TF correta

Esse era exatamente o problema. A questão é que eu estava testando em um dia de folga (domingo) e "baixei" um arquivo de cotação para o símbolo exigido (AUDUSD), mas acabou por não ser possível baixá-los no dia de folga, porque os servidores de meu negociante de forex estavam indisponíveis naquele dia de folga. E hoje, na segunda-feira, o download do arquivo de citações e os testes foram bem sucedidos.
MakarFX #:
Desculpe, eu estava errado, eu mesmo não sabia.
Tudo bem, suas respostas em mensagens privadas foram muito mais valiosas.

É muito bom ter pessoas respondendo e ajudando umas às outras aqui. Nem todas as respostas podem ser encontradas na documentação)
 
Valeriy Yastremskiy #:

já houve tópicos sobre este assunto. Em um fio e o número de cordas a contar. Você realmente tem que contar o número de dígitos antes do ponto decimal primeiro. Você pode convertê-lo em um número inteiro. E é um pouco complicado trazer)))) para um fio também.

Sim, eu também queria fazer isso, apenas a conversão do dobro para string é feita com precisão especificada, se a precisão não for especificada, 8 dígitos por padrão.

 
Valeriy Yastremskiy #:

já houve tópicos sobre este assunto. Em um fio e o número de cordas a contar. Você realmente tem que contar o número de dígitos antes do ponto decimal primeiro. Você pode convertê-lo em um número inteiro. E é igualmente constrangedor para o string))))

A conversão integral, sim, é provavelmente a única. Ocorreu-me também, mas parecia muito complicado fazer algum tipo de ciclo de multiplicação ou divisão por 10. Eu ainda não pensei bem nisso.
 
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 #:

Existe algo que eu não saiba? Também não é possível obter dados de barra de outros instrumentos pelo tempo de teste, eles serão recebidos até a hora atual. É por isso que não posso testar moedas múltiplas mesmo só na parte de cálculo em 4ka.

Sempre pensei que o testador MT4 imita totalmente o ambiente de um único instrumento, e o MT5 o ambiente inteiro que está disponível.

Ou não é assim?

Valery, preste atenção à linha

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

no meu código... Tenho usado as funções hexadecimais há muito tempo, mas aqui está uma função similar

SymbolInfoInteger("EURJPY", SYMBOL_DIGITS);

deu uma stackey 0.

Então, pense onde está o bug... E como o mt4 se recusa a apoiá-lo, você pode supor que ele nunca será consertado...

Tudo o resto tem que ser verificado. Não me preocupo com isso há tanto tempo que não quero nem mesmo lembrar.

 

Alexey Viktorov #:

Tenho usado as funções de sexta-feira há muito tempo

Você pode sugerir onde eu posso aprender MQL5 (em russo)?

Razão: