Perguntas de um "boneco" - página 244

 
paladin800:
Estou a escrever um Expert Advisor multi-moeda onde nos parâmetros de entrada defino o nome do instrumento, como por exemplo, Symbol0="EURUSD". Se eu escrever o nome errado, o comércio não vai. A minha pergunta é: Existe tal função, que compararia os nomes dos instrumentos com os instrumentos oferecidos pelo corretor?
Não. Deve verificá-lo você mesmo.
 
paladin800: Pergunta: existe uma função que compare o nome do instrumento com os instrumentos fornecidos pelo corretor?
A questão é o que se quer ver na produção. Basicamente, qualquer função padrão que utilize um nome simbólico de um instrumento como um dos seus parâmetros, "compara" o nome especificado pelo utilizador com os nomes dos instrumentos do corretor. E existe mesmo um erro ERR_MARKET_UNKNOWN_SYMBOL (4301) para tais funções.
 
Yedelkin:
A questão é o que se quer ver na produção. Basicamente, qualquer função padrão que utiliza um nome simbólico de instrumento como um dos seus parâmetros, "compara" o nome especificado pelo utilizador com os nomes dos instrumentos do corretor. E há mesmo um erro ERR_MARKET_UNKNOWN_SYMBOL (4301) para tais funções.
Basicamente, sim, quando o cabo indicador é então procurado por um símbolo que não existe, é gerado um erro. Geralmente, neste momento, posso emitir uma mensagem de erro nos parâmetros de entrada para o alerta.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
paladin800 Basicamente sim, quando o manípulo indicador é então procurado por um símbolo que não existe, é gerado um erro. Em geral, neste momento, posso emitir uma mensagem de erro nos parâmetros de entrada para o alerta.
Pode escrever a sua própria mini-função, que verificará a correcção dos parâmetros de corda. Use algo como SymbolSelect(...,true) ou SymbolInfoString(...,SYMBOL_DESCRIPTION, ...) com verificação de erros. Ou seja, implementar um controlo "independente", como disse Carlson.
 
Boa tarde, a todos.

Estou a tentar fazer um indicador de recolha de carraças para posterior processamento e visualização. MT5 AlpariUK Versão 5.0 Build 756
O indicador de teste imprime valores actuais de BID, ASK, LAST, VOLUME, tick_volume ao processar onCalculate.

//+------------------------------------------------------------------+
//|                                                TickCollector.mq5 |
//|                                             Copyright 2013, MZen |
//|                                             http://www.almex.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MZen"
#property link      "http://www.almex.net"
#property version   "1.00"
#property indicator_chart_window


string   time_toprint, tick_bid, tick_ask, tick_last, tick_vol;
string   par1, par2, par3;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

            time_toprint = TimeToString(SymbolInfoInteger(_Symbol,SYMBOL_TIME),TIME_DATE|TIME_SECONDS);
            tick_bid = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
            tick_ask = DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);            
            tick_last = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_LAST)); 
            tick_vol = IntegerToString(SymbolInfoInteger(_Symbol,SYMBOL_VOLUME));
            
            par1 = IntegerToString(tick_volume[(rates_total-1)]);
            
            Print("Server Time=",time_toprint,"   ","Bid=",tick_bid,"   ","Ask=",tick_ask,"   Price=",tick_last,"  Volume=",tick_vol,"  Tick volume=",par1);
           
//--- return value of prev_calculated for next call
   return(rates_total);
  }

//+------------------------------------------------------------------+

Resultado:

2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=5
2013.03.03 19:45:59 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:03 Bid=93.680 Ask=93.689 Price=93.680000 Volume=1000000 Tick volume=4
2013.03.03 03 19:45:59 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Price=93.68100000 Volume=3000000 Tick volume=4
2013.03.03.03 19:45:59 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:46:03 Bid=93.681 Ask=93.691 Preço=93.68100000 Volume=3000000 Tick volume=4
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
2013.03.03 19:45:58 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:02 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=2000000 Tick volume=3
201303.03.03 19:45:57 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=2
2013.03.03 19:45:57 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:46:01 Bid=93.683 Ask=93.693 Price=93.68300000 Volume=1000000 Tick volume=1
2013.03.03 03 19:45:56 PM TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03.03 19:45:56 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:46:00 Bid=93.689 Ask=93.696 Price=93.68900000 Volume=570000 Tick volume=1
2013.03.03 19:45:55 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:59 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1800000 Tick volume=53
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1700000 Tick volume=52
201303.03.03 19:45:54 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:54 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:58 Bid=93.685 Ask=93.695 Price=93.68500000 Volume=1500000 Tick volume=51
2013.03.03 19:45:53 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:57 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=500000 Tick volume=50
201303.03.03 19:45:52 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=400000 Tick volume=49
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
2013.03.03 19:45:52 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:56 Bid=93.685 Ask=93.693 Price=93.68500000 Volume=200000 Tick volume=48
201303.03.03 19:45:51 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Preço=93.68500000 Volume=200000 Tick volume=47
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
2013.03.03 19:45:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:55 Bid=93.685 Ask=93.691 Price=93.68500000 Volume=1000000 Tick volume=46
201303.03.03 19:45:50 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Preço=93.68000000 Volume=1000000 Tick volume=45
2013.03.03 19:45:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:45:54 Bid=93.680 Ask=93.691 Price=93.680000 Volume=1000000 Tick volume=45
2013.0303 19:45:48 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:45:52 Bid=93.682 Ask=93.691 Price=93.68200000 Volume=1000000 Tick volume=44

Parece que o onCalculate é accionado duas vezes por tick na maioria das vezes, e o tick_volume não tem nada a ver com o volume do tick. É reposto a 1 quando se muda para um novo período. O mesmo valor pode ser repetido 1, 2, 3 vezes.

Para verificar, executar EA que imprime carraças e o seu próprio indicador ao mesmo tempo.

Resultado:

2013.03.03 19:51:56 Bilhetes (USDJPY,M1) 2013.03.03 19:51:56 93.684 93.677
2013.03.03.03 19:51:56 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Price=93.67700000 Volume=1000000 Tick volume=2
2013.0303 19:51:56 PM TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:52:00 Bid=93.677 Ask=93.684 Price=93.67700000 Volume=1000000 Tick volume=2
2013.03.03 19:51:56 Ticks (USDJPY,M1) 2013.03.03.03 19:51:56 93.683 93.674
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
2013.03.03 19:51:56 TestTickCollector (USDJPY,M1) Tempo do servidor=201303.04 02:52:00 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=1
201303.03.03 19:51:55 Cartões (USDJPY,M1) 2013.03.03 19:51:55 93. 682 93.674
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:55 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:59 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=3000000 Tick volume=37
2013.03.03 19:51:51:51 Ticks (USDJPY,M1) 2013.03.03.03 19:51:51 93.680 93.670
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:51 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:55 Bid=93.670 Ask=93.680 Price=93.67000000 Volume=1000000 Tick volume=36
2013.03.03 19:51:50 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:50 93.678 93.669
2013.03.03 19:51:50 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:54 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3500000 Tick volume=35
201303.03.03 19:51:49 Bilhetes (USDJPY,M1) 2013.03.03 19:51:49 93. 678 93.669
2013.03.03 19:51:49 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:49 PM TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:53 Bid=93.669 Ask=93.678 Price=93.66900000 Volume=3000000 Tick volume=34
2013.03.03 19:51:46 Ticks (USDJPY,M1) 2013.03.03.03 19:51:46 93.680 93.672
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Price=93.67200000 Volume=1000000 Tick volume=33
2013.03.03 19:51:46 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:50 Bid=93.672 Ask=93.680 Price=93.67200000 Volume=1000000 Tick volume=33
201303.03.03 19:51:44 Bilhetes (USDJPY,M1) 2013.03.03 19:51:44 93.681 93.672
2013.03.03 19:51:44 19:51:44 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03 03 03.03 19:51:44 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:51:48 Bid=93.672 Ask=93.681 Price=93.67200000 Volume=1000000 Tick volume=32
2013.03.03 19:51:44 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:44 93.683 93.673
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=31
2013.03.03 19:51:44 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:48 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=30
2013.03.03.03 19:51:42 Bilhetes (USDJPY,M1) 2013.03.03 19:51:42 93.683 93.674
2013.03.03.0303 19:51:42 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:42 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:51:46 Bid=93.674 Ask=93.683 Price=93.67400000 Volume=3000000 Tick volume=30
2013.03.03 19:51:41 Ticks (USDJPY,M1) 2013.03.03.03 19:51:41 93.683 93.673
2013.03.03 19:51:41 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
201303.03.03 19:51:41 GMT TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:51:45 Bid=93.673 Ask=93.683 Price=93.67300000 Volume=1000000 Tick volume=29
2013.03.03.0303 03 19:51:40 Bilhetes (USDJPY,M1) 2013.03.03 19:51:40 93.682 93.673
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:40 TestTickCollector (USDJPY,M1) Hora do servidor=2013.03.04 02:51:44 Bid=93.673 Ask=93.682 Price=93.67300000 Volume=1000000 Tick volume=28
2013.03.03 19:51:39 Ticks (USDJPY,M1) 2013.03.03 2013 19:51:39 93.681 93.671
2013.03.03 19:51:39 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:43 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=40000 Tick volume=27
201303.03.03 19:51:38 Cartões (USDJPY,M1) 2013.03.03 19:51:38 93. 681 93.671
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=6000000 Tick volume=26
2013.03.03 19:51:38 TestTickCollector (USDJPY,M1) Tempo do servidor=2013.03.04 02:51:42 Bid=93.671 Ask=93.681 Price=93.67100000 Volume=60000 Tick volume=26
2013.03.03 19:51:37 Ticks (USDJPY,M1) 2013.03.03.03 19:51:37 93.682 93.674
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=1000000 Tick volume=25
2013.03.03 19:51:37 TestTickCollector (USDJPY,M1) Server Time=2013.03.04 02:51:41 Bid=93.674 Ask=93.682 Price=93.67400000 Volume=1000000 Tick volume=24

Pergunta: porque é que o carrapato está duplicado e como é que me livro dele?

Se o onCalculate é desencadeado não só por uma mudança de preço, mas também por algumas outras razões, então como podemos determinar a razão para mudar para o opCalculate ? E onde estão todas as razões para o onCalculate desencadear?

O que estou a fazer mal com o volume do Tick ?

Está-me a escapar alguma coisa?

Mais uma pergunta - o tempo no meu computador está a ficar bastante atrasado. A diferença em dois dias foi de 4 segundos. Em que direcção procurar uma solução?

Obrigado a todos vós.

 

Outra questão para o estimado público:


Na documentação em https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

estados:

SYMBOL_BID BID Bid Bid - melhor oferta para vender

SYMBOL_ASK Ask - melhor oferta de compra


A meu ver, Bid é a melhor oferta decompra e Ask é a melhor oferta de venda.

Eis o que o ServiceDesk respondeu
Equipa de Apoio 2013.03.04 07:39


Isso significa


SYMBOL_BID Bid Bid - a melhor oferta para vender (o melhor preço em que se pode vender)

SYMBOL_ASK Ask - a melhor oferta de compra (o melhor preço que pode obter agora mesmo)




Aqui está uma discussão: quem tem razão?

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
MZen:

Outra questão para o estimado público:


Na documentação em https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_integer

estados:

SYMBOL_BID BID Bid Bid - melhor oferta para vender

SYMBOL_ASK Ask - melhor oferta de compra


A meu ver, Bid é a melhor oferta decompra e Ask é a melhor oferta de venda.

Eis o que o ServiceDesk respondeu
Equipa de Apoio 2013.03.04 07:39
Significa

MZen

SYMBOL_BID Bid Bid - a melhor oferta para vender (o melhor preço a que se pode vender)

SYMBOL_ASK Ask - a melhor oferta de compra (o melhor preço que pode obter agora mesmo)




Estou a debater: quem tem razão?

Jogar com as palavras - em ambas as situações há um comprador, em ambas as situações há um vendedor, dependendo da posição a ser considerada
 
lazarev-d-m:
Jogar com palavras - ambas as situações têm um comprador, ambas as situações têm um vendedor, dependendo da posição a ser considerada

Ahhhh, já percebi!

Quando peço "Comprem de mim" é uma oferta de compra!

E quando digo "Vende-me", é uma oferta de venda!

LOL!

 

Estou a começar a aprender o OOP. Pergunta para peritos - é possível colocar a classe no final do código do Expert Advisor (assim como as funções),

int OnInit()
  {
   return(0);
  }
//---
void OnTick()
  {
   ...
  }
//---
void OnDeinit(const int reason)
  {
   ...
  }
//---
   class CName 
     {
      ...
     };

e não ligar a classe ao código como:

#include <Trade\Trade.mqh>
 
paladin800:

Estou a começar a aprender o OOP. Pergunta para peritos - é possível colocar a classe no final do código do Expert Advisor (assim como as funções),

e não ligar a classe ao código como:

Não será uma classe mas apenas uma função, movida para fora do código do programa (a propósito, eu utilizo-a em vez do OOP, acho-a mais conveniente).