Especialistas: Simple MA Expert Advisor

 

Simple MA Expert Advisor:

Algo para quem quer experimentar o Testador de Estratégia e não têm qualquer EA.

EA realmente simples para quem precisa de um exemplo e para quem está à procura de algo para testar no Testador de Estratégias.

O EA é baseado em duas linhas MA. Se uma linha está cruzando outra, então entra vendido ou comprado.

Simple MA Expert Advisor

Autor: Karlis Balcers

 

No testador, ele apresenta um erro:

2010.04.28 06:27:44 Core 1 Erro de criação de processo [2]

 
1Serg:

No testador, ele apresenta um erro:

2010.04.28 06:27:44 Core 1 Erro de criação de processo [2]

Atualize para a versão mais recente e verifique se há o arquivo metatester.exe na raiz do diretório do programa.
 
Renat:
Atualize para a versão mais recente e, em seguida, verifique se há o arquivo metatester.exe na raiz do diretório do programa.

Obrigado, ele funciona.

O otimizador e a visualização estão ausentes.

 
1Serg:

O otimizador e a visualização estão faltando.

O otimizador está lá - basta aumentar a altura da janela do testador.

A visualização ficará para depois.

 
Renat:

O otimizador está lá - basta aumentar a altura da janela do testador.

A visualização virá mais tarde.

Legal!

 

Saudações,

Sr. / Sra. tsaktuo, estudei seu código K_eSimpleMA e ele foi muito útil para entender como é a estrutura de um EA, bem como conceitos como trabalhar com cruzamentos de SMA.

Agradeço imensamente por ter compartilhado esse artigo e agradeço muito.

Por outro lado, tenho algumas perguntas; ambas estão relacionadas à funçãoSymbolInfoTick :


O que o manual da MQL5 diz sobreSymbolInfoTick(Symbol(),tick) é que ela retorna os preços atuais de um símbolo especificado em uma variável do tipo MqlTick e também diz que a função retorna true se for bem-sucedida, caso contrário, retorna false.

De acordo com o que entendi acima, a mensagem ("Failed to get Symbol info!") é impressa se não houver um tick recebido. Isso está correto? Se não estiver correto, poderia me dizer do que se trata?

A outra pergunta é: O que acontece se a mensagem for impressa a cada tick?

Mais uma vez, obrigado.

 

Há:

trReq.sl=tick.ask-_Point*sl; // Nível de stop loss da ordem

trReq.tp=tick.ask+_Point*tp; // Nível de take profit da ordem

necessário:

trReq.sl=tick.bid-_Point*sl; // Nível de stop loss da ordem

trReq.tp=tick.bid+_Point*tp; // Nível de Take Profit da ordem

e altere para SELL adequadamente.

A compra é feita pelo preço de venda, mas é fechada pelo preço de compra.

Se você quiser limitar o lucro e a perda, por exemplo, a 20 pontos, então exatamente 20 pontos devem ser contados a partir do preço de compra (preço de fechamento) para BUY e do preço de venda (preço de fechamento) para SELL.

 

Você pode me dizer como adicionar a esse código para que ele seja negociado na tendência MACD sem paradas?

Longo: o MACD está crescendo com a MA rápida cruzando a MA lenta de cima para baixo

Croy Long: MACD está subindo rápido MA cruzou MA lento de baixo para cima

Curto: A MA rápida decrescente do MACD cruzou a MA lenta de cima para baixo

Curta: a MA rápida decrescente do MACD cruzou a MA lenta de baixo para cima

Tentei da seguinte forma:

//+------------------------------------------------------------------+
//|MACD&DEMA.mq5
//|Direitos autorais 2010, AM2 Group. |
//| http://www.am2_group.net
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, AM2 Group."
#property link      "http://www.am2_group.net"
#property version   "1.00"

//--- parâmetros de entrada
input int Periods=2;          // Média móvel do período 1
input int Shift=38;           // Média móvel do período 2
input int SL=30;              // Stop Loss
input int TP=100;             // Take Profit
input int MAGIC=3072010;      // Conselheiro de números mágicos

MqlTradeRequest trReq;
MqlTradeResult trRez;
int ma1Handle;
int ma2Handle;
int macdHandle;               // Identificador do indicador MACD
double ma1Val[];
double ma2Val[];
double macdVal[]; // matriz dinâmica para armazenar valores numéricos de MACD para barras diárias
  
int sl;
int tp;
//+------------------------------------------------------------------+
//| Função de inicialização de especialista|
//+------------------------------------------------------------------+
int OnInit()
{
   //Defina os valores padrão para todas as solicitações de novos pedidos
      trReq.action=TRADE_ACTION_DEAL;
      trReq.magic=MAGIC;
      trReq.symbol=Symbol();                 // Símbolo comercial
      trReq.volume=0.1;                      // Volume solicitado para uma transação em lotes
      trReq.deviation=1;                     // Desvio máximo possível do preço solicitado
      trReq.type_filling=ORDER_FILLING_AON;  // Tipo de execução da ordem
      trReq.type_time=ORDER_TIME_GTC;        // Tempo de execução da ordem
      trReq.comment="MA Sample";
   //end
  
   //Criar identificador para 2 indicadores MA
      ma1Handle=iMA(Symbol(),PERIOD_CURRENT,Periods,0,MODE_EMA,PRICE_CLOSE);
      ma2Handle=iMA(Symbol(),PERIOD_CURRENT,Periods+Shift,0,MODE_EMA,PRICE_CLOSE);
   //---Obter o identificador do indicador MACD
      macdHandle=iMACD(NULL,PERIOD_D1,15,26,1,PRICE_CLOSE);
   //end
  
   //os parâmetros de entrada são ReadOnly
      tp=0;
      sl=0;
   //end
  
   //Suplemento para conta com 5 casas decimais
      if(_Digits==5)
      {
         sl*=10;
         tp*=10;
      }
   //end
      
   return(0);
}
//+------------------------------------------------------------------+
//| Função de desinicialização de especialista|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Função de tique de especialista|
//+------------------------------------------------------------------+
void OnTick()
  {
  
   MqlTick tick; //variável para informações de ticks
   if(!SymbolInfoTick(Symbol(),tick))
   {
      Print("Failed to get Symbol info!");
      return;
   }
  
   //Copiar os valores mais recentes do indicador MA em um buffer
   int copied=CopyBuffer(ma1Handle,0,0,4,ma1Val);
   if(copied>0)
      copied=CopyBuffer(ma2Handle,0,0,4,ma2Val);
      copied=CopyBuffer(macdHandle,0,0,4,macdVal);
   if(copied>0)
   {
      //Se MAPeriod > MAPeriod + Shift -> BUY
      if(ma1Val[1]>ma2Val[1] && macdVal[1]>macdVal[2])
      {
         trReq.price=tick.bid;                   // SymbolInfoDouble(NULL,SYMBOL_BID);
         trReq.sl=tick.bid-_Point*sl;            // Nível de stop loss da ordem
         trReq.tp=tick.bid+_Point*tp;            // Nível de Take Profit da ordem
         trReq.type=ORDER_TYPE_BUY;              // Tipo de pedido
         OrderSend(trReq,trRez);
      }
      //Se MAPeriod < MAPeriod + Shift -> SELL
      else if(ma1Val[1]<ma2Val[1] && macdVal[1]<macdVal[2])
      {
         trReq.price=tick.ask;
         trReq.sl=tick.ask+_Point*sl;            // Nível de stop loss da ordem
         trReq.tp=tick.ask-_Point*tp;            // Nível de Take Profit da ordem
         trReq.type=ORDER_TYPE_SELL;             // Tipo de pedido
         OrderSend(trReq,trRez);
      }
   }

  }
//+------------------------------------------------------------------+
 
Automated-Trading:

EA MA simples:

Autor: outkast

Olá Outkast,

Sou novo em EAs, acabei de importar o esimpleMA do Sr. tsaktuo, já que realmente não entendo o código, vejo-o funcionando em meu gráfico, mas devo definir alguns dos valores de MA, não sei se preciso de ajuda, preciso de uma aula ou um livro.

 

Fiquei feliz ao encontrar seu exemplo de código, pois ele resolveu meu problema de armazenar a MA em buffer e fazê-la aparecer em um gráfico. Obrigado por publicá-lo.

A única pergunta que tenho é como ele toma a decisão de fechar a ordem aberta?

Obrigado pela ajuda