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

 
Евгений:
Há alguma forma de verificar se os guiões de abertura funcionam no fim-de-semana?
Não. Só os Consultores Especialistas podem ser verificados no testador de estratégias no fim-de-semana.
 
Karputov Vladimir:
Apenas o indicador lida com todas as carraças em OnCalculate(). Sem qualquer salto.
Eh não. E salta. Mas menos do que outros. Mas salta.
 
Victor Nikolaev:
Uh, não. E ele falha. Mas menos do que outros. Mas salta.
O indicador só pode saltar o tick se o indicador utilizar cálculos intensivos de recursos em cada entrada no OnCalculate().
 
kashi_ann:

Isso é bom, obrigado.

Outra questão:

OrderSelect

Selecciona uma encomenda para continuar a trabalhar com ela. Retorna verdadeiro após a conclusão bem sucedida da função. Retorna falso se a função falhar. É necessário chamar a funçãoGetLastError() para obter informações sobre o erro.

AOrderSelect(
ulong ticket// Bilhete a encomenda
);

Parâmetros

bilhete

[O bilhete da encomenda.

Como é atribuído este bilhete? Onde posso obtê-lo? Ou como é que o monto?

Na ajuda que diz

OrderGetTicket

Devolve o bilhete da ordem correspondente e selecciona automaticamente a ordem para posterior manipulação utilizando funções. Temos de passar por todas as encomendas por índice e obter um bilhete, se necessário. Embora esta função também seleccione a ordem em si. O bilhete é estabelecido pelo corretor, e não o podemos alterar.

ulong  OrderGetTicket( 
   int  index      // номер в списке ордеров 
   );
 

Olá a todos!

Escrevi uma função, que deve desenhar "fuso horário não comercial" no gráfico todos os dias.
Mas aqui está um problema - quando o inicio, o módulo OnInit, desenha como deve ser, mas quando o inicio no módulo OnTimer por alguma razão desconhecida a data variável mantém valores que foram atribuídos no módulo OnInit.

Pergunta: Porquê?

int OnInit()

  {

    EventSetTimer(1);

    MqlDateTime date;

    TimeLocal(date); 

    offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date

    return(INIT_SUCCEEDED); 

  } 

 ...

void onTimer()

  {

    MqlDateTime date;

    TimeLocal(date);

    if (date.hour==9 && date.min==0 && date.sec==0)  offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date

  } 

...
 
INGFX:

Olá a todos!

Escrevi uma função que deve desenhar um "fuso horário não comercial" num gráfico todos os dias.
Mas há um problema - quando executado no módulo OnInit desenha a data como deve ser, mas quando executado no módulo OnTimer por alguma razão desconhecida a variável data mantém os valores que foram atribuídos no módulo OnInit.

Pergunta: Porquê?

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

Insectos, insectos, perguntas

Karputov Vladimir, 2016.01.09 20:51

O que o leva a pensar que na data variável do temporizador é passado o valor previamente definido no OnInit()?

É preciso ver a sua função que desenha a zona.

Concluído:

Correctamente seria OnTimer, e não OnTimer.

 

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

Insectos, insectos, perguntas

INGFX, 2016.01.09 21:20

Porque A) Vejo visualmente, o "fuso horário" não é desenhado hoje das 21:00 às 23:59, mas de ontem 21:00 a hoje 23:59

B) Se eu abrir as propriedades do objecto gráfico (rectângulo sombreado - "fuso horário"), vejo que a primeira variável não mudou, ou seja, tem o mesmo valor das 21:00 de ontem

...
bool offtimeCreate(MqlDateTime &stm)
  {
    color clr=Black;
    datetime tm1,tm2;
    tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
    tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

    RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

    return(true);
  }
...

 
Karputov Vladimir:
A resposta correcta é OnTimer, não onTimer
Sim, é OnTimer, eu cometi um erro quando o copiei aqui ... O próprio código está correcto.
 
INGFX:
Sim OnTimer, cometeu um erro ao reescrever aqui ... o próprio código está correcto

Teria verificado o seu código. Cansado de coser os seus pedaços e peças - por isso, aqui, verifique o código. No OnTimer substitua a sua hora local e compare as impressões na inicialização e no temporizador:

//+------------------------------------------------------------------+
//|                                                       TestEA.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1);
   MqlDateTime date;
   TimeLocal(date);
   offtimeCreate(date); // Рисуем на графике заполненный прямоугольник (не торговая зона) с 21:00 до 23:59 в день указанный в переменной date
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime date;
   TimeLocal(date);
   if(date.hour==22 && date.min==33 && date.sec==00)
      offtimeCreate(date); // Каждое утро, в 9:00, рисуем новую "не торговую зону" для дня указанного в переменной date
  }
//+------------------------------------------------------------------+
/*void offtimeCreate(MqlDateTime &struct_date)
  {
   string text="";
   text=IntegerToString(struct_date.hour)+":"+
        IntegerToString(struct_date.min)+":"+
        IntegerToString(struct_date.sec);
   Comment(text);
//ChartRedraw();
  }*/
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool offtimeCreate(MqlDateTime &stm)
  {
   color clr=Black;
   datetime tm1,tm2;
   tm1 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 21:00");
   tm2 = StringToTime((string)stm.year+"."+(string)stm.mon+"."+(string)stm.day+" 23:59");

   Print(tm1+"      "+tm2);
//RectangleCreate(0,"offtime",0,tm1,0,tm2,200,clr); // chrart_id,object_name,sub_window,time1,price1,time2,price2,color

   return(true);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Teria verificado o seu código.

Vladimir, obrigado pela sua paciência e ajuda!
Realmente cometeu um erro no código ...
Vou ter mais cuidado a partir de agora.