Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 1307
- Avaliação:
- Publicado:
- 2014.01.14 14:04
- Atualizado:
- 2016.11.22 07:33
-
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
//+------------------------------------------------------------------+ //| 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

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.

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

Visualizador de tendência simples.

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