Negociação Sistemática

Como Usar Stop Loss Duplo: HIDDEN e REGULAR no MetaTrader 4
MetaTrader4
Como Usar Stop Loss Duplo: HIDDEN e REGULAR no MetaTrader 4

Quando um trader decide abrir uma nova posição, a primeira coisa que deve estar na sua mente é a gestão de risco. Uma das maneiras mais comuns que temos para controlar esse risco e gerenciar nosso capital é através da definição de um limite de perda para nossas operações. É comum que muitos traders acreditem que, ao definir um Stop Loss (ou até mesmo um Take Profit) e inserir esse valor na janela de modificação da posição, o servidor da corretora tem a obrigação de fechar a posição assim que o preço atinge esse limite. Mas, na verdade, isso não é bem assim. A situação pode variar dependendo do tipo de conta que você possui na corretora. É importante saber que, em contas ECN, quando você informa um preço ao broker como Stop Loss ou Take Profit, a corretora irá fechar sua posição no primeiro preço disponível assim que o mercado atingir esse limite. Se isso não for do seu agrado, é hora de olhar mais de perto seu histórico de operações. Você vai perceber que algumas das suas ordens foram fechadas a um preço diferente do que você havia definido, resultando em perdas maiores ou lucros menores do que o esperado. Isso acontece devido ao que chamamos de SLIPPAGE. Além disso, alguns traders acreditam que o limite de perda não deve ser exposto de forma precisa para a corretora. É daí que surge o HIDDEN Stop Loss, que foi desenvolvido justamente para atender a essa necessidade. Agora você pode usar tanto o HIDDEN quanto o REGULAR Stop Loss juntos. A configuração do REGULAR Stop Loss continua a mesma de sempre, seja você um trader manual ou esteja utilizando robôs. Basta rodar esse robô em um novo gráfico separado (qualquer um) para gerenciar todas as suas posições. O valor de entrada determina a distância entre o HIDDEN e o REGULAR Stop Loss. Lembre-se de que esse valor é definido em pontos, não em pips.

2021.04.23
Scalper Assistant v1.0: Ferramenta Ideal para Scalpers no MetaTrader 4
MetaTrader4
Scalper Assistant v1.0: Ferramenta Ideal para Scalpers no MetaTrader 4

O scalping é uma das estratégias mais populares entre os traders, e a maioria já experimentou pelo menos uma vez. Como um scalper costuma realizar mais de 10 operações por dia, configurar Stop Loss e Take Profit para cada uma pode se tornar um verdadeiro desafio. Se a sua estratégia envolve negociar em diversos instrumentos financeiros e ainda garantir um Break Even, a gestão de todas essas ordens pode ser maçante e, muitas vezes, sujeita a erros. Além disso, ao operar em Time-Frames menores e em múltiplos pares de moedas, uma movimentação rápida de preço pode acontecer justo quando você se afasta da tela para tomar um café, e você pode perder a oportunidade de garantir seu Break Even. A preocupação de ver um trade lucrativo se transformar em prejuízo está sempre presente. Com a ajuda deste assistente, você pode facilmente definir os valores de Stop Loss e Take Profit. Assim que você abre uma operação, a ferramenta automaticamente configura os valores iniciais e, se o preço se mover na direção desejada, a operação pode se tornar sem risco ou Break Even. Todos os valores de entrada são em PONTOS (não em PIPs). extern double WhenToMoveToBE // Aqui você determina quantos pontos o preço deve estar afastado do ponto de entrada da ordem para que o EA mova para Break Even. extern double BEAmount // Você define a distância do Stop Loss em relação ao ponto de entrada.

2021.04.23
Agendador Automático: Otimize seu Trading com MetaTrader 4 e 5
MetaTrader4
Agendador Automático: Otimize seu Trading com MetaTrader 4 e 5

Você já se pegou pensando em como gerenciar melhor suas operações no MetaTrader? O Agendador Automático é uma ferramenta incrível que pode te ajudar a ter mais controle sobre suas negociações. Desenvolvido pela EarnForex.com, o Agendador Automático permite que você defina períodos específicos em que o AutoTrading está habilitado ou desabilitado. Isso é especialmente útil para quem quer evitar operar em horários de alta volatilidade ou quando não está disponível para monitorar o mercado. Você pode programar esses períodos para cada dia da semana, e o sistema se encarregará de desativar o AutoTrading fora desses horários. Assim, você pode ter a tranquilidade de que suas operações só acontecerão quando você achar mais seguro. Além disso, o Agendador também tem a funcionalidade de tentar fechar todas as suas operações (tanto as posições abertas quanto as ordens pendentes) antes de desativar o AutoTrading. Isso ajuda a evitar surpresas desagradáveis e garante que você não deixe posições abertas quando não pode monitorar o mercado. Vantagens do Agendador Automático Controle Total: Defina exatamente quando suas operações devem acontecer. Segurança: Minimize riscos ao evitar operar em horários indesejados. Fechamento Automático: Garanta que suas posições sejam fechadas antes de desabilitar o AutoTrading. Aproveite essa ferramenta poderosa e eleve seu trading a um novo nível com o Agendador Automático no MetaTrader 4 e 5!

2021.04.01
Como Fechar Ordens por Alvo ou Limite de Perda no MetaTrader 4
MetaTrader4
Como Fechar Ordens por Alvo ou Limite de Perda no MetaTrader 4

Fala, galera! Hoje vamos falar sobre uma ferramenta que pode facilitar muito a sua vida como trader no MetaTrader 4: um robô que fecha ordens com base no alvo de lucro ou no limite de perda. Esse Expert Advisor (EA) é super útil e tem apenas três entradas que você precisa configurar: Alvo de Lucro Limite de Perda Número Mágico extern     double          inTargetProfitMoney      = 10;       // Alvo de Lucro ($)extern     double          inCutLossMoney           = 0.0      // Limite de Perda ($)extern     int             inMagicNumber            = 0        // Número Mágico Quando você executar esse EA, ele chamará a função OnInit(). Nela, vamos verificar se as entradas e variáveis estão devidamente inicializadas. int OnInit()  {    //---    if(inTargetProfitMoney <= 0)       {        Alert("Entrada inválida");        return(INIT_PARAMETERS_INCORRECT);     }     inCutLossMoney = MathAbs(inCutLossMoney) * -1;    //---    return(INIT_SUCCEEDED);  } Agora, toda vez que houver uma movimentação de preço (tick), a função OnTick() será chamada. void OnTick()  {    //---    double   tFloating = 0.0;    int tOrder   = OrdersTotal();    for(int i=tOrder-1; i>=0; i--)       {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {            if(OrderMagicNumber() == inMagicNumber)               {                tFloating    += OrderProfit()+OrderCommission() + OrderSwap();           }        }     }    if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))     {      fCloseAllOrders();     }  } Na função OnTick, vamos continuar calculando o lucro ou a perda total e, se necessário, fechar todas as ordens que atingirem o alvo ou o limite de perda. void fCloseAllOrders()  {    double   priceClose = 0.0;    int tOrders = OrdersTotal();    for(int i=tOrders-1; i>=0; i--)       {        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))          {            if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))               {                priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);                if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))              {                   Print("AVISO: Falha ao Fechar");              }           }        }     }  } Para mais informações e troca de conhecimentos sobre códigos MQL4, junte-se ao nosso grupo no Telegram: t.me/codeMQL

2021.03.31
Como Usar o Trailing Stop com MagicNumber no MetaTrader 4
MetaTrader4
Como Usar o Trailing Stop com MagicNumber no MetaTrader 4

O trailing stop é uma ferramenta incrível que ajuda a proteger nossos lucros, ajustando automaticamente o stop loss para a área de lucro. Isso garante que possamos sempre garantir nossas operações com mais segurança. Vamos começar definindo os parâmetros de entrada para o trailing stop no código. input    bool     isTrailingStop = true;  //Ativar Trailing Stop input    int      trailingStart  = 15;    //Início do Trailing (pips) input    int      trailingStep   = 5;     //Passo do Trailing (pips) input    int      MagicNumber = 0;        //Número Mágico Agora, vamos definir uma variável global: //Variável Global double   myPoint    = 0.0; Quando executamos este Expert Advisor, a função OnInit() será chamada pela primeira vez, onde validaremos e inicializaremos as variáveis de entrada. int OnInit()   {       if (isTrailingStop && trailingStart <= 0){       Alert ("Parâmetros incorretos");       return(INIT_PARAMETERS_INCORRECT);    }       myPoint     = GetPipPoint(Symbol());       return(INIT_SUCCEEDED);   } A cada movimento de preço (tick) no gráfico onde este EA está emparelhado, a função OnTick() será executada. Dentro dela, chamaremos a função setTrailingStop(). void OnTick()   { //---    setTrailingStop(MagicNumber);      } A função setTrailingStop() é onde a mágica acontece: void setTrailingStop(int magicNumber=0){    if (isTrailingStop==false) return;       int      tOrder = 0;    string   pair = "";    double   sl = 0.0, tp = 0.0;       pair = Symbol();       tOrder = OrdersTotal();    for (int i=tOrder-1; i>=0; i--){       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){          if (OrderType() == OP_BUY){             if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()                   && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )                 ){                sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " falha ao atualizar sl");                }             }          }                   if (OrderType() == OP_SELL){             if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()                   && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)                )             {                sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );                if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){                   Print ("#", OrderTicket(), " falha ao atualizar sl");                }             }          }       } //fim do if magicNumber    }//fim do for } Outra função padrão necessária é a GetPipPoint(): // Função GetPipPoint double GetPipPoint(string pair) {    double point= 0.0;    int digits = (int) MarketInfo(pair, MODE_DIGITS);    if(digits == 2 || digits== 3) point= 0.01;    else if(digits== 4 || digits== 5) point= 0.0001;    return(point); } Se você tiver alguma dúvida, fique à vontade para deixar nos comentários ou junte-se ao nosso grupo de compartilhamento t.me/codeMQL (em português). Não se esqueça de conferir o nosso aplicativo SignalForex! Você pode nos apoiar baixando e usando o aplicativo SignalForex para tornar suas operações ainda mais lucrativas. https://play.google.com/store/apps/details?id=com.autobotfx.signalforex

2021.03.30
Criando um EA de Cruzamento de Médias Móveis no MetaTrader 4
MetaTrader4
Criando um EA de Cruzamento de Médias Móveis no MetaTrader 4

Vamos começar a criar esse EA (Expert Advisor) definindo as variáveis de entrada. //--- parâmetros de entrada input    int      periodo_ma_rapida = 8;  // Período da Média Móvel Rápida input    int      periodo_ma_lenta = 20; // Período da Média Móvel Lenta input    double  takeProfit  = 20.0;  // Take Profit (pips) input    double  stopLoss    = 20.0  // Stop Loss (pips) input    double  tamanhoLote     = 0.10;  // Tamanho do Lote input    double  minimoEquity   = 100.0; // Mínimo Equity ($) input    int slippage = 3;       // Slippage input    int numeroMagico = 889;  // Número Mágico Agora, vamos definir as variáveis globais. Essas variáveis com escopo global estarão disponíveis em todas as funções. // Variáveis Globais double  meuPonto    = 0.0; int      minhaSlippage = 0; int      CompraTicket   = 0; int      VendaTicket  = 0; Quando o EA é executado, a primeira função chamada é a OnInit(). Usamos essa função para validar e inicializar as variáveis globais que serão utilizadas. int OnInit() {    // validação das entradas, sempre valide ao inicializar dados de entrada    if (periodo_ma_rapida >= periodo_ma_lenta || takeProfit < 0.0 || stopLoss < 0.0 || tamanhoLote < 0.01 || minimoEquity < 10){       Alert("ATENÇÃO - Dados de entrada não são válidos");       return (INIT_PARAMETERS_INCORRECT);    }       double volume_minimo=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);    if(tamanhoLote<volume_minimo)    {       string mensagem =StringFormat("Volume menor que o permitido de %.2f",volume_minimo);       Alert (mensagem);       return(INIT_PARAMETERS_INCORRECT);    }       meuPonto = GetPipPoint(Symbol());    minhaSlippage = GetSlippage(Symbol(),slippage);    return(INIT_SUCCEEDED); } Quando o preço do mercado se move (tick), a função OnTick() será chamada e executará todas as instruções contidas nesse bloco. Dentro da função OnTick(), chamaremos várias outras funções. Começamos chamando a função checkMinEquity() para controlar a adequação do equity para operações. Se o equity for suficiente (acima do mínimo), continuamos com a declaração da variável de sinal e chamamos a função NewCandle(), que informa quando uma nova vela é formada. A função getSignal() irá ler os valores nos dois indicadores de média móvel e retornar a informação sobre um cruzamento, seja para compra ou venda. Com base nessa informação de sinal, ela será encaminhada para a função transaction(), que definirá as posições de compra ou venda. Depois, chamamos a função setTPSL(), que serve para definir os preços de take profit e stop loss.Se o equity não atender ao requisito mínimo, um alerta será exibido e o EA será encerrado. void OnTick() {    if (checkMinEquity()){              int sinal = -1;       bool novaCandle = NewCandle(Period(), Symbol());              sinal = getSignal(novaCandle);       transaction(novaCandle, sinal);       setTPSL();                  }else{       // Parar a operação, pois o equity não é suficiente       Print("EA será encerrado pois o equity é insuficiente");    } } A função para setTPSL() void setTPSL(){    int   ordemTotal = 0;    string   strMN = "", par = "";    double sl = 0.0, tp = 0.0;       par = Symbol();       ordemTotal = OrdersTotal();    for (int i=ordemTotal-1; i>=0; i--){       bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);       strMN = IntegerToString(OrderMagicNumber());       if (StringFind(strMN, IntegerToString(numeroMagico), 0) == 0 && StringFind(OrderSymbol(), par, 0) == 0 ){          if (OrderType() == OP_BUY && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){             if (takeProfit > 0) {                tp = OrderOpenPrice() + (takeProfit * meuPonto);             }else{                tp = OrderOpenPrice();             }             if (stopLoss > 0) {                sl = OrderOpenPrice() - (stopLoss * meuPonto);             }else{                sl = OrderStopLoss();             }             if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){                if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrBlue)){                   Print ("Modificação da Ordem Bem Sucedida");                }             }          }          if (OrderType() == OP_SELL && (OrderTakeProfit() == 0 || OrderStopLoss() == 0) ){             if (takeProfit > 0) {                tp = OrderOpenPrice() - (takeProfit * meuPonto);             }else{                tp = OrderOpenPrice();             }             if (stopLoss > 0) {                sl = OrderOpenPrice() + (stopLoss * meuPonto);             }else{                sl = OrderStopLoss();             }             if (OrderTakeProfit() != tp || OrderStopLoss() != sl ){                if (OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0, clrRed)){                   Print ("Modificação da Ordem Bem Sucedida");                }             }          }       }// fim do if número mágico && par           }// fim do for } Para educação e compartilhamento, junte-se ao nosso grupo no Telegram t.me/codeMQL Se você está procurando um App para apoiar suas operações, baixe nosso aplicativo SignalForex na Play Store https://play.google.com/store/apps/details?id=com.autobotfx.signalforex

2021.03.30
EA Adaptativo e Inteligente: Conheça o Sistema de Deep Learning para MetaTrader 4
MetaTrader4
EA Adaptativo e Inteligente: Conheça o Sistema de Deep Learning para MetaTrader 4

Olá, traders! Hoje quero compartilhar com vocês uma novidade que pode revolucionar a forma como operamos no mercado. Estou falando do meu Expert Advisor adaptativo, que desenvolvi com base em Deep Learning. A ideia surgiu após criar um EA que negocia padrões estáticos, o The Unreal Engine. Se você ainda não conhecia, dê uma olhada aqui. Enfrentei algumas limitações ao testar esse EA de aprendizado profundo, principalmente devido ao meu computador, que é um dual core com apenas 4 GB de RAM. Para realizar testes mais extensos, um supercomputador é praticamente essencial, ou o processo pode demorar bastante. O nome do meu EA é The Enchantress, e ele é projetado para coletar cada padrão que aparece no mercado, abrindo ordens virtuais com stop loss e take profit. Esse EA tem a capacidade de detectar os melhores padrões do mercado para abrir uma operação real. Vale lembrar que, por se tratar de um sistema de deep learning, ele precisará de um tempo de adaptação, geralmente de 3 a 5 meses, antes de começar a abrir operações reais. Antes de operar em uma conta real, recomendo que você teste no estratégia tester do MetaTrader. E se você testar esse EA, por favor, compartilhe seus resultados conosco! Você pode fazer isso no link aqui. Se você quer acompanhar mais novidades, confira o nosso canal aqui. Feliz testes a todos! E uma dica: experimente testar em pares de 5 dígitos e no menor timeframe (H1).

2021.03.13
Como Criar um EA Simples Usando o Indicador DeMarker no MetaTrader 4
MetaTrader4
Como Criar um EA Simples Usando o Indicador DeMarker no MetaTrader 4

Olá, trader! Hoje quero compartilhar uma experiência que tive quando comecei a explorar o uso de Expert Advisors (EAs) no meu trading. Este é um dos EAs mais simples que já utilizei, e espero que você possa aproveitar essa dica. Após ler, não esqueça de deixar sua avaliação! Este EA é projetado para operar em um único par de moedas. As configurações completas, como período, lotes, stop loss e take profit, estão disponíveis no menu de propriedades. extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Selecionar o Período extern int period = 8;// Período DeMarker extern double lt = 0.01;// Lotes extern int sl = 100;// Stop Loss extern int tp = 100;// Take Profit extern double OB = 0.7;// Sobrevendido extern double OS = 0.3;// Sobrecomprado extern bool OPENBAR = false;// Operar no preço de abertura de nova barra Aqui está o segredo: eu divido as variáveis em três partes: Dados | Período Ordens Pares //+------------------------------------------------------------------+ //-- período | indicador double dmrk[5]; int signal = -1;//-- 0.compra 1.venda int hold = 0; //-- ordens int ticket = 0; double lot = 0.0; int typ = -1; //-- pares datetime t1 = 0; bool newbar = false; bool entry = false; //+------------------------------------------------------------------+ Na função OnInit(), inicializo o array do indicador DeMarker e verifico o tamanho mínimo de lotes que o corretor exige para operar. //+------------------------------------------------------------------+ //|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ void OnInit() &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;ArrayInitialize(dmrk,0.0); &nbsp;&nbsp;&nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(lt < test_lot) lt = test_lot; &nbsp;&nbsp;} Na função OnTick(), realizamos o cálculo do indicador e determinamos os sinais de compra e venda. //--------------------------------------------------------------------------- &nbsp;&nbsp; signal = -1; //--------------------------------------------------------------------------- //---cálculo &nbsp;&nbsp; for(int i = 0; i < ArraySize(dmrk); i++) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dmrk[i] = iDeMarker(Symbol(), TF, period, i); &nbsp;&nbsp;&nbsp;&nbsp; } //--- &nbsp;&nbsp; if(dmrk[1] > OB) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hold = 1;//definir &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[1] < OS) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hold = -1;//definir &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hold = 0;//resetar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; if(hold == 1) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[0] < OB && dmrk[1] > OB) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = OP_SELL; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp; if(hold == -1) &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dmrk[0] > OS && dmrk[1] < OS) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = OP_BUY; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } Para abrir um sinal de compra ou venda... //--------------------------------------------------------------------------- &nbsp;&nbsp; if(signal != -1) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(newbar == true) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(entry == false)//portão aberto &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entry = true;//definir &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//--- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(signal == OP_BUY) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, (int)((Ask-Bid)/Point), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl > 0?Bid-sl*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp > 0?Bid+tp*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EAName+":sinal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EANumber, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clrBlue); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //hold =0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//resetar &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(signal == OP_SELL) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, (int)((Ask-Bid)/Point), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sl > 0?Ask+sl*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp > 0?Ask-tp*Point:0.0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EAName+":sinal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EANumber, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clrRed); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; signal = -1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //hold =0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//resetar sinal &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } Agora, para o fechamento... &nbsp;&nbsp; if(entry == true) // fechamento &nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OrderSelect(ticket, SELECT_BY_TICKET)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(OrderCloseTime() == 0)//-- ordem ativa &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;todo condição para fechar&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //entry = false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(OrderCloseTime() != 0)//--&nbsp;&nbsp;fechar por 1. manual 2. sl/tp 3. ea &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; entry = false;//resetar entrada &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp; } Se você está começando a explorar o mundo dos EAs, essa é uma ótima oportunidade para entender como os indicadores podem ser usados para automatizar suas operações. Espero que tenha gostado da dica e que ela possa te ajudar em suas negociações!

2020.12.17
Exemplo de Expert Advisor: Criando um Arquivo CSV no MetaTrader 4
MetaTrader4
Exemplo de Expert Advisor: Criando um Arquivo CSV no MetaTrader 4

Olá, pessoal! Eu sou o Lucas e achei que poderia contribuir com algo para esta comunidade incrível da qual aprendi tanto, lendo artigos informativos e muito mais. Sou investidor no mercado de Forex e ações, e estou desenvolvendo Expert Advisors para o meu próprio trading. Então, aqui está a minha contribuição, espero que alguns de vocês possam aproveitar este expert! Este é um exemplo de como você pode escrever os dados das ordens em um arquivo CSV, que você pode estudar e usar em suas análises posteriormente. Este expert não deve ser usado para operar (na sua forma atual); ele serve apenas como uma demonstração de como você pode implementar e usar essa função em seu próprio expert. Fique à vontade para continuar construindo e modificando este expert com sua própria estratégia. Este expert irá abrir operações na direção selecionada. As ordens são fechadas virtualmente através das configurações de TP/SL no menu. Se a opção 'WriteCloseData' estiver ativada, um arquivo será criado onde os dados das ordens, como direção, ganho/perda, preço, entre outros, serão armazenados em um arquivo CSV no seu terminal. Ao testar este expert no testador de estratégias, você encontrará este arquivo em OpenDataFolder/tester/CSVexpert/CSVexample. O diretório CSVexpert será criado quando você começar os testes, e o arquivo que armazena todos os dados CSVexample será gerado automaticamente. Quando você implementar essa função em seu próprio expert ou continuar a desenvolver e rodá-lo em contas demo ou reais, você encontrará este arquivo criado em MQL4/Files/CSVexpert/CSVexample. Você pode renomear o diretório e o nome do arquivo como preferir, exceto pela extensão .csv, que deve permanecer inalterada. Lembre-se, mais uma vez, que este é apenas um exemplo de expert do que você pode fazer com isso e como usar essa função, pois não quero que você perca fundos achando que ele pode ser utilizado para trading neste momento!

2020.11.14
Primeiro Anterior 10 11 12 13 14 15 16 17 18 19 20 Próximo Último