.
" Continuo na saga para finalizar meu EA, e agora faltam basicamente 3 questões: delimitar o horário de funcionamento, estipular o limite de perda e ganho diários e implementar o martingale. "
Tem alguma alma ingênua nesse fórum para fazer este EA para este rapaz?
Tem alguma alma ingênua nesse fórum para fazer este EA para este rapaz?
Bom dia! Não entendi a ironia, amigo..
Pra você pode parecer algo ridiculamente fácil, mas pra mim não é!
Eu não pedi pra ninguém fazer nada do zero pra mim, o EA está quase finalizado.. só que estou tendo dificuldade nesses pontos e estou pedindo auxílio.
Aqui é um fórum, onde as pessoas se ajudam.. gostaria que alguém me indicasse onde encontro material para sanar minhas dúvidas.
Boa noite, pessoal!
Continuo na saga para finalizar meu EA, e agora faltam basicamente 3 questões: delimitar o horário de funcionamento, estipular o limite de perda e ganho diários e implementar o martingale.
Nesse momento voltei a sofrer com o martingale.. já li e vários artigos e postagens aqui no fórum, mas sem sucesso.
Eu preciso definir o fator de multiplicação e a quantidade de martingales apenas.
Se alguém conseguir me ajudar com essa questão, na verdade, se puder me ajudar com qualquer uma das questões acima já ficarei muito agradecido.
Vou deixar aqui a baixo a lógica do EA.
A estratégia é simples: é usado um canal de keltner, um candle fecha dentro do canal e o proximo candle rompendo o canal pra cima, é gerada uma ordem de compra, se romper pra baixo é venda.
Junto com as ordens de abertura da posição estão configurados os stop loss e take profit, bem como o breakeven e o trailling stop.
Bom dia!
Para controle de horário tem essa biblioteca que vem com exemplo de como implementar:
Veja também esse tópico:
https://www.mql5.com/pt/forum/367647/page4#comment_22976960
input uchar hora_inicio = 09; // Hora para Iniciar Operação input uchar minuto_inicio = 00; // Minuto para Iniciar Operação input uchar hora_fim = 18; // Hora para Finalizar Operação input uchar minuto_fim = 25; // Minuto para Finalizar Operação void OnTick() {if (HoraPodeOperar()) // ->> aqui vc coloca a rotina que abre ordens do seu EA } bool HoraPodeOperar() {datetime time_current = TimeCurrent(); datetime zero_hora = StringToTime(TimeToString(time_current,TIME_DATE)); datetime horarioInicial = zero_hora + (hora_inicio * 60 * 60) + (minuto_inicio * 60); datetime horarioFinal = zero_hora + (hora_fim * 60 * 60) + (minuto_fim * 60); if ((horarioInicial < horarioFinal) && (time_current >= horarioInicial && time_current < horarioFinal)) // intraday time interval {return true;} if ((horarioInicial > horarioFinal) && (time_current >= horarioInicial || time_current < horarioFinal)) // time interval with the transition in a day {return true;} return(false);}
segue uma rotina para vc implementar o horário de funcionamento em seu EA
Boa noite, pessoal!
Continuo na saga para finalizar meu EA, e agora faltam basicamente 3 questões: delimitar o horário de funcionamento, estipular o limite de perda e ganho diários e implementar o martingale.
Nesse momento voltei a sofrer com o martingale.. já li e vários artigos e postagens aqui no fórum, mas sem sucesso.
Eu preciso definir o fator de multiplicação e a quantidade de martingales apenas.
Se alguém conseguir me ajudar com essa questão, na verdade, se puder me ajudar com qualquer uma das questões acima já ficarei muito agradecido.
Vou deixar aqui a baixo a lógica do EA.
A estratégia é simples: é usado um canal de keltner, um candle fecha dentro do canal e o proximo candle rompendo o canal pra cima, é gerada uma ordem de compra, se romper pra baixo é venda.
Junto com as ordens de abertura da posição estão configurados os stop loss e take profit, bem como o breakeven e o trailling stop.
Para resultado diário tem essa função:
//+------------------------------------------------------------------+ //| Calcula o lucro / prejuízo do dia atual por símbolo | //+------------------------------------------------------------------+ double CurrentDayProfit() { // datetime time_start = (datetime) (86400*(((ulong)TimeCurrent())/86400)); datetime time_start = iTime(_Symbol, PERIOD_D1, 0); double result = 0.0; ulong ticket; int cnt; if(HistorySelect(time_start, TimeCurrent())) { for(cnt = HistoryDealsTotal() - 1; cnt >= 0; cnt--) { ticket = HistoryDealGetTicket(cnt); if(HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol && HistoryDealGetInteger(ticket, DEAL_MAGIC) == EA_MAGIC) { result += HistoryDealGetDouble(ticket, DEAL_PROFIT); } } } else { Print(_Symbol, " - Erro ao recuperar o histórico de operações..."); } return(result); }
Se quiser o resultado geral, independente do símbolo, retire a condição HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol.
Para resultado diário tem essa função:
Se quiser o resultado geral, independente do símbolo, retire a condição HistoryDealGetString(ticket, DEAL_SYMBOL) == _Symbol.
Então, Vinicius.. consegui implementar perfeitamente o horário operacional tanto com o método que você indicou, quanto com o método que o ArmandoJunior passou acima.
Mas essa parte do Lucro/Prejuízo do dia não tá indo de jeito algum.. estou o dia inteiro e não consigo fazer funcionar. Compila sem erros, mas não está funcional.
Tentei de algumas formas comparar o valor retornado pela função em "OnTick", usando um IF, para só abri a posição se o saldo diário estivesse abaixo do lucro máximo e acima da perda máxima, utilizando os iputs e tal, mas não consegui.
Tem alguma sugestão? ou algum conteúdo onde eu possa estudar sobre.. rodei o forum em outros idiomas tbm, mas sem sucesso.
segue uma rotina para vc implementar o horário de funcionamento em seu EA
Obrigado, meu amigo! Deu super certo dessa forma também.. super simples, eu que estava tentando de uma forma bem mais complicada que essa..
Olá Savio,
a rotina do Vinícius está correta só precisa ver se vc está sabendo colocá-la corretamento no seu EA. Tente assim:
input double perda_max = 500; input double ganho_max = 900; void OnTick() {if (HoraPodeOperar() && CurrentDayProfit() > perda_max*-1 && CurrentDayProfit() < ganho_max) {// ->> aqui vc coloca a rotina que abre ordens do seu EA} else {// ->> fecha ordens e posições if (HoraPodeOperar() == false) {Print("Fora de Período Operacional!");} if (CurrentDayProfit() <= perda_max*-1) {Print("Perda Máxima Atingida!");} if (CurrentDayProfit() >= ganho_max) {Print("Ganho Máximo Atingido!");}}
Olá Savio,
a rotina do Vinícius está correta só precisa ver se vc está sabendo colocá-la corretamento no seu EA. Tente assim:
Então, é exatamente essa a lógica que eu estava usando, com exceção desse "*-1". Mas tentei dessa forma que você colocou acima e também não funcionou.
Quando insiro essa funcionalidade o EA não abre ordens.
Não sei se os valores retornados estão em outro formato, e ao comparar com os valores inputados está dando alguma irregularidade..
Ou se eu estou inserindo a rotina no local errado.. Eu coloquei a rotina no final do EA, abaixo das funções (void) de traillingstop e breakeven.
- 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 noite, pessoal!
Continuo na saga para finalizar meu EA, e agora faltam basicamente 3 questões: delimitar o horário de funcionamento, estipular o limite de perda e ganho diários e implementar o martingale.
Nesse momento voltei a sofrer com o martingale.. já li e vários artigos e postagens aqui no fórum, mas sem sucesso.
Eu preciso definir o fator de multiplicação e a quantidade de martingales apenas.
Se alguém conseguir me ajudar com essa questão, na verdade, se puder me ajudar com qualquer uma das questões acima já ficarei muito agradecido.
Vou deixar aqui a baixo a lógica do EA.
A estratégia é simples: é usado um canal de keltner, um candle fecha dentro do canal e o proximo candle rompendo o canal pra cima, é gerada uma ordem de compra, se romper pra baixo é venda.
Vou deixar o EA em anexo.. Se alguém puder olhar e me dar essa força eu agradeço.Junto com as ordens de abertura da posição estão configurados os stop loss e take profit, bem como o breakeven e o trailling stop.