Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Bibliotecas

Object Emulator - biblioteca para MetaTrader 5

Visualizações:
1175
Avaliação:
(38)
Publicado:
2014.01.14 14:04
Atualizado:
2016.11.22 07:33
\MQL5\Indicators\ \MQL5\Scripts\ \MQL5\Include\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

MetaTrader 4 permite usar os objetos no Expert Advisor ao testar. O gráfico com os objetos são abertos no final do teste e as setas indicam onde o Expert Advisor executa a operação conveniente.

Em comparação com MetaTrader versão 4, não podemos usar os objetos em testes no MetaTrader 5. Essa situação não combina comigo! Bem, vamos trabalhar com isso.

Nota:

Agora os Expert Advisors são criados sem usar os objetos em MetaTrader 5. O Emulador de Objetos permite a obtenção de dados a partir do objeto, mas eu não recomendo fazer isso, pois o processo de teste será mais lento por vezes, e também, haverá algumas diferenças em relação às funções oficiais.

Use Emulador de Objetos apenas para exibir os objetos no gráfico após o teste.

Configurações

Adicionar o template tester.tpl do indicador ObjectEmul_indicator.

Para aqueles que não sabem como fazê-lo:

  • Abertura do gráfico sobre qualquer par de moedas.
  • Anexar o indicador ObjectEmul_indicator.
  • Botão direito do mouse sobre o gráfico.
  • Templates => Salvar um template, especificando o nome do arquivo de "teste".

Uso

O botão "Abrir gráfico" na aba "Configurações" foi removido no Testador de Estratégia MetaTrader 5. Se o Expert Advisor no teste não realizar a operação de negociação, o gráfico não irá aparecer automaticamente.

Antes, anexar o ObjectEmul_UnitTest_script no gráfico vazio e ler o log na guia "Experts" para conhecer as diferenças das funções oficiais para trabalhar com objetos.

Adicionar para o arquivo principal do Expert Advisor:

#include <ObjectEmul.mqh>
CObjectEmul _objs;

E mudar o Objecto para _objs. Objct nas funções padrão.

Para executar Ajuda pelas funções de objetos no editor você deve apenas adicionar a letra "e" em "Object" e pressione F1.

Exemplo

EURUSD, H1, MetaQuotes Software Corp., MetaTrader 5, Demo

//+------------------------------------------------------------------+
//|    O exemplo de uso do emulador de Objeto                        |
//+------------------------------------------------------------------+
#include <ObjectEmul.mqh>
CObjectEmul _objs;

int ZigZag;
datetime lastbar=0;

double trianglePrice[3];
datetime triangleTime[3];
int triangleIndex=0;

int OnInit()
  {
   ZigZag=iCustom(_Symbol,_Period,"Exemplos\\ZigZag",5,5,3);
   MathSrand(GetTickCount());
   return(0);
  }

void OnTick()
  {
   datetime time[];
   CopyTime(_Symbol,_Period,0,15,time);
   if(lastbar==time[0]) return;
   lastbar=time[0];

   double zgbuffer[];
   if(CopyBuffer(ZigZag,0,0,15,zgbuffer)==0) {Print("CopyBuffer(ZigZag) Error"); return;}

   bool first=true;
   for(int x=0,count=ArraySize(zgbuffer);x<count && triangleIndex<3;x++)
     {
      // Here is something wrong, but I like the result :)
      if(zgbuffer[x]>0 && first) {first=false; x+=3;}
      else if(zgbuffer[x]>0 && (triangleIndex==0 || trianglePrice[triangleIndex-1]!=zgbuffer[x]))
        {
         trianglePrice[triangleIndex]=zgbuffer[x];
         triangleTime[triangleIndex]=time[x];
         triangleIndex++;
         break;
        }
      else if(zgbuffer[x]>0) break;
     }

   if(triangleIndex<3) return;

   string objname="ObjectEmul_Demo_"+(string)(int)lastbar;

//////////////////////////
// Emulador de Objetos

// Análogos Standard Object*()
   if(_objs.ObjctCreate(0,objname,OBJ_TRIANGLE,0,
      triangleTime[0],trianglePrice[0],triangleTime[1],trianglePrice[1]))
     {
      _objs.ObjctSetInteger(0,objname,OBJPROP_TIME,2,triangleTime[2]);
      _objs.ObjctSetDouble(0,objname,OBJPROP_PRICE,2,trianglePrice[2]);
      _objs.ObjctSetInteger(0,objname,OBJPROP_COLOR,(MathRand()%255)*(MathRand()%255)*(MathRand()%255));

      // O exemplo da utilização dos índices
      int index=_objs.ObjctFindIndex(0,objname);
      if(index>-1) _objs.ObjctSetIntegerIndex(index,OBJPROP_FILL,0,true);
     }
   else Print("ObjctCreate Error");

// Emulação do objeto
//////////////////////////

   trianglePrice[0]=trianglePrice[1];
   triangleTime[0]=triangleTime[1];
   trianglePrice[1]=trianglePrice[2];
   triangleTime[1]=triangleTime[2];
   triangleIndex=2;
  }

Variáveis

  • string FileName - Nome do arquivo. É padrão, mas você pode mudá-lo.
  • bool SaveAuto = false - Devemos salvar os objetos em arquivo ao excluir a classe do objeto? O "Verdadeiro" valor padrão é somente para o teste simples.

Funções

Todos os gráficos dos objetos Object*() são realizados, mas possui o nome Objct*(). Mas não há análogos de TextSetFont(), TextOut() e TextGetSize().

  • int Count() - O número de objetos.
  • void ReleaseAll() - Exclui todos os objetos (mais rápido do que ObjctDeleteAll).
  • bool LoadFile(string fname = "", bool print_error = false) - Baixar os objetos do arquivo.
  • bool SaveFile(string fname = "", bool print_error = false) - Salvar os objetos em um arquivo.
  • void DrawAll() - Desenhar todos os objetos no gráfico.

Existe também funções Objct*Index() para acelerar o trabalho:

  • int ObjctFindIndex(long chart_id, string name) - em comparação com ObjctFind () retorna o número de série do objeto.

Para evitar ambigüidade de sobrecarga, eu tive que selecionar funções separadas por índices. Existe funções não chamadas ObjctFindIndex() para pesquisar e os objetos devem ser controlados para serem usados!

ObjctSetInteger(0,"objname",OBJPROP_STYLE,STYLE_DASH) == ObjctSetIntegerIndex(ObjctFindIndex(0,"objname"),OBJPROP_STYLE,STYLE_DASH);

A função LoadFile() usa essas funções e a função Count() mostra o número de todos os objetos.

Certamente há coisas que devem ser trabalhadas na implementação, mas eu preciso encontrar alguma ajuda. Claro, vou tentar atualizar esta biblioteca e esperando pela colaboração comunitária.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1583

Average Volumes (Previsão de Volumes) Average Volumes (Previsão de Volumes)

O indicador é exibido em janela separada onde, além dos volumes também exibe o valor médio histórico. O valor médio dos volumes é usado para desenhar a previsão dos valores de volumes para o dia atual e os seguintes.

ZigZag + Fibo ZigZag + Fibo

O Indicador ZigZag permite definir os níveis de Fibo nos dois últimos extremos.

Easy Trend Visualizer Easy Trend Visualizer

Visualizador de tendência simples.

Donchian Channel Donchian Channel

Canal Donchian é um indicador técnico desenvolvido por Richard Davoud Donchian.