Escrever um assessor eficaz - página 27

 
darirunu1 #:

Imagine o conselheiro que

Eu lhe disse há um ano que ainda está ganhando, se me permitem dizer 50% ao ano.

em carrapatos, você pode

faça a mesma coisa durante meses e não se preocupe.

Relaxe, tenha confiança e tenha um efeito tangível.

;)

 
darirunu1 #:

Esse sou eu))

norma

 
Renat Akhtyamov #:

norP

Por que isso acontece? Algo parece sempre aparecer no fórum e então as pessoas aparecem e o levam numa direção diferente?

 
Renat Akhtyamov #:

você pode fazer isso com os carrapatos.

Faça a mesma coisa durante meses e não se preocupe.

com calma, confiança e de forma tangível.

;)

Ainda não pensei nisso, meu Conselheiro Especialista está pendurado por um ano para verificar sua prontidão. No canil tem resistido a todas as tendências. É como se ele soubesse quando começar a negociar. O drawdown foi de 1,47%.

 
darirunu1 #:

Ainda não pensei sobre isso, há um ano que está pendurado para verificar sua santidade. Na libra, ela resistiu a todas as tendências. É como se soubesse de antemão quando começar a negociar. O drawdown foi de 1,47%.

Aumentar o lote em 10 vezes - o lucro aumenta em 10 vezes

 
a007 #:

Aumentar o lote em 10 vezes - o lucro aumenta em 10 vezes

Wababai, que garoto esperto)) Talvez haja outras opções?

 

Escrever um assessor eficaz - A ser continuado.

Então por onde começamos?

1. qual é a melhor alavancagem para uma EA. - acho que não mais de 100

2. Eu acho que a função mais importante para uma EA é muito. Esta é a função da qual obtemos nossos lucros.

3. ----

4. ----

etc. ----

Que outras funções a EA precisa ter para ser eficaz?

 
SanAlex # :

Escrevendo um conselheiro eficaz - Continuação.

e então por onde começamos?

1. qual alavancagem é melhor para um consultor. - Acho que não mais que 100

2. Uma função importante para um conselheiro - no meu entender, o lote. Desta função também recebemos lucro.

3. ----

4. ----

etc. ----

Que outras funções são necessárias para que um Expert Advisor seja eficaz?

Vou começar então - se você não se importa -

adicionei um aumento no lote na próxima posição (amarelo onde cavei e mudei)

 //+------------------------------------------------------------------+
//|                                                  MACD Sample.mq5 |
//|                   Copyright 2009-2017, MetaQuotes Software Corp. |
//|                                               http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright    "Copyright 2009-2017, MetaQuotes Software Corp."
#property link          " http://www.mql5.com "
#property version      "5.50"
#property description "It is important to make sure that the expert works with a normal"
#property description "chart and the user did not make any mistakes setting input"
#property description "variables (Lots, TakeProfit, TrailingStop) in our case,"
#property description "we check TakeProfit on a chart of more than 2*trend_period bars"

#define MACD_MAGIC 1234502
//---
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\AccountInfo.mqh>
//+------------------------------------------------------------------+
//| ENUM_LOT_RISK                                                    |
//+------------------------------------------------------------------+
enum LotMax
  {
   Lot= 0 ,   // Lots
   Lotx2= 1 , // Lots*2
  };
//---
input LotMax InpLotRisk       =Lotx2; // Lots,- Lots*2
input double InpLots          = 0.01 ;   // Lots
input int     InpMACDOpenLevel = 3 ;     // MACD open level (in pips)
input int     InpMACDCloseLevel= 2 ;     // MACD close level (in pips)
input int     InpMATrendPeriod = 26 ;     // MA trend period
//---
int ExtTimeOut= 10 ; // time out in seconds between trade operations
//+------------------------------------------------------------------+
//| MACD Sample expert class                                         |
//+------------------------------------------------------------------+
class CSampleExpert
  {
protected :
   double             m_adjusted_point;             // point value adjusted for 3 or 5 points
   CTrade            m_trade;                       // trading object
   CSymbolInfo       m_symbol;                     // symbol info object
   CPositionInfo     m_position;                   // trade position object
   CAccountInfo      m_account;                     // account info wrapper
   //--- indicators
   int                m_handle_macd;                 // MACD indicator handle
   int                m_handle_ema;                 // moving average indicator handle
   //--- indicator buffers
   double             m_buff_MACD_main[];           // MACD indicator main buffer
   double             m_buff_MACD_signal[];         // MACD indicator signal buffer
   double             m_buff_EMA[];                 // EMA indicator buffer
   //--- indicator data for processing
   double             m_macd_current;
   double             m_macd_previous;
   double             m_signal_current;
   double             m_signal_previous;
   double             m_ema_current;
   double             m_ema_previous;
   //---
   double             m_macd_open_level;
   double             m_macd_close_level;
   datetime           ExtPrevBars;                 // "0" -> D'1970.01.01 00:00';

public :
                     CSampleExpert( void );
                    ~CSampleExpert( void );
   bool               Init( void );
   void               Deinit( void );
   bool               Processing( void );
   double             OptimizedBuy( void );
   double             OptimizedSell( void );

protected :
   bool               InitIndicators( void );
   bool               LongOpened( void );
   bool               ShortOpened( void );
  };
//--- global expert
CSampleExpert ExtExpert;
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSampleExpert::CSampleExpert( void ) : m_adjusted_point( 0 ),
   m_handle_macd( INVALID_HANDLE ),
   m_handle_ema( INVALID_HANDLE ),
   m_macd_current( 0 ),
   m_macd_previous( 0 ),
   m_signal_current( 0 ),
   m_signal_previous( 0 ),
   m_ema_current( 0 ),
   m_ema_previous( 0 ),
   m_macd_open_level( 0 ),
   m_macd_close_level( 0 ),
   ExtPrevBars( 0 )
  {
   ArraySetAsSeries (m_buff_MACD_main, true );
   ArraySetAsSeries (m_buff_MACD_signal, true );
   ArraySetAsSeries (m_buff_EMA, true );
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CSampleExpert::~CSampleExpert( void )
  {
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double CSampleExpert::OptimizedBuy( void )
  {
   double PROFIT_BUY= 0.00 ;
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of open positions
     {
       string    position_GetSymbol= PositionGetSymbol (i); // GetSymbol позиции
       if (position_GetSymbol==m_symbol.Name())
        {
         if (m_position.PositionType()== POSITION_TYPE_BUY )
           {
            PROFIT_BUY=PROFIT_BUY+m_position.Select( Symbol ());
           }
        }
     }
   double Lots=InpLots;
   double ab=PROFIT_BUY;
   switch (InpLotRisk)
     {
       case Lot:
         Lots=InpLots;
         break ;
       case Lotx2:
         if (ab> 0 && ab<= 1 )
            Lots=InpLots* 2 ;
         if (ab> 1 && ab<= 2 )
            Lots=InpLots* 4 ;
         if (ab> 2 && ab<= 3 )
            Lots=InpLots* 8 ;
         if (ab> 3 )
            Lots=InpLots* 16 ;
         break ;
     }
   return (Lots);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double CSampleExpert::OptimizedSell( void )
  {
   double PROFIT_SELL= 0.00 ;
   for ( int i= PositionsTotal ()- 1 ; i>= 0 ; i--) // returns the number of open positions
     {
       string    position_GetSymbol= PositionGetSymbol (i); // GetSymbol позиции
       if (position_GetSymbol==m_symbol.Name())
        {
         if (m_position.PositionType()== POSITION_TYPE_SELL )
           {
            PROFIT_SELL=PROFIT_SELL+m_position.Select( Symbol ());
           }
        }
     }
   double Lots=InpLots;
   double ab=PROFIT_SELL;
   switch (InpLotRisk)
     {
       case Lot:
         Lots=InpLots;
         break ;
       case Lotx2:
         if (ab> 0 && ab<= 1 )
            Lots=InpLots* 2 ;
         if (ab> 1 && ab<= 2 )
            Lots=InpLots* 4 ;
         if (ab> 2 && ab<= 3 )
            Lots=InpLots* 8 ;
         if (ab> 3 )
            Lots=InpLots* 16 ;
         break ;
     }
   return (Lots);
  }
//+------------------------------------------------------------------+
//| Initialization and checking for input parameters                 |
//+------------------------------------------------------------------+
bool CSampleExpert::Init( void )
  {
//--- initialize common information
   m_symbol.Name( Symbol ());                   // symbol
   m_trade.SetExpertMagicNumber(MACD_MAGIC); // magic
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol( Symbol ());
//--- tuning for 3 or 5 digits
   int digits_adjust= 1 ;
   if (m_symbol. Digits ()== 3 || m_symbol. Digits ()== 5 )
      digits_adjust= 10 ;
   m_adjusted_point=m_symbol. Point ()*digits_adjust;
//--- set default deviation for trading in adjusted points
   m_macd_open_level =InpMACDOpenLevel*m_adjusted_point;
   m_macd_close_level=InpMACDCloseLevel*m_adjusted_point;
//--- set default deviation for trading in adjusted points
   m_trade.SetDeviationInPoints( 3 *digits_adjust);
//---
   if (!InitIndicators())
       return ( false );
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Initialization of the indicators                                 |
//+------------------------------------------------------------------+
bool CSampleExpert::InitIndicators( void )
  {
//--- create MACD indicator
   if (m_handle_macd== INVALID_HANDLE )
       if ((m_handle_macd= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ))== INVALID_HANDLE )
        {
         printf ( "Error creating MACD indicator" );
         return ( false );
        }
//--- create EMA indicator and add it to collection
   if (m_handle_ema== INVALID_HANDLE )
       if ((m_handle_ema= iMA ( NULL , 0 ,InpMATrendPeriod, 0 , MODE_EMA , PRICE_CLOSE ))== INVALID_HANDLE )
        {
         printf ( "Error creating EMA indicator" );
         return ( false );
        }
//--- succeed
   return ( true );
  }
//+------------------------------------------------------------------+
//| Check for long position opening                                  |
//+------------------------------------------------------------------+
bool CSampleExpert::LongOpened( void )
  {
   bool res= false ;
//--- check for long position (BUY) possibility
   if (m_macd_current< 0 )
       if (m_macd_current>m_signal_current && m_macd_previous<m_signal_previous)
         if ( MathAbs (m_macd_current)>(m_macd_open_level) && m_ema_current>m_ema_previous)
           {
             double price=m_symbol.Ask();
             //--- check for free money
             if (m_account.FreeMarginCheck( Symbol (), ORDER_TYPE_BUY , OptimizedBuy() ,price)< 0.0 )
               printf ( "We have no money. Free Margin = %f" ,m_account.FreeMargin());
             else
              {
               //--- open position
               if (m_trade.PositionOpen( Symbol (), ORDER_TYPE_BUY , OptimizedBuy() ,price, 0.0 , 0.0 ))
                   printf ( "Position by %s to be opened" , Symbol ());
               else
                 {
                   printf ( "Error opening BUY position by %s : '%s'" , Symbol (),m_trade.ResultComment());
                   printf ( "Open parameters : price=%f" ,price);
                 }
              }
             //--- in any case we must exit from expert
            res= true ;
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| Check for short position opening                                 |
//+------------------------------------------------------------------+
bool CSampleExpert::ShortOpened( void )
  {
   bool res= false ;
//--- check for short position (SELL) possibility
   if (m_macd_current> 0 )
       if (m_macd_current<m_signal_current && m_macd_previous>m_signal_previous)
         if (m_macd_current>(m_macd_open_level) && m_ema_current<m_ema_previous)
           {
             double price=m_symbol.Bid();
             //--- check for free money
             if (m_account.FreeMarginCheck( Symbol (), ORDER_TYPE_SELL , OptimizedSell() ,price)< 0.0 )
               printf ( "We have no money. Free Margin = %f" ,m_account.FreeMargin());
             else
              {
               //--- open position
               if (m_trade.PositionOpen( Symbol (), ORDER_TYPE_SELL , OptimizedSell() ,price, 0.0 , 0.0 ))
                   printf ( "Position by %s to be opened" , Symbol ());
               else
                 {
                   printf ( "Error opening SELL position by %s : '%s'" , Symbol (),m_trade.ResultComment());
                   printf ( "Open parameters : price=%f" ,price);
                 }
              }
             //--- in any case we must exit from expert
            res= true ;
           }
//--- result
   return (res);
  }
//+------------------------------------------------------------------+
//| main function returns true if any position processed             |
//+------------------------------------------------------------------+
bool CSampleExpert::Processing( void )
  {
//--- we work only at the time of the birth of new bar
   datetime time_0= iTime (m_symbol.Name(), Period (), 0 );
   if (time_0==ExtPrevBars)
       return ( false );
   ExtPrevBars=time_0;
   if (!m_symbol.RefreshRates())
     {
      ExtPrevBars= 0 ;
       return ( false );
     }
//--- refresh indicators
   if ( BarsCalculated (m_handle_macd)< 2 || BarsCalculated (m_handle_ema)< 2 )
       return ( false );
   if ( CopyBuffer (m_handle_macd, 0 , 0 , 2 ,m_buff_MACD_main)  != 2 ||
       CopyBuffer (m_handle_macd, 1 , 0 , 2 ,m_buff_MACD_signal)!= 2 ||
       CopyBuffer (m_handle_ema, 0 , 0 , 2 ,m_buff_EMA)         != 2 )
     {
      ExtPrevBars= 0 ;
       return ( false );
     }
//   m_indicators.Refresh();
//--- to simplify the coding and speed up access
//--- data are put into internal variables
   m_macd_current   =m_buff_MACD_main[ 0 ];
   m_macd_previous  =m_buff_MACD_main[ 1 ];
   m_signal_current =m_buff_MACD_signal[ 0 ];
   m_signal_previous=m_buff_MACD_signal[ 1 ];
   m_ema_current    =m_buff_EMA[ 0 ];
   m_ema_previous   =m_buff_EMA[ 1 ];
//--- it is important to enter the market correctly,
//--- but it is more important to exit it correctly...
//--- first check if position exists - try to select it
//--- check for long position (BUY) possibility
   if (LongOpened())
       return ( true );
//--- check for short position (SELL) possibility
   if (ShortOpened())
       return ( true );
//--- exit without position processing
   return ( false );
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
//--- create all necessary objects
   if (!ExtExpert.Init())
       return ( INIT_FAILED );
//--- secceed
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert new tick handling function                                |
//+------------------------------------------------------------------+
void OnTick ( void )
  {
   static datetime limit_time= 0 ; // last trade processing time + timeout
//--- don't process if timeout
   if ( TimeCurrent ()>=limit_time)
     {
       //--- check for data
       if ( Bars ( Symbol (), Period ())> 2 *InpMATrendPeriod)
        {
         //--- change limit time by timeout in seconds if processed
         if (ExtExpert.Processing())
            limit_time= TimeCurrent ()+ExtTimeOut;
        }
     }
  }
//+------------------------------------------------------------------+
Arquivos anexados:
 
Georgiy Merts #:

Tudo depende da ordem na qual o máximo é definido. Um fractal clássico é cinco barras, com a do meio acima (abaixo) as outras. Mas, nesta foto os altos não são desenhados de acordo com os fractais.

Agora vou pegar a tabela atual com os fractais clássicos e traçar uma linha. Aguarde um momento.

Aqui. O gráfico atual do Eurodollar, observe. Se marcarmos altos e baixos com fractais, há duas linhas de tendência no gráfico, ambas já foram quebradas; o momento de sua construção é marcado com setas. No momento da penetração, as linhas se rompem. Uma terceira linha descendente será traçada através dos fractais das 8 horas e 18 horas de ontem. Deve ser sorteado assim que o preço cair abaixo do mínimo de 15 horas.


Neste exemplo, tanto a linha de tendência vermelha quanto a azul foram desenhadas quando o preço está no nível +/- o nível de ruptura desta mesma linha de tendência. Quanto (em pips ou % de onda) pode ser ganho com isso?

 
SanAlex #:

Vou começar então - se você não se importa -

acrescentou muito aumento para a próxima posição (em amarelo onde eu cavei e mudei)

Isto é sem resultado final

Tela 2021-11-21 072405

Abrir e multiplicar lotes é bom, é claro, precisamos coletar lucros de alguma forma.

1. precisamos adicionar fechamento, = por exemplo, com a compra de lucro fechado - e vender, por exemplo, deixá-los pendurados até a obtenção de lucro.