Necesito ayuda con un código - página 2

 
deVries:


Para mí sigue pareciendo que no sabes nada de codificación

y no haces nada para saber algo sobre codificación

¿Qué intentos has hecho para hacer esto?

Si usted quiere ayudar a mostrar su intento de hacer que

Todavía no hay nada para ayudarle con ...

Sí. Es totalmente nuevo para mí. ¿Hay algún libro al que pueda remitirme?
 
diamstar:
Sí. Es totalmente nuevo para mí. ¿Hay algún libro al que pueda remitirme?

Libro en un archivo
Descargarlo - 2 Mb
 
deVries:

Libro en un solo archivo
Descargarlo - 2 Mb
Gracias. Escribiré algo después de terminar el libro, por muy malo que sea.
 
diamstar :
30 minutos


Aquí hay algo que puede ayudarlo a comenzar.

Y sobre eso del chino antiguo, a menos que ya hables chino, quédate con mql. Es más fácil, puede obtener más ayuda y, si alguna vez tiene una idea brillante, mql lo ayudará a ganar mucho dinero. También es divertido.

Así que, aquí vamos :

 //+------------------------------------------------------------------+
//|                                               News_Trader_v1.mq4 |
//|                                            Copyright © 2013 _3DE |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013 _3DE"
#property link        "https://www.metaquotes.net"
extern string   Note1       = "Set parameters in Pips not points !" ;
extern string   Note2       = "Set day of the month for the news !" ;
extern string   Note3       = "Set to zero to trade every day    !" ;
extern string   Note4       = "Leave SetDistance to zero if trading news !" ;
extern int      TakeProfit  = 25 ; // Take profit pips
extern int      StopLoss    = 20 ; // Stop loss pips (manual trading)
extern int      SetDistance = 0 ; // Sistance for BuyStop and SellStop from price at news time
extern int      DayOfNews   = 0 ; // Day of the month of news
extern int      NewsHour    = 0 ; // Hour of news
extern int      NewsMin     = 0 ; // Minute of news
extern int      Expiration  = 5 ; // Expiration of pending orderes
extern int      BEPips      = 11 ; // Move to break even after BEPips
extern int      TrailingStop= 0 ; // What distance to keep trailing
extern int      Slip        = 5 ; // Slippage
extern int      MagicNumber= 2210 ; // Must be unique for every chart
extern double   Lots        = 0.1 ;
extern bool     WriteLog= false ; // Write a log file 
extern string   TradeLog    = "MI_Log" ;
input    string   EaComment   = "NewsTrader_EA" ;

double h,l,ho,lo,hso,lso,htp,ltp,sp,price;

string filename;
int pointMultiply= 10 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if ( Digits == 3 || Digits == 5 )
     {
      pointMultiply  *= 10 ;
      TakeProfit     *= 10 ;
      StopLoss       *= 10 ;
      BEPips         *= 10 ;
      TrailingStop   *= 10 ;
      SetDistance    *= 10 ;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   int OrdersCondition,minofday,minofnews;

   filename= Symbol ()+TradeLog+ "-" + Month ()+ "-" + Day ()+ ".txt" ;

   if (BEPips> 0 ) DoBE(BEPips);

   if (TrailingStop> 0 ) DoTrail();

   OrdersCondition=CheckOrdersCondition();
   if ( Day ()==DayOfNews || DayOfNews== 0 )
     {
      minofday= Hour ()* 60 + Minute ();
      minofnews=NewsHour* 60 +NewsMin;

       if ((minofday==minofnews- 2 ) || (minofday==minofnews- 1 ))
        {
         h= iHigh ( NULL , PERIOD_M1 , 0 );
         l= iLow ( NULL , PERIOD_M1 , 0 );
         for (i= 1 ;i<= 3 ;i++) if ( iHigh ( NULL , PERIOD_M1 ,i)>h) h= iHigh ( NULL , PERIOD_M1 ,i);
         for (i= 1 ;i<= 3 ;i++) if ( iLow ( NULL , PERIOD_M1 ,i)<l) l= iLow ( NULL , PERIOD_M1 ,i);
         sp= Ask - Bid ;
         ho=h+sp+(pointMultiply)* Point ;
         lo=l-(pointMultiply)* Point ;
         hso=h+sp;
         lso=l;
         htp=ho+TakeProfit* Point -sp;
         ltp=lo-TakeProfit* Point +sp;
         //---
         ho= NormalizeDouble (ho, Digits );
         lo= NormalizeDouble (lo, Digits );
         hso= NormalizeDouble (hso, Digits );
         lso= NormalizeDouble (lso, Digits );
         htp= NormalizeDouble (htp, Digits );
         ltp= NormalizeDouble (ltp, Digits );
         if (SetDistance!= 0 )
           {
            price=( Ask + Bid )/ 2 ;
            h=price+SetDistance* Point ;
            l=price-SetDistance* Point ;
            ho= NormalizeDouble (h+sp, Digits );
            lo= NormalizeDouble (l-sp, Digits );
            hso= NormalizeDouble (ho-StopLoss* Point , Digits );
            htp= NormalizeDouble (ho+TakeProfit* Point , Digits );
            lso= NormalizeDouble (lo+StopLoss* Point , Digits );
            ltp= NormalizeDouble (lo-TakeProfit* Point , Digits );
           }
         if (OrdersCondition== 0 )
           {
             if (WriteLog)Write( "Opening BuyStop & SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
            OpenSellStop();
           }

         if (OrdersCondition== 10 )
           {
             if (WriteLog)Write( "Opening SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenSellStop();
           }

         if (OrdersCondition== 1 )
           {
             if (WriteLog)Write( "Opening BuyStop , OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
           }
        }
     }
   if ((minofday>=minofnews) && (minofday<=minofnews+Expiration- 1 ))
     {

       if (OrdersCondition== 1001 )
        {
         if (WriteLog)Write( "Deleting SellStop Because of BuyStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }

       if (OrdersCondition== 110 )
        {
         if (WriteLog)Write( "Deleting BuyStop Because of SellStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }
     }

   if (minofday>=minofnews+Expiration)
     {
       if (OrdersCondition== 11 )
        {
         if (WriteLog)Write( "Deleting BuyStop and SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
         DeleteSellStop();
        }

       if ((OrdersCondition== 10 ) || (OrdersCondition== 110 ))
        {
         if (WriteLog)Write( "Deleting BuyStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }

       if ((OrdersCondition== 1 ) || (OrdersCondition== 1001 ))
        {
         if (WriteLog)Write( "Deleting SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }
     }

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| int CheckOrdersCondition()                                       |
//+------------------------------------------------------------------+

int CheckOrdersCondition()
  {
   int result= 0 ;
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if (( OrderType ()== OP_BUY ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1000 ;
        }
       if (( OrderType ()== OP_SELL ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 100 ;
        }
       if (( OrderType ()== OP_BUYSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 10 ;
        }
       if (( OrderType ()== OP_SELLSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1 ;
        }

     }
   return (result); // 0 means we have no trades
  }
// OrdersCondition Result Pattern
//    1    1    1    1
//    b    s    bs   ss
//  
//+------------------------------------------------------------------+
//|void OpenBuyStop()                                                |
//+------------------------------------------------------------------+

void OpenBuyStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , TimeCurrent ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_BUYSTOP ,Lots,ho,Slip,hso,htp,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenBuyStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenSellStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , CurTime ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_SELLSTOP ,Lots,lo,Slip,lso,ltp,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenSellStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoBE( int byPips)
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {
         if ( OrderType ()== OP_BUY ) if ( Bid - OrderOpenPrice ()>byPips* Point ) if ( OrderStopLoss ()< OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()+ Point , OrderTakeProfit (),Red);
           }
         if ( OrderType ()== OP_SELL ) if ( OrderOpenPrice ()- Ask >byPips* Point ) if ( OrderStopLoss ()> OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()- Point , OrderTakeProfit (),Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoTrail()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {

         if ( OrderType ()== OP_BUY )
           {
             if ( Bid - OrderOpenPrice ()> Point *TrailingStop)
              {
               if ( OrderStopLoss ()< Bid - Point *TrailingStop)
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Bid - Point *TrailingStop, OrderTakeProfit (), 0 ,Green);
                   return ;
                 }
              }
           }

         if ( OrderType ()== OP_SELL )
           {
             if (( OrderOpenPrice ()- Ask )>( Point *TrailingStop))
              {
               if (( OrderStopLoss ()>( Ask + Point *TrailingStop)) || ( OrderStopLoss ()== 0 ))
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Ask + Point *TrailingStop, OrderTakeProfit (), 0 ,Red);
                   return ;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteBuyStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_BUYSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteBuyStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteSellStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_SELLSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteSellStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Write( string str)
  {
   int handle;

   handle= FileOpen (filename, FILE_READ | FILE_WRITE | FILE_CSV , "/t" );
   FileSeek (handle, 0 , SEEK_END );
   FileWrite(handle,str+ " Time " + TimeToStr ( CurTime (), TIME_DATE | TIME_SECONDS ));
   FileClose (handle);
  }
//+------------------------------------------------------------------+


He agregado algunos fragmentos de código para que sea adecuado para el comercio de noticias y la entrada manual. Probablemente se adapte a su propósito.

Este EA originalmente estaba destinado a intercambiar las noticias, por lo que ingresa el día de la noticia del mes, la hora y el minuto, obtiene ganancias en pips, Caducidad en minutos: cuántos minutos después de la noticia para cerrar las órdenes pendientes si el movimiento no sucedió. , BEPips: si se activa una orden y no se pudo mover para alcanzar el punto de equilibrio, después de cuántos pips en ganancias. Si If trailing stop = 0 no habrá seguimiento. Si establece el seguimiento, establezca la cantidad de pips para mantenerse alejado del precio si obtiene ganancias.

Para el comercio manual, puede dejar DayOfNews en cero para que EA opere todos los días a la hora y minuto especificados o puede establecer manualmente el día todos los días cuando opere.

También debe configurar StopLoss en la cantidad de pips (no puntos) que desee.

Establezca SteDistance a cualquier distancia del precio en el momento especificado en el que desea las órdenes pendientes (30 pips, creo que dijo).

Establezca Caducidad en minutos en cuántos minutos desea que los pedidos estén activos antes de que EA los elimine si no se completan.

De todos modos, eche un vistazo al código y si tiene alguna pregunta, publíquela aquí o envíeme un mensaje privado.

 
diamstar:
Gracias. Escribiré algo después de terminar el libro, no importa lo malo que sea.


Ese es el espíritu :)

Si lo intentas, encontrarás gente que te ayudará

 
diamstar:
Gracias. Escribiré algo después de terminar el libro, no importa lo malo que sea.


diamstar, aprender es divertido si se recibe la ayuda adecuada . No caigas en la trampa y creas que si parece chino antiguo al principio no vale la pena.

Además, no te desanimes por los que no quieren ayudar realmente. Hay mucha ayuda disponible, sólo tienes que encontrarla.

Este es un consejo para ti si quieres aprender:

1.Mantén el contacto con personas que estén dispuestas a compartir (conocimientos, recursos, código, etc). Los necesitarás

2. Lee la documentación y haz preguntas para que tengas una buena comprensión de lo que debes leer. No necesitas memorizarlo todo, sólo saber qué hay y dónde encontrarlo.

3.No te mates tratando de escribir cada trozo de código tú mismo. Es como reinventar la rueda.

4.Consigue cualquier EA gratuito que puedas descargar y revisa el código. Entiende cómo está estructurado, entiende qué hace cada función y luego estudia cómo lo hace.

5. Utiliza el código y las funciones que funcionan y te gustan en tu código, puedes copiar el código en cualquier editor de texto o como scripts en MetaEditor y guardarlo con un nombre significativo para el futuro o simplemente hacer notas de lo que te gusta en qué EA para que puedas encontrarlo cuando lo necesites.

Espero que te sirva de ayuda.

Buena suerte

 
thrdel:


Aquí hay algo que puede ayudarte a empezar.

Y sobre lo del chino antiguo, a menos que ya hables chino quédate con mql. Es más fácil, puedes obtener más ayuda con él y si alguna vez tienes una idea brillante, mql te va a ayudar a hacer una tonelada de dinero. También es divertido.

Así que aquí vamos:


He añadido algunos trozos de código para que sea adecuado para el comercio de noticias y la entrada manual . Probablemente se adapte a su propósito.

Este EA fue originalmente pensado para el comercio de las noticias por lo que la entrada de las noticias día del mes, hora y minuto, tomar ganancias en pips, la expiración en minutos - cuántos minutos después de las noticias para cerrar las órdenes pendientes si el movimiento no se produjo, BEPips - si una orden se activa y el desperdicio de moverse para romper incluso, después de cuántos pips en el beneficio. Si el trailing stop = 0 no habrá trailing. Si usted establece el trailing, establezca el número de pips para mantenerse alejado del precio si está en beneficio.

Para operar manualmente, puede dejar el DayOfNews a cero para que el EA opere cada día a la hora y minuto especificados o puede establecer manualmente el día cada día cuando opere.

También necesita establecer el StopLoss a la cantidad de pips (no puntos) que desee.

Establezca la SteDistance a cualquier distancia del precio a la hora especificada que desee las órdenes pendientes (30 pips creo que dijo).

Establezca Expiración en minutos al número de minutos que desea que las órdenes estén activas antes de que el EA las elimine si no se cumplen.

De todos modos, echa un vistazo al código y si tienes alguna pregunta, publícala aquí o envíame un mensaje.


Creo que el OP es un programador novato. Dudo que entienda su código.

¿Habrías sido capaz de entender tu código cuando estabas empezando a aprender?

 
GumRai:


Creo que el OP es un programador novato. Dudo que él/ella entienda su código.

¿Habrías sido capaz de entender tu código cuando estabas empezando a aprender?

Estoy muy agradecido. Probaré el código y aún así leeré el libro para poder entenderlo todo. Os pondré al día de cualquier problema que me surja. Gracias
 
GumRai:


Creo que el OP es un programador novato. Dudo que entienda su código.

¿Habrías sido capaz de entender tu código cuando estabas empezando a aprender?


Bueno GumRay, el código está ahí, la documentación para mql está disponible, el código tiene algunas explicaciones y estamos aquí para ayudar. Como dije, "si tienes alguna pregunta, publícala aquí o envíame un mensaje".

Eso no significa que tenga todas las respuestas, sólo que estoy dispuesto a ayudar si diamstar está dispuesto a aprender.

"Dudo que entienda tu código" por ahora o no del todo . También el código puede no ser 100% lo que él / ella está buscando (Hice mi mejor esfuerzo dada la información disponible), pero es un buen comienzo.

Sabes que es mucho más fácil aprender con ejemplos prácticos, ¿verdad?

Soy consciente de que hay mucha info en ese EA para un novato y que puede haber muchas preguntas al respecto pero para eso estamos aquí, ¿no?

Seguro que yo no fui capaz de entender todo eso cuando estaba aprendiendo (todavía estoy aprendiendo) al menos no todo la primera vez pero diamstar consiguió encontrar el foro adecuado para pedir ayuda y parece decidido a aprender .

Le deseamos lo mejor y le ayudamos si podemos.

 
thrdel:


Bueno GumRay, el código está ahí, la documentación para mql está disponible, el código tiene algunas explicaciones y estamos aquí para ayudar. Como dije, "si tienes alguna pregunta, publícala aquí o envíame un mensaje".

Eso no significa que tenga todas las respuestas, sólo que estoy dispuesto a ayudar si diamstar está dispuesto a aprender.

"Dudo que él/ella entienda tu código" por ahora o no del todo. También el código puede no ser 100% lo que él / ella está buscando (hice lo mejor posible dada la información disponible), pero es un buen comienzo.

Sabes que es mucho más fácil aprender con ejemplos prácticos, ¿verdad?

Soy consciente de que hay mucha info en ese EA para un novato y que puede haber muchas preguntas al respecto pero para eso estamos aquí, ¿no?

Seguro que yo no fui capaz de entender todo eso cuando estaba aprendiendo (todavía estoy aprendiendo) al menos no todo la primera vez pero diamstar consiguió encontrar el foro adecuado para pedir ayuda y parece decidido a aprender .

Deseémosle lo mejor y ayudemos si podemos.

Realmente aprecio toda la ayuda prestada. No importa lo complejo que sea el código d, es una gran ayuda que podría no haber llegado en meses y los libros estoy leyendo hace d comprensión relativamente fácil. Se aprende a leer y entender antes de escribir algo significativo.