Discussão do artigo "O uso de bibliotecas de classe de negócio padrão MQL5 ao escrever um Expert Advisor"
Artigo muito útil para mim. Tudo fica muito mais fácil se você usar bibliotecas!
Pedido aos desenvolvedores: escrevam uma classe para trabalhar com High[i] , Low[i]. Open[i], Close[i]. Acho que essa classe será útil para todos! Eu mesmo resolvi esse problema, mas não tenho certeza de que esteja correto, pois os testes levam muito tempo....
#include <Indicators\Series.mqh> double High[]; CiHigh z;
Por que esse código gera um erro?
'1.mq5' 1.mq5 1 1
'Series.mqh' Series.mqh 1 1
'ArrayObj.mqh' ArrayObj.mqh 1 1
'Array.mqh' Array.mqh 1 1
'Object.mqh' Object.mqh 1 1
'StdLibErr.mqh' StdLibErr.mqh 1 1
'ArrayDouble.mqh' ArrayDouble.mqh 1 1
'CiHigh' - declaração sem tipo 1.mq5 12 2
1 erro(s), 0 aviso(s) 2 1
se não for difícil escrever como obter
Imprimir High[2], por exemplo.
Por que esse código gera um erro?
se não for difícil, por favor, escreva como obter
Imprimir High[2], por exemplo.
há um erro de impressão na documentação. Essa classe está localizada no arquivo TimeSeries.mqh.
Exemplo de uso (o script imprime as três últimas máximas do gráfico atual):
#include <Indicators\TimeSeries.mqh> //+------------------------------------------------------------------+ //| Função de início do programa de script| //+------------------------------------------------------------------+ void OnStart() { //--- double High[]; CiHigh z; int count=3; if(z.Create(_Symbol,_Period)==true) { if(z.GetData(0,count,High)==count) { for(int i=0; i<count; i++) Print(i,"=",High[i]); } else Print("Failed to retrieve" (Falha ao recuperar),count," dados de séries temporais."); } else Print("Erro ao criar séries temporais."); } //+------------------------------------------------------------------+
há um erro de impressão na documentação. Essa classe está no arquivo TimeSeries.mqh.
Exemplo de uso (o script gera as três últimas máximas do gráfico atual):
Entendo que cada um programa para si mesmo e para suas necessidades, mas fundamentalmente não gosto do grupo de classes de séries temporais, porque basicamente todas consistem em um método e parte descritiva mais do que funcionalidade, e geralmente é necessário ter todas as séries temporais para um determinado instrumento:
struct str_bars{ datetime time[]; // Matriz de série temporal contendo o horário de abertura de cada barra do gráfico atual double open[]; // Matriz de série temporal contendo os preços de abertura de cada barra do gráfico atual. double close[]; // Matriz de série temporal contendo os preços de fechamento de cada barra do gráfico atual. double high[]; // Matriz de série temporal contendo os preços máximos de cada barra do gráfico atual. double low[]; // Uma matriz de série temporal contendo os preços mínimos de cada barra do gráfico atual. }; struct str_info{ double point; // Tamanho atual do ponto do instrumento na moeda da cotação int spread; // Propagação atual }; //____________________________________________________________________ class currency { public: //---- данные MqlTick TICK; // dados de ticks str_bars BAR; // dados de séries temporais str_info INFO; // informações sobre a ferramenta int error; //---- методы int create(string sym,ENUM_TIMEFRAMES period, int numbars); int refresh(void); private: string symbol; ENUM_TIMEFRAMES per; int num; datetime lastbar_time; int tmpint1,tmpint2; int ch_load(void); }; //____________________________________________________________________
Trabalho com minha classe somente na parte dos dados já preparados e, é claro, a própria classe recebe dados chamando o método refresh()
há uma imprecisão no artigo
double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // preço do lote/número de margem necessária
deveria ser
double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price); //--- preço do lote/número de margem necessária
Ótimo artigo. Muito obrigado ao autor. Eu também gostaria de escrever uma verificação do Stop_Level antes de colocar uma ordem e uma verificação do valor do spread. O fato é que, se o spread estiver flutuando, então, com valores altos, você não poderá entrar no mercado, pois não será lucrativo. Isso ajudará o Expert Advisor a não negociar durante as notícias. Eu também gostaria de verificar o desvio - o raciocínio é semelhante. E há também uma pergunta sobre a biblioteca: o que é uma função (que tipo de processo ela denota e descreve)?
FreezeLevel
Obtém a distância das operações comerciais de congelamento em pontos.
| int FreezeLevel() const |
em linguagem simples - por favor, explique se você souber.
E mais uma pergunta. Podemos descobrir os limites, por exemplo, Stop_Level no momento atual (digamos, 10 pontos). Colocamos uma ordem pendente com SL=10 pontos. Após, por exemplo, uma hora, o preço atinge o preço especificado na ordem, mas o Stop_Level nesse momento é igual a, por exemplo, 15 pips. O que acontecerá - a ordem pendente funcionará ou será rejeitada? Além disso, quando o preço atingir o preço especificado na ordem, mas o spread tiver mudado, isso significa que é possível entrar ou sair a um preço pior em relação ao preço esperado no momento da abertura da ordem, ou a ordem não funcionará?
O que estou fazendo de errado? Por que o lance não está sendo impresso?
Aqui está o registro do trabalho
2011.01.31 20:20:18 00(EURUSD,M1) EURUSD 0
Aqui está o código
#include <Trade\SymbolInfo.mqh> //--- Classe CSymbolInfo CSymbolInfo my_symbol; //--- Objeto da classe CSymbolInfo //+------------------------------------------------------------------+ //| Função de inicialização de especialista| //+------------------------------------------------------------------+ int OnInit() { return(0); } //+------------------------------------------------------------------+ //| Função de desinicialização de especialista| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Função de tique de especialista| //+------------------------------------------------------------------+ void OnTick() { my_symbol.Name(_Symbol); my_symbol.Refresh(); Print(_Symbol," ",my_symbol.Bid()); } //+------------------------------------------------------------------+
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo O uso de bibliotecas de classe de negócio padrão MQL5 ao escrever um Expert Advisor foi publicado:
Autor: Samuel