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

 
Alexey Viktorov #:

Valery, preste atenção à linha

no meu código... Eu tenho usado funções hexadecimais há algum tempo, mas uma função similar

deu um 0.

Então, pense onde estão as baratas... E como o mt4 se recusa a apoiá-la, você pode supor que ela nunca será consertada...

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

Hmmm... O tempo é emulado) Terei que entrar nele)

int sd;
/*******************Expert initialization function*******************/
int OnInit()
 {
  sd = (int)MarketInfo("EURJPY", MODE_DIGITS);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
  datetime lt = iTime(_Symbol, PERIOD_M15, 0);
  static datetime ct = 0;
  if(ct != lt)
  {
   ct = lt;
   Print(DoubleToString(iMA("EURJPY", PERIOD_M15, 21, 0, MODE_SMA, PRICE_CLOSE, 0), sd),
    " Time[0] ",TimeToStr( Time[0])," iTime(EURJPY,0,0) ",TimeToStr(iTime("EURJPY",0,0)));
  }

Resultado

2021.09.21 15:30:48.696 2021.08.13 20:15:00  testMulti EURUSD,M15: 129.482 Time[0] 2021.08.13 20:15 iTime(EURJPY,0,0) 2021.08.13 20:15
2021.09.21 15:30:48.632 2021.08.13 20:00:00  testMulti EURUSD,M15: 129.495 Time[0] 2021.08.13 20:00 iTime(EURJPY,0,0) 2021.08.13 20:00
2021.09.21 15:30:48.568 2021.08.13 19:45:00  testMulti EURUSD,M15: 129.512 Time[0] 2021.08.13 19:45 iTime(EURJPY,0,0) 2021.08.13 19:45
2021.09.21 15:30:48.504 2021.08.13 19:30:00  testMulti EURUSD,M15: 129.527 Time[0] 2021.08.13 19:30 iTime(EURJPY,0,0) 2021.08.13 19:30
2021.09.21 15:30:48.440 2021.08.13 19:15:00  testMulti EURUSD,M15: 129.539 Time[0] 2021.08.13 19:15 iTime(EURJPY,0,0) 2021.08.13 19:15

ZZY trabalha na obtenção de dados de barra de outros caracteres)))) Mas a história precisa ser carregada especificamente, indo apenas para fora da matriz em um instrumento descarregado ou solicitando dados de um bar distante.

ZS ZS

Realmente funciona!!! Eu tive que carregar os arquivos de cotações de todos os pares de moedas necessários !!! e funciona em um minuto a partir de 21 de junho, no início mais antigo e mais tarde)

 
giros #:

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

Aqui. Eu não li mais nada.
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
  • www.mql5.com
Документация по MQL5 - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Olá. Tentando encontrar o preço de abertura da penúltima ordem, mas funciona bem se não houver ordens de Venda, Você pode me dizer qual é o erro? Acho que isso também os conta. MQL4

 
makssub #:


Olá. Tentando encontrar o preço de abertura da penúltima ordem, mas funciona bem se não houver ordens de Venda, Você pode me dizer qual é o erro? Acho que isso também os conta. MQL4

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int i=OrdersTotal()- 2 ; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // внимательней к копипасту) цикл по i а перебираешь cnt))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
Valeriy Yastremskiy #:


double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}

Obrigado. Verificado, ainda conta Vender também(

 
makssub #:


Obrigado. Verificado, ainda conta Vender também(

Provavelmente porque você está subtraindo do número total de pedidos

OrdersTotal()- 2 

e só olhar em

OP_BUY
 
makssub #:


Obrigado. Verificado, ainda conta Vender também(

Não imprimir antes do segundo se e dentro do segundo se o número, bilhete e tipo de pedido.

double FindPenultBuyPrice()
{
   int oldticket;
   double oldopenprice=0;
   ticket=0;
   
   for(int cnt=OrdersTotal()- 2 ; cnt>=0; cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
Print("Print 1 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
         {
Print("Print 2 "," cnt ",cnt," OrderTicket() ",OrderTicket()," OrderType() ",OrderType());
            oldticket = OrderTicket();
            if (oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
}
 
 private:
   CPoint             *startPoint;
   CPoint             *endPoint;

Há dois construtores. Quando chamo a primeira da segunda e defino valores para as variáveis acima, quando volto para a segunda, estas variáveis vão para NULL.
Mas se eu simplesmente copiar o código do primeiro construtor para o segundo e não o chamar, tudo funciona. Qual é o problema?

CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime)
  {
   prevWave = NULL;
   nextWave = NULL;
   name = namePref+"_"+TimeToString(startTime, TIME_DATE|TIME_MINUTES);
   startPoint = new CPoint(startPrice, startTime);
   endPoint = new CPoint(endPrice, endTime);
   dir = startPrice < endPrice ? true : false;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CWave::CWave(string namePref,
             double startPrice,
             datetime startTime,
             double endPrice,
             datetime endTime,
             CWave *prevWave)
  {
   CWave(namePref, startPrice, startTime, endPrice, endTime);
   this.prevWave = prevWave;
   prevWave.nextWave = &this;
  }
 
Roman Sharanov NULL.
Mas se eu simplesmente copiar o código do primeiro construtor para o segundo e não o chamar, tudo funciona. Qual é o problema?


O problema está na MQL.

Em tais situações, coloco a inicialização em um método separado que retiro de diferentes construtores.

---

Há também um problema em ligar para a construtora mãe.

 
Valeriy Yastremskiy #:

Imprimir antes do segundo se e dentro do segundo se o número, bilhete e tipo de pedido.

Obrigado. Vou verificar mais tarde hoje.

Razão: