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

 
Василий:
Sim, estou a perguntar sobre a MQL 5? Sim, os dados do símbolo actual devem ser acedidos. Os dados são necessários no código EA. Por isso, preciso, por exemplo, de saber o preço próximo do bar que precede o actual.
Veja o exemplo do CopyTime
 
Karputov Vladimir:
Veja o exemplo para CopyTime
Já está, vou tentar descobrir. Obrigado!
 
Василий:
Sim, estou a perguntar sobre a MQL5? Sim, os dados do símbolo actual devem ser acedidos. Os dados de que necessitamos em código Expert Advisor. Assim, por exemplo, preciso de saber o preço próximo do bar que precede o actual

Deve ler um pouco a documentação.

int  CopyClose( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   double           close_array[]      // массив для копирования цен закрытия 
   );

Aqui está um exemplo de como obter o preço de fecho e os amortecedores indicadores

ENUM_ORDER_TYPE indicator_01()
  {
   double ma[2];
   double close[2];
   static int h_ma=INVALID_HANDLE;
   if(Bars(_Symbol,PERIOD_CURRENT)<ma_period+1)return(WRONG_VALUE);
   if(h_ma==INVALID_HANDLE || h_ma==0)
     {
      h_ma=iMA(_Symbol,_Period,ma_period,ma_shift,ma_method,ma_price);
      return(WRONG_VALUE);
     }
   if(CopyBuffer(h_ma,0,1,2,ma)<2) return(WRONG_VALUE);
   if(CopyClose(_Symbol,PERIOD_CURRENT,1,2,close)<2) return(WRONG_VALUE);

   if(close[1]>ma[1]&&close[0]<ma[0])return(ORDER_TYPE_BUY);
   if(close[1]<ma[1]&&close[0]>ma[0])return(ORDER_TYPE_SELL);

   return(WRONG_VALUE);
  }
 
Sergey Gritsay:

...

Aqui está um exemplo de obter o preço de fecho, bem como os amortecedores indicadores

Mau exemplo. A variável que armazena o manípulo indicador em MQL5 deve ser declarada no "cabeçalho" - na área das variáveis globais, e o manípulo deve ser obtido em OnInit(). E só então poderá consultar o manípulo do indicador para obter dados de qualquer parte do programa.
 

Olá a todos!

Estou a receber dados sobre o histórico comercial no testador usando o evento OnTrade.

  for(int i=0;i<HistoryDealsTotal();i++){
       ulong deal_ticket=HistoryDealGetTicket(i);
       Print("ticket=",deal_ticket);
       Print("price=",HistoryDealGetDouble(deal_ticket,DEAL_PRICE));
       Print("time=",TimeToString(HistoryDealGetInteger(deal_ticket,DEAL_TIME)));

E isto é o que recebo nos registos.

0 22:58:16.487 Core 1 2016.04.01 00:00 Número de barras na história do terminal para o período do símbolo GBPUSD no momento = 7729
JR 0 22:58:16.487 Core 1 2016.04.01 03:00:00 Tentativa de comércio 0 com lote 0.01
EL 0 22:58:16.487 Core 1 2016.04.01 03:00:00 compra no mercado 0,01 GBPUSD sl: 1.43033 tp: 1.44034 (1.43646 / 1.43654 / 1.43646)
GO 0 22:58:16.487 Core 1 2016.04.01 03:00:00 negócio #2 comprar 0,01 GBPUSD a 1,43654 feito (com base no pedido #2)
GE 0 22:58:16.487 Core 1 2016.04.01 03:00:00 negócio realizado [#2 comprar 0,01 GBPUSD a 1,43654]
NK 0 22:58:16.487 Core 1 2016.04.01 03:00:00 encomenda efectuada compra 0,01 a 1,43654 [#2 compra 0,01 GBPUSD a 1,43654]
HI 0 22:58:16.487 Core 1 2016.04.01 03:00:00 bilhete=1
HM 0 22:58:16.487 Core 1 2016.04.01 03:00:00 preço=0.0
HH 0 22:58:16.487 Core 1 2016.04.01 03:00:00 hora=2016.04.01 00:00
CR 0 22:58:16.487 Core 1 2016.04.01 03:00:00 bilhete=2
ID 0 22:58:16.487 Core 1 2016.04.01 03:00:00 preço=1.43654
OP 0 22:58:16.487 Core 1 2016.04.01 03:00:00 hora=2016.04.01 03:00

De onde vem o primeiro comércio com preço zero? Eu não o faço :-).

Eu não o faço :-) Explicar plz.

Z.P. Acho que consegui. O primeiro negócio tem um lucro de 10K. Não sei o que fazer com ele, mas continua a ser estranho. Porquê?

E aqui está outra questão. O negócio (comprar a 1,43654) ainda não foi aberto. Como é que apareceu na história?

Preciso de obter dados SOMENTE sobre negócios fechados na matriz, como na MQL4. Como fazê-lo ????

P.S. Filter by DEAL_ENTRY_OUT ?

 
Alexandr Saprykin:
Já tentou reinstalar o terminal?
Sim, obrigado. Essa foi a única coisa que ajudou.
 
Karputov Vladimir:
Mau exemplo. A variável que armazena o manípulo indicador em MQL5 deve ser declarada no "cabeçalho" - na área global de variáveis do programa, obter o manípulo em OnInit(). E só então poderá consultar o manípulo do indicador para obter dados de qualquer parte do programa.

Não concordo inteiramente consigo quanto a obter uma pega, porque a função OnInit() é executada uma vez e não há 100% de garantia de que o indicador será criado desde a primeira vez. Pode ter razão em declarar uma variável, mas quero saber se a seguinte documentação diz algo pior do que a variante com uma variável estática

As variáveis locais declaradas com a palavra-chave estática guardam os seus valores enquanto a função existir. Com cada chamada subsequente de uma função, estas variáveis locais contêm os valores que tinham na chamada anterior.

 
<br / translate="no">

Filtrar por DEAL_ENTRY_OUT

 
Sergey Gritsay:

Não concordo inteiramente consigo quanto a obter uma pega, porque a função OnInit() é executada uma vez e não há 100% de garantia de que o indicador será criado desde a primeira vez. Pode ter razão sobre a declaração de uma variável, mas quero saber quão pior é a opção de uma variável estática na documentação

...

Verificaremos isso no OnInit() quando criarmos um manípulo indicador. Se o manípulo indicador não tiver sido criado, onOnit() devolveremosINIT_FAILED. Ou seja, o cabo indicador é criado apenas uma vez e apenas no OnInit(). Isto não é "4" - confusão e deambulação e declaração de pegas em todos os cantos do programa.
 
Karputov Vladimir:
Para este efeito, o OnInit() verifica se o manípulo indicador é criado. Se o manípulo indicador não tiver sido criado, OnOnit() deve retornarINIT_FAILED. Ou seja, o cabo indicador é criado apenas uma vez e apenas no OnInit(). Isto não é "4" - não é uma confusão e vaguear e declarar alças em todos os cantos do programa.
Eu não seria tão categórico na minha declaração. Não é uma confusão nos armários, é uma confusão nas cabeças (c)