Para esses trabalhos, um monumento será erguido provavelmente em mql5, descendentes))) O que vale um arquivo defines.mqh, em 4 mil linhas. Se você observar a diferença entre 70 partes e 131 partes, é incrível a quantidade de trabalho que existe )))
Encontrei um pequeno erro, no arquivo trading.mqh, SetPrices, tem a visibilidade private, não protected, os descendentes não podem usar a função. No arquivo TradingControl.mqh, CreatePReqClose(), há erros de uso.
private: template <typename PR,typename SL,typename TP,typename PL> bool SetPrices(const ENUM_ORDER_TYPE action,const PR price,const SL sl,const TP tp,const PL limit,const string source_method,CSymbol *symbol_obj);
Para esses trabalhos, um monumento será erguido provavelmente em mql5, descendentes))) O que vale um arquivo defines.mqh, em 4 mil linhas. Se você observar a diferença entre 70 partes e 131 partes, é incrível a quantidade de trabalho que existe )))
Encontrei um pequeno erro, no arquivo trading.mqh, SetPrices, tem a visibilidade private, não protected, os descendentes não podem usar a função. No arquivo TradingControl.mqh, CreatePReqClose(), há erros de uso.
Sim. Esse erro foi um descuido meu e do compilador antigo que não o detectou. Nas versões mais recentes do compilador, o erro foi detectado e eu o corrigi. Nas versões recentes da biblioteca, os métodos estão na seção protegida, não na seção privada
Não seria melhor criar uma estrutura e transformar as cadeias de caracteres em uma matriz CharArray?
ulong m_ticket; // Ticket da ordem/negociação selecionada (MQL5) long m_long_prop[ORDER_PROP_INTEGER_TOTAL]; // Propriedades de números inteiros double m_double_prop[ORDER_PROP_DOUBLE_TOTAL]; // Propriedades substanciais string m_string_prop[ORDER_PROP_STRING_TOTAL]; // Propriedades da cadeia de caracteres
//--- Cria um novo objeto de gráfico, retorna um ponteiro para o objeto de controle de gráfico CChartObjectsControl *CreateNewStdGraphObjectAndGetCtrlObj(const long chart_id, const string name, int subwindow, const ENUM_OBJECT type_object, const datetime time1, const double price1, const datetime time2=0, const double price2=0, const datetime time3=0, const double price3=0, const datetime time4=0, const double price4=0, const datetime time5=0, const double price5=0) { //--- Se o objeto com ID e nome do gráfico já existir na coleção, informe-o e retorne NULL if(this.IsPresentGraphObjInList(chart_id,name)) { ::Print(DFUN,CMessage::Text(MSG_GRAPH_ELM_COLLECTION_ERR_GR_OBJ_ALREADY_EXISTS)," ChartID ",(string)chart_id,", ",name); return NULL; } //--- Se um novo objeto gráfico padrão não puder ser criado - informe-o e retorne NULL if(!CreateNewStdGraphObject(chart_id,name,type_object,subwindow,time1,price1,time2,price2,time3,price3,time4,price4,time5,price5)) { ::Print(DFUN,CMessage::Text(MSG_GRAPH_STD_OBJ_ERR_FAILED_CREATE_STD_GRAPH_OBJ),StdGraphObjectTypeDescription(type_object)); CMessage::ToLog(::GetLastError(),true); return NULL; } //--- Se o objeto de controle de programação não puder ser obtido - informe-o CChartObjectsControl *ctrl=this.GetChartObjectCtrlObj(chart_id); if(ctrl==NULL) ::Print(DFUN,CMessage::Text(MSG_GRAPH_ELM_COLLECTION_ERR_FAILED_GET_CTRL_OBJ),(string)chart_id); //--- Retorna um ponteiro para o objeto de controle de programação ou NULL em caso de erro ao recebê-lo return ctrl; }
Tentei criar um objeto simples (rótulo de texto), mas não consegui.
Depois de CreateNewStdGraphObject(), como o objeto criado deve entrar em m_list_charts_control para obter um objeto diferente de zero na próxima chamada?
CChartObjectsControl *ctrl=this.GetChartObjectCtrlObj(chart_id);
//--- Cria um objeto gráfico "Text Label" bool CreateTextLabel(const long chart_id,const string name,const int subwindow,const bool extended, const int x,const int y, const string text,const int size,const ENUM_BASE_CORNER corner, const ENUM_ANCHOR_POINT anchor_point,const double angle) { string nm=this.m_name_program+"_"+name; ENUM_OBJECT type_object=OBJ_LABEL; CChartObjectsControl *ctrl=this.CreateNewStdGraphObjectAndGetCtrlObj(chart_id,nm,subwindow,type_object,0,0); if(ctrl==NULL) return false;
Retorna false antes de atingir a configuração da propriedade.
//+------------------------------------------------------------------+ //| Retorna o objeto barra por tempo na série temporal. //+------------------------------------------------------------------+ CBar *CSeriesDE::GetBar(const datetime time) { CBar *obj=new CBar(); if(obj==NULL) return NULL; obj.SetSymbolPeriod(this.m_symbol,this.m_timeframe,time); this.m_list_series.Sort(SORT_BY_BAR_TIME); int index=this.m_list_series.Search(obj); delete obj; return this.m_list_series.At(index); }
Aqui, a série temporal não está sendo classificada para mim.... O método Sort() em CArray deve ser implementado separadamente em uma classe herdada para classificar objetos, não?
- 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 DoEasy. Controles (Parte 31): Rolando o conteúdo do controle "ScrollBar" foi publicado:
Neste artigo, criaremos a funcionalidade para rolar o conteúdo do contêiner usando os botões da barra de rolagem horizontal.
Compilamos o Expert Advisor e o iniciamos no gráfico:
Como podemos observar, a rolagem controlada pelos botões de seta funciona de maneira bastante adequada. Quando tentamos mover o controle deslizante com o mouse, ele "resiste", o que é natural, uma vez que ainda não implementamos o processamento do deslocamento do controle deslizante, mas já temos o recálculo de suas dimensões e coordenadas. Dessa forma, ao tentar mover o controle deslizante com o mouse, o método de ajuste de suas coordenadas o retorna à posição que corresponde ao posicionamento do conteúdo do contêiner na área visível. Nos próximos artigos, tudo será finalizado para seu correto funcionamento.
Autor: Artyom Trishkin