Escribir un asesor eficaz - página 27

 
darirunu1 #:

Imagina al asesor que

Ya te dije hace un año que sigue ganando, si me permites, un 50% al año.

en las garrapatas puede

hacer lo mismo durante meses y no sudar.

Relájate, ten confianza y consigue un efecto tangible.

;)

 
darirunu1 #:

Ese soy yo))

norma

 
Renat Akhtyamov #:

norP

¿Por qué? Parece que siempre surge algo en el foro y luego llega gente que lo lleva en otra dirección...

 
Renat Akhtyamov #:

puedes hacerlo en las garrapatas.

Haz lo mismo durante meses y no te preocupes.

con calma, con confianza y de forma tangible.

;)

Todavía no me lo he planteado, mi Expert Advisor está colgado desde hace un año para comprobar su precocidad. En cuanto a la libra, ha resistido todas las tendencias. Es como si supiera cuándo empezar a operar. La reducción fue del 1,47%.

 
darirunu1 #:

Todavía no lo he pensado, lleva un año colgado para comprobar su piojosidad. En cuanto a la libra, ha resistido todas las tendencias. Es como si supiera de antemano cuándo empezar a operar. La reducción fue del 1,47%.

Aumentar el lote 10 veces: el beneficio se multiplica por 10

 
a007 #:

Aumentar el lote en 10 veces - el beneficio aumenta en 10 veces

Wababai, qué chico tan inteligente)) ¿Tal vez haya otras opciones?

 

Escribir un asesor eficaz - Continuará.

¿Por dónde empezamos?

1. ¿Cuál es el mejor apalancamiento para un EA? - creo que no más de 100

2. Creo que la función más importante para un EA es un lote. Esta es la función de la que derivamos nuestros beneficios.

3. ----

4. ----

etc. ----

¿qué otras funciones necesita la EA para ser eficaz?

 
SanAlex # :

Redacción de un asesor eficaz - Continuará.

y entonces, ¿por dónde empezamos?

1. qué apalancamiento es mejor para un asesor. - Creo que no mas de 100

2. Una función importante para un asesor: según tengo entendido, mucho. De esta función también recibimos ganancias.

3. ----

4. ----

etc. ----

¿Qué otras funciones se necesitan para que un Asesor Experto sea efectivo?

Empiezo entonces -si no te importa-

agregó un aumento en el lote en la siguiente posición (amarillo donde excavé y cambié)

 //+------------------------------------------------------------------+
//|                                                  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;
        }
     }
  }
//+------------------------------------------------------------------+
Archivos adjuntos:
 
Georgiy Merts #:

Todo depende del orden en que se defina el máximo. Un fractal clásico tiene cinco barras, con la del medio por encima (debajo) de las demás. Pero, en esta imagen los máximos no se dibujan según los fractales.

Ahora tomaré el gráfico actual con los fractales clásicos y dibujaré una línea. Espera un momento.

Aquí. El gráfico actual del eurodólar, mira. Si marcamos los máximos y los mínimos con fractales, hay dos líneas de tendencia en el gráfico, ambas ya se han roto; el momento de su construcción está marcado con flechas. En el momento de la penetración las líneas se rompen. Una tercera línea descendente pasará por los fractales de las 8 y las 18 horas de ayer. Debe ser dibujado tan pronto como el precio caiga por debajo del mínimo de 15 horas.


En este ejemplo, las líneas de tendencia roja y azul se han dibujado cuando el precio está en el nivel igual a +/- el nivel de ruptura de esta misma línea de tendencia. ¿Cuánto (en pips o % de onda) se puede ganar con esto?

 
SanAlex #:

Empezaré entonces - si no te importa -

añadí un aumento del lote en la siguiente posición (en amarillo donde cavé y cambié)

Esto es sin resultado de cierre

Captura de pantalla 2021-11-21 072405

Abrir y multiplicar lotes es, por supuesto, bueno, hay que recoger beneficios de alguna manera.

1. Tenemos que añadir el cierre, = por ejemplo, con la compra de beneficio cerrado - y la venta, por ejemplo, dejar que cuelgan hasta que un beneficio viene.

Razón de la queja: