Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 33

 

Boa noite! Tenho quase a certeza que esta função vai produzir exactamente o que eu queria, bem quase. Mas a máquina não se compila, jura assim

'}' - nem todos os caminhos de controlo devolvem um valor htghtgfhthf.mq5 61 10 Está a dizer-lhe que tenho algo de errado com a lógica, nem todos os retornos estão aí especificados. Sim, são! Pelo contrário, se os colocarmos depois de cada opirador de se, será um disparate, o programa produzirá imediatamente o resultado errado. É curta e directa ao assunto. Se puder, como é que o pode fazer aceitar?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

Boa noite! Tenho quase a certeza que esta função vai produzir exactamente o que eu queria, bem quase. Mas a máquina não se compila, jura assim

'}' - nem todos os caminhos de controlo devolvem um valor htghtgfhthf.mq5 61 10 Está a dizer-me que tenho algo de errado com a lógica, nem todos os retornos estão aí especificados. Sim, são! Pelo contrário, se os colocarmos depois de cada opirador de se, será um disparate, o programa produzirá imediatamente o resultado errado. É curta e directa ao assunto. Se puder, como pode fazê-lo aceitar?

Uma palavra de conselho: aprender algum inglês técnico. Deixem-me dar uma vista de olhos ao código.

Quanto ao assunto: a função deve devolver um valor do tipo de corda. Dentro da função usamos a declaração if, que contém as declarações de retorno. Pergunta: se a declaração if detecta que Bull == falso, o que é que a função deve retornar?

 
Claro, Si=""". ! Valor vazio.
 

Aha!!! Obrigado!!!

Obrigado!!!!

 
Dimka-novitsek:

Boa noite! Tenho quase a certeza que esta função vai produzir exactamente o que eu queria, bem quase. Mas a máquina não se compila, jura assim

'}' - nem todos os caminhos de controlo devolvem um valor htghtgfhthf.mq5 61 10 Está a dizer-me que tenho algo de errado com a lógica, nem todos os retornos estão aí especificados. Sim, são! Pelo contrário, se os colocarmos depois de cada opirador de se, será um disparate, o programa produzirá imediatamente o resultado errado. É curta e directa ao assunto. Se puder, como fazê-lo aceitar?

nem todos os caminhos de controlo devolvem um valor - não há controlo total sobre o retorno do valor.

Significa que em string OrderType(), que deve ter um valor de retorno uma vez que o tipo é diferente do vazio, não existe uma saída garantida com um valor de retorno.

Embora tenha definido até 2 operadores que regressam, ambos estão protegidos pela condição de "se". O que acontecerá se ambas as condições forem falsas?

Depois, a máquina pode saltar pela janela à vontade.

A propósito, nesta função faz mais sentido utilizar o contador de interruptores, em vez de um monte de if's, que essencialmente fazem o mesmo trabalho que o interruptor.

ZZZY Plus, não devemos esquecer que a posição deve ser pré-seleccionada, assim como a ordem. E existe uma função padrão EnumToString para converter enumerações em cordas, pelo que não há necessidade de reinventar a roda.

 
OBRIGADO!!!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


Não percebo porque é que o OnTick é chamado embora o preço não mude?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

Não percebo porque é que o OnTick é accionado embora o preço não mude?????

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

O último tempo de actualização de preços também está inalterado?
 
Yedelkin:
a hora da última actualização do preço também não muda?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

ou

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

A hora de alteração de preços é GMT+3, penso eu. De quem é o servidor?