Use este codigo
input string inicio="10:30"; //Horario de inicio(entradas); input string termino="17:30"; //Horario de termino(entradas); input string fechamento="17:45"; //Horario de fechamento(entradas); MqlDateTime horario_inicio,horario_termino,horario_fechamento,horario_atual; int OnInit() { //--- TimeToStruct(StringToTime(inicio),horario_inicio); //+-------------------------------------+ TimeToStruct(StringToTime(termino),horario_termino); //| Conversão das variaveis para mql | TimeToStruct(StringToTime(fechamento),horario_fechamento); //+-------------------------------------+ //verificação de erros nas entradas de horario if(horario_inicio.hour>horario_termino.hour || (horario_inicio.hour==horario_termino.hour && horario_inicio.min>horario_termino.min)) { printf ( "Parametos de horarios invalidos!" ); return INIT_FAILED; } if(horario_termino.hour>horario_fechamento.hour || (horario_termino.hour==horario_fechamento.hour && horario_termino.min>horario_fechamento.min)) { printf("Parametos de horarios invalidos!"); return INIT_FAILED; } bool HorarioEntrada() { TimeToStruct(TimeCurrent(),horario_atual); if(horario_atual.hour >= horario_inicio.hour && horario_atual.hour <= horario_termino.hour) { // Hora atual igual a de início if(horario_atual.hour == horario_inicio.hour) // Se minuto atual maior ou igual ao de início => está no horário de entradas if(horario_atual.min >= horario_inicio.min) return true; // Do contrário não está no horário de entradas else return false; // Hora atual igual a de término if(horario_atual.hour == horario_termino.hour) // Se minuto atual menor ou igual ao de término => está no horário de entradas if(horario_atual.min <= horario_termino.min) return true; // Do contrário não está no horário de entradas else return false; // Hora atual maior que a de início e menor que a de término return true; } // Hora fora do horário de entradas return false; } bool HorarioFechamento() { TimeToStruct(TimeCurrent(),horario_atual); // Hora dentro do horário de fechamento if(horario_atual.hour >= horario_fechamento.hour) { // Hora atual igual a de fechamento if(horario_atual.hour == horario_fechamento.hour) // Se minuto atual maior ou igual ao de fechamento => está no horário de fechamento if(horario_atual.min >= horario_fechamento.min) return true; // Do contrário não está no horário de fechamento else return false; // Hora atual maior que a de fechamento return true; } // Hora fora do horário de fechamento return false; }
Deu certo, muito obrigada!!!
Poderia me tirar outra duvida, no programa utilizo 2 medias moveis exponenciais.
int mm_lenta_Handle; // Handle controlador da média móvel lenta double mm_lenta_Buffer[]; // Buffer para armazenamento dos dados das médias int mm_rapida_Handle; // Handle controlador da média móvel rápida double mm_rapida_Buffer[]; // Buffer para armazenamento dos dados das médias mm_lenta_Handle = iMA(_Symbol,mm_tempo_grafico,mm_lenta_periodo,0,mm_metodo,mm_preco); mm_rapida_Handle = iMA(_Symbol,mm_tempo_grafico,mm_rapida_periodo,0,mm_metodo,mm_preco); ChartIndicatorAdd(0,0,mm_rapida_Handle); ChartIndicatorAdd(0,0,mm_lenta_Handle);
Quando utiliza a função ChartIndicatorAdd para colocar no gráfico as duas vão com a cor vermelha, é possível deixar uma azul e outra amarela ?
Muito obrigada, estou a disposição.
Atenciosamente
Micheli Barcello
Deu certo, muito obrigada!!!
Poderia me tirar outra duvida, no programa utilizo 2 medias moveis exponenciais.
Quando utiliza a função ChartIndicatorAdd para colocar no gráfico as duas vão com a cor vermelha, é possível deixar uma azul e outra amarela ?
Muito obrigada, estou a disposição.
Atenciosamente
Micheli Barcello
Leia esta thread e depois a documentação.
Não consegui, pois são funções diferente pelo que entendi:
bool ChartIndicatorAdd( |
O primeiro parametro é o grafico, no caso 0, o segundo 0 para colocar na mesma janela dos candles e o terceiro o handle.
A função ObjectSetInteger não tem a parte de identificar o grafico, janela e hando, logo acredito que tem que usar em conjunto, porem não sei como
bool ObjectSetInteger( long chart_id, // identificador Gráfico string name, // nome objeto ENUM_OBJECT_PROPERTY_INTEGER prop_id, // propriedade long prop_value // valor );
Poderia me explicar ? Por exemplo
ObjectSetInteger(0,mm_rapida_Handle, OBJPROP_COLOR, clrWhite) ( id do grafico, handle para mudar a cor, cor escolhida )
ChartIndicatorAdd(0,0,mm_rapida_Handle); ( Id do grafico = atual / mesma janela dos candle / handle para desenhar )
Porem não funcionou ://
Não consegui, pois são funções diferente pelo que entendi:
bool ChartIndicatorAdd( |
O primeiro parametro é o grafico, no caso 0, o segundo 0 para colocar na mesma janela dos candles e o terceiro o handle.
A função ObjectSetInteger não tem a parte de identificar o grafico, janela e hando, logo acredito que tem que usar em conjunto, porem não sei como
Poderia me explicar ? Por exemplo
ObjectSetInteger(0,mm_rapida_Handle, OBJPROP_COLOR, clrWhite) ( id do grafico, handle para mudar a cor, cor escolhida )
ChartIndicatorAdd(0,0,mm_rapida_Handle); ( Id do grafico = atual / mesma janela dos candle / handle para desenhar )
Porem não funcionou ://
Poderia me ajudar a programar ?
Toda programação tem como principio a logica.
- Primeiramente, responda: Qual seu objetivo do robo plotar o indicador no gráfico? Acadêmico? Estético?
- A solução proposta não funcionou. Você pesquisou outra?
- O robô não precisa do indicador plotado ao gráfico. Precisa apenas ter garantido o recebimento dos dados do Buffer. Dito isso, ainda eh essencial para você plotar o mesmo no gráfico? Eu pensaria duas vezes.
- Por fim, quando nada funciona, utiliza-se uma solução de contorno logica. Ja pensou nisso?
- A solução logica passa por ler a documentação do iMA. Você fez isso?
- O procedimento de contorno passara por repetir o procedimento (Crtl+ C e Crtl+V) por duas vezes, fazendo alteracoes manuais distintas em cada uma delas e depois usando iCustom. Captou?
Nao irei ajudar mais do que isso.
Boa sorte!
- Primeiramente, responda: Qual seu objetivo do robo plotar o indicador no gráfico? Acadêmico? Estético?
R: Estético para facilitar a visualização e explicações.
- A solução proposta não funcionou. Você pesquisou outra?
R: Sim, verifiquei que varias pessoas tentaram fazer isso, muitas dizem é um impossível pois não tem logica o robo ver cores, porem tem uma solução criando pelo icustom.
- O robô não precisa do indicador plotado ao gráfico. Precisa apenas ter garantido o recebimento dos dados do Buffer. Dito isso, ainda eh essencial para você plotar o mesmo no gráfico? Eu pensaria duas vezes.
R: Para o trade não, para questão acadêmica/didática sim, facilita muito a visualização.
- Por fim, quando nada funciona, utiliza-se uma solução de contorno logica. Ja pensou nisso?
- A solução logica passa por ler a documentação do iMA. Você fez isso?
- O procedimento de contorno passara por repetir o procedimento (Crtl+ C e Crtl+V) por duas vezes, fazendo alteracoes manuais distintas em cada uma delas e depois usando iCustom. Captou?
R: Sim, porem acreditei que exite algo mais simples, logo para demonstração vou utilizar o tradindview
Você pode me tirar outra duvida ? ( Não tem nada a ver com cores no gráfico, é sobre programação )
É possível por exemplo o programa ler os dados das Medias no WINFUT porem fazer a compra e venda no WINZ19 ? ( Índice do mês/período )
Sim, veja só: você pode especificar o SYMBOL que deseja manipular nas funções de indicador.
Exemplo abaixo, no manipulador de média iMA basta colocar WINFUT em symbol.
string symbol, // símbolo nome
ENUM_TIMEFRAMES period, // período
int ma_period, // período médio
int ma_shift, // deslocamento horizontal
ENUM_MA_METHOD ma_method, // tipo suavizado
ENUM_APPLIED_PRICE applied_price // tipo de preço ou de manipulador
);
- 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
Boa Tarde Pessoal, Tudo bem ?
Me chamo Michelli, sou estudante de TI e comecei a programar meu primeiro EA.
Estou com um problema no tempo limite do EA, fiz o código a baixo:
A variável hora_limite_fecha_op é "17:40" e realmente, se tiver uma posição de compra, o EA vende a mesma e se tiver uma operação de venda o EA compra e finaliza.
O problema é que se a MME cruzar novamente as 17:43 por exemplo, ele faz uma nova ordem de compra/vende, precisava que apos as 17:40 não faça mais nenhuma ordem, mesmo se o indicador der o sinal.
Muito obrigada, estou a disposição.
Atenciosamente
Micheli Barcello