Jonathan Pereira / Профиль
- Информация
|
5+ лет
опыт работы
|
5
продуктов
|
5
демо-версий
|
|
58
работ
|
0
сигналов
|
0
подписчиков
|
Como Desenvolvedor de Sistemas dedicado e apaixonado, adoro me aventurar no mundo da programação, tanto profissionalmente quanto em meu tempo livre. Dominando Java, Python e MQL5, minha experiência se estende a outras áreas, como SQL, bancos de dados relacionais e não relacionais, PySpark, Hadoop, machine learning, deep learning (utilizando Keras, TensorFlow, Pandas e NumPy), DevOps, engenharia de dados e arquitetura.
Foi em 2016 que, por um feliz acaso, me deparei com o mercado financeiro e me encantei instantaneamente. Ao descobrir a plataforma MetaTrader e sua capacidade de integrar estratégias codificadas ao mercado financeiro, soube que tinha encontrado um novo amor.
Explore meus tutoriais no GitHub e acompanhe minha jornada de crescimento e compartilhamento de conhecimento: https://github.com/jowpereira/mql5-tutoriais
Se desejar iniciar um novo projeto e aproveitar minha expertise, acesse: https://www.mql5.com/pt/job/new?prefered=14134597.
Tenho certeza de que, juntos, podemos desenvolver soluções interessantes e inspiradoras!
Conheça meu GPT - https://chat.openai.com/g/g-1DCzqDcMF-arnaldo
Foi em 2016 que, por um feliz acaso, me deparei com o mercado financeiro e me encantei instantaneamente. Ao descobrir a plataforma MetaTrader e sua capacidade de integrar estratégias codificadas ao mercado financeiro, soube que tinha encontrado um novo amor.
Explore meus tutoriais no GitHub e acompanhe minha jornada de crescimento e compartilhamento de conhecimento: https://github.com/jowpereira/mql5-tutoriais
Se desejar iniciar um novo projeto e aproveitar minha expertise, acesse: https://www.mql5.com/pt/job/new?prefered=14134597.
Tenho certeza de que, juntos, podemos desenvolver soluções interessantes e inspiradoras!
Conheça meu GPT - https://chat.openai.com/g/g-1DCzqDcMF-arnaldo
Jonathan Pereira
Опубликовал код Classe para controlar horários de negociação
Essa classe foi projetada com o intuito de ajudar nos horários de negociação, de uma forma simples e centralizada.
2
739
Показать все комментарии (4)
Jonathan Pereira
2020.07.05
Davi, vc deve ter colocado o if fora da função OnTick, essas validações devem ficar dentro de OnTick ou OnTimer
Jose Gustavo De Almeida Verneque
2020.11.12
Boa noite... consegui implementar no meu codigo... funciona no real mas nao funciona no backtest.... Pode me ajudar, por favor...
Jonathan Pereira
2020.11.24
Opa...sim, o que ocorre exatamente? verifique os logs na aba experts e diario.
Jonathan Pereira
Опубликовал код Exemplo de um Robô usando medias moveis para um cruzamento de medias
Esse trabalho foi feito pensando em como se deve usar a Orientação a Objetos em nossos trabalhos.
2
3023
Aldirenio Barbosa Dos Santos Barbosa
2020.12.11
oi jonato boa noite me tire um a duvida qual e arecita pra ficar igual a vc
Jonathan Pereira
Опубликовал код Epsilon-Greedy Algorithm
Semi-uniform strategies were the earliest (and simplest) strategies discovered to approximately solve the bandit problem. All those strategies have in common a greedy behavior where the best lever (based on previous observations) is always pulled except when a (uniformly) random action is taken.
1
240
Jonathan Pereira
Опубликовал код Greedy Algorithm
Program for Greedy Algorithm to find Minimum number of Coins.
1
169
Jonathan Pereira
Опубликовал код Gerenciador de TakeProfit e StopLoss
Adiciona o StopGain(TakeProfit) e StopLoss definidos pelo usuário é possível também adicionar o uso de um trailingStop
2
1096
Jonathan Pereira
Опубликовал код Detector de novas Barras
A Ideia dessa classe é de detectar novas barras para um determinado Ativo em um timeFrame previamente setado, caso nenhuma informação seja fornecida no momento de criação do objeto ele assume Symbol() e Period() atual.
Um exemplo simples
2
407
Rinalva Ferreira
2023.07.13
//+------------------------------------------------------------------+
//| MeuExpert.mq5 |
//| Copyright 2021, Seu Nome |
//| https://www.seusite.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Seu Nome"
#property link "https://www.seusite.com"
#property version "1.00"
#property strict input int TrailingStop = 50; // Trailing stop em pontos
input int TrailingStep = 10; // Incremento do trailing stop em pontos
input double LotMultiplier = 2; // Multiplicador do lote ao abrir uma nova posição double StopLoss = 0; // Variável para armazenar o stop loss atual
double TakeProfit = 0; // Variável para armazenar o take profit atual
double TrailingStart = 0; // Variável para armazenar o preço de início do trailing stop
double TrailingMinimum = 0; // Variável para armazenar o mínimo permitido para o trailing stop //+------------------------------------------------------------------+
//| Função de inicialização do Expert Advisor |
//+------------------------------------------------------------------+
int OnInit()
{ // Definir o stop loss e take profit inicial StopLoss = TrailingStop * _Point; TakeProfit = StopLoss * 2; // Definir o preço de início do trailing stop e o mínimo permitido TrailingStart = Bid - TrailingStop * _Point; TrailingMinimum = TrailingStart - TrailingStep * _Point; return(INIT_SUCCEEDED);
} //+------------------------------------------------------------------+
//| Função para abertura de novas posições |
//+------------------------------------------------------------------+
void OpenNewPosition(ENUM_ORDER_TYPE orderType, double lotSize)
{ // Verificar se a posição já está aberta if(PositionSelect() > 0) return; // Verificar a tendência do mercado if(orderType ==_TYPE_BUY && iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0) iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, 0)) return; else if(orderType == ORDER_TYPE_SELL && iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0) > iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, 0)) return; // Calcular o lote para a nova posição double lot = lotSize * LotMultiplier; // Abrir a nova posição if(orderType == ORDER_TYPE_BUY) OrderSend(Symbol(), ORDER_TYPE_BUY, lot, Ask, 10, Bid - StopLoss * _Point, Bid + TakeProfit * _Point, "Buy Order", MagicNumber); else if(orderType == ORDER_TYPE_SELL) OrderSend(Symbol(), ORDER_TYPE_SELL, lot, Bid, 10, Ask + StopLoss * _Point, Ask - TakeProfit * _Point, "Sell Order", MagicNumber);
} //+------------------------------------------------------------------+
//| Função para atualizar o trailing stop |
//+------------------------------------------------------------------+
void UpdateTrailingStop()
{ // Verificar a tendência do mercado ENUM_ORDER_TYPE orderType = PositionGetInteger(POSITION_TYPE); if(orderType == POSITION_TYPE_BUY && Bid - TrailingStart > TrailingStep * _Point) { // Atualizar o stop loss e o preço de início do trailing stop StopLoss = Bid - TrailingStop * _Point; TrailingStart = Bid - TrailingStep * _Point; // Verificar o mínimo permitido para o trailing stop if(TrailingStart TrailingMinimum) TrailingMinimum = TrailingStart; // Modificar a posição existente OrderModify(PositionGetTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Green); } else if(orderType == POSITION_TYPE_SELL && TrailingStart - Ask > TrailingStep * _Point) { // Atualizar o stop loss e o preço de início do trailing stop StopLoss = Ask + TrailingStop * _Point; TrailingStart = Ask + TrailingStep * _Point; // Verificar o mínimo permitido para o trailing stop if(TrailingStart > TrailingMinimum) TrailingMinimum = TrailingStart; // Modificar a posição existente OrderModify(PositionGetTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Red); }
} //+------------------------------------------------------------------+
//| Função de encerramento do Expert Advisor |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{ // Encerrar todas as posições abertas for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10, Yellow); }
} //+------------------------------------------------------------------+
//| Função principal do Expert Advisor |
//+------------------------------------------------------------------+
void OnTick() alguem pode mim ajuda e fazer a correcao deste codigo , nao consegui . boa tarde .
//| MeuExpert.mq5 |
//| Copyright 2021, Seu Nome |
//| https://www.seusite.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Seu Nome"
#property link "https://www.seusite.com"
#property version "1.00"
#property strict input int TrailingStop = 50; // Trailing stop em pontos
input int TrailingStep = 10; // Incremento do trailing stop em pontos
input double LotMultiplier = 2; // Multiplicador do lote ao abrir uma nova posição double StopLoss = 0; // Variável para armazenar o stop loss atual
double TakeProfit = 0; // Variável para armazenar o take profit atual
double TrailingStart = 0; // Variável para armazenar o preço de início do trailing stop
double TrailingMinimum = 0; // Variável para armazenar o mínimo permitido para o trailing stop //+------------------------------------------------------------------+
//| Função de inicialização do Expert Advisor |
//+------------------------------------------------------------------+
int OnInit()
{ // Definir o stop loss e take profit inicial StopLoss = TrailingStop * _Point; TakeProfit = StopLoss * 2; // Definir o preço de início do trailing stop e o mínimo permitido TrailingStart = Bid - TrailingStop * _Point; TrailingMinimum = TrailingStart - TrailingStep * _Point; return(INIT_SUCCEEDED);
} //+------------------------------------------------------------------+
//| Função para abertura de novas posições |
//+------------------------------------------------------------------+
void OpenNewPosition(ENUM_ORDER_TYPE orderType, double lotSize)
{ // Verificar se a posição já está aberta if(PositionSelect() > 0) return; // Verificar a tendência do mercado if(orderType ==_TYPE_BUY && iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0) iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, 0)) return; else if(orderType == ORDER_TYPE_SELL && iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0) > iMA(NULL, 0, 28, 0, MODE_SMA, PRICE_CLOSE, 0)) return; // Calcular o lote para a nova posição double lot = lotSize * LotMultiplier; // Abrir a nova posição if(orderType == ORDER_TYPE_BUY) OrderSend(Symbol(), ORDER_TYPE_BUY, lot, Ask, 10, Bid - StopLoss * _Point, Bid + TakeProfit * _Point, "Buy Order", MagicNumber); else if(orderType == ORDER_TYPE_SELL) OrderSend(Symbol(), ORDER_TYPE_SELL, lot, Bid, 10, Ask + StopLoss * _Point, Ask - TakeProfit * _Point, "Sell Order", MagicNumber);
} //+------------------------------------------------------------------+
//| Função para atualizar o trailing stop |
//+------------------------------------------------------------------+
void UpdateTrailingStop()
{ // Verificar a tendência do mercado ENUM_ORDER_TYPE orderType = PositionGetInteger(POSITION_TYPE); if(orderType == POSITION_TYPE_BUY && Bid - TrailingStart > TrailingStep * _Point) { // Atualizar o stop loss e o preço de início do trailing stop StopLoss = Bid - TrailingStop * _Point; TrailingStart = Bid - TrailingStep * _Point; // Verificar o mínimo permitido para o trailing stop if(TrailingStart TrailingMinimum) TrailingMinimum = TrailingStart; // Modificar a posição existente OrderModify(PositionGetTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Green); } else if(orderType == POSITION_TYPE_SELL && TrailingStart - Ask > TrailingStep * _Point) { // Atualizar o stop loss e o preço de início do trailing stop StopLoss = Ask + TrailingStop * _Point; TrailingStart = Ask + TrailingStep * _Point; // Verificar o mínimo permitido para o trailing stop if(TrailingStart > TrailingMinimum) TrailingMinimum = TrailingStart; // Modificar a posição existente OrderModify(PositionGetTicket(), OrderOpenPrice(), StopLoss, OrderTakeProfit(), 0, Red); }
} //+------------------------------------------------------------------+
//| Função de encerramento do Expert Advisor |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{ // Encerrar todas as posições abertas for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 10, Yellow); }
} //+------------------------------------------------------------------+
//| Função principal do Expert Advisor |
//+------------------------------------------------------------------+
void OnTick() alguem pode mim ajuda e fazer a correcao deste codigo , nao consegui . boa tarde .
: