J'ai besoin d'aide pour un code - page 2

 
deVries:


Pour moi, c'est toujours comme si tu ne connaissais rien au codage.

et tu ne fais rien pour apprendre à coder

Qu'est-ce que tu as fait pour essayer de faire ça ?

Si tu veux de l'aide, montre ce que tu as fait

Il n'y a toujours rien à faire pour t'aider...

Oui. C'est totalement nouveau pour moi. Y a-t-il un livre que vous pouvez me conseiller ?
 
diamstar:
Oui. C'est totalement nouveau pour moi. Y a-t-il un livre auquel vous pouvez me renvoyer ?

Livre en un seul fichier
Téléchargez-le - 2 Mb
 
deVries:

Livre en un seul fichier
Téléchargez-le - 2 Mb
Merci. J'écrirai quelque chose après avoir terminé le livre, même s'il est mauvais.
 
diamstar :
30 min


Voici quelque chose qui peut vous aider à démarrer.

Et à propos de cette ancienne chose chinoise, à moins que vous ne parliez déjà le chinois avec mql. C'est plus facile, vous pouvez obtenir plus d'aide et si jamais vous avez une idée brillante, mql vous aidera à gagner beaucoup d'argent. C'est aussi amusant.

Alors on y va :

 //+------------------------------------------------------------------+
//|                                               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);
  }
//+------------------------------------------------------------------+


J'ai ajouté quelques morceaux de code pour le rendre adapté au commerce de nouvelles et à la saisie manuelle . Cela conviendra probablement à votre objectif.

Cette EA était à l'origine destinée à échanger les actualités afin que vous saisissiez le jour de l'actualité du mois, l'heure et la minute, que vous preniez des bénéfices en pips, l'expiration en minute - combien de minutes après l'actualité pour fermer les commandes en attente si le mouvement ne s'est pas produit , BEPips - si une commande est déclenchée et devait atteindre le seuil de rentabilité, après combien de pips de profit. Si If trailing stop = 0 il n'y aura pas de trailing. Si vous définissez la traînée, définissez le nombre de pips pour rester à l'écart du prix en cas de profit.

Pour le trading manuel, vous pouvez laisser le DayOfNews à zéro afin qu'EA trade tous les jours à l'heure et à la minute spécifiées ou vous pouvez définir manuellement le jour chaque jour lorsque vous tradez.

Vous devez également définir StopLoss sur le nombre de pips (et non de points) que vous désirez.

Réglez la SteDistance à n'importe quelle distance du prix à l'heure spécifiée où vous voulez les commandes en attente (30 pips, je crois que vous avez dit).

Définissez Expiration en minutes sur le nombre de minutes pendant lesquelles vous souhaitez que les commandes soient actives avant qu'EA ne les supprime si elles ne sont pas remplies.

Quoi qu'il en soit, jetez un œil au code et si vous avez des questions, postez-les ici ou envoyez-moi un MP.

 
diamstar:
Merci. J'écrirai quelque chose après avoir terminé le livre, même s'il est mauvais.


C'est ça l'esprit :)

Si vous essayez, vous trouverez des gens qui vous aideront.

 
diamstar:
Je vous remercie. J'écrirai quelque chose après avoir terminé le livre, même s'il est mauvais.


diamstar, apprendre est amusant si vous avez la bonne aide. Ne tombez pas dans le panneau et ne croyez pas que si cela ressemble à du chinois ancien au début, cela n'en vaut pas la peine.

Ne vous laissez pas non plus décourager par ceux qui ne veulent pas vraiment vous aider. Il y a beaucoup d'aide disponible, il suffit de la trouver.

Voici un conseil pour vous si vous voulez apprendre.. :

Restez en contact avec des personnes qui sont prêtes à partager (connaissances, ressources, code, etc.). Vous aurez besoin d'eux.

2. Lisez la documentation et posez des questions afin de bien comprendre ce qu'il faut lire. Vous n'avez pas besoin de tout mémoriser, mais simplement de savoir ce qui est disponible et où le trouver.

Ne vous surmenez pas en essayant d'écrire vous-même chaque partie du code. C'est comme réinventer la roue.

Mettez la main sur tous les EA gratuits que vous pouvez télécharger et parcourez le code. Comprenez comment il est structuré, comprenez ce que fait chaque fonction et étudiez ensuite comment il le fait.

5. UTILISEZ le code et les fonctions qui fonctionnent et que vous aimez dans votre code, vous pouvez copier le code dans n'importe quel éditeur de texte ou sous forme de scripts dans MetaEditor et le sauvegarder sous un nom significatif pour l'avenir ou simplement prendre des notes sur ce que vous aimez dans tel ou tel EA afin de pouvoir le retrouver quand vous en aurez besoin.

J'espère que cela vous aidera.

Bonne chance

 
thrdel:


Voici quelque chose qui pourrait vous aider à démarrer.

Et à propos du chinois ancien, à moins que vous ne parliez déjà chinois, restez avec mql. C'est plus facile, vous pouvez obtenir plus d'aide et si vous avez une idée brillante, mql vous aidera à gagner beaucoup d'argent. C'est aussi amusant.

Alors, c'est parti :


J'ai ajouté quelques morceaux de code pour le rendre adapté au trading de nouvelles et à la saisie manuelle. Il conviendra probablement à votre objectif.

Cet EA a été conçu à l'origine pour trader les nouvelles, donc vous entrez le jour du mois, l'heure et la minute, le take profit en pips, l'expiration en minutes - combien de minutes après les nouvelles pour fermer les ordres en attente si le mouvement ne s'est pas produit, BEPips - si un ordre est déclenché et qu'il devait bouger pour atteindre le seuil de rentabilité, après combien de pips de profit. Si le trailing stop = 0, il n'y aura pas de trailing. Si vous définissez le trailing, définissez le nombre de pips à éloigner du prix si vous êtes en profit.

Pour le trading manuel, vous pouvez laisser le DayOfNews à zéro pour que l'EA trade chaque jour à l'heure et à la minute spécifiées ou vous pouvez définir manuellement le jour chaque jour lorsque vous tradez.

Vous devez également régler le StopLoss sur le nombre de pips (et non de points) que vous souhaitez.

Définissez la SteDistance à la distance du prix à l'heure spécifiée que vous souhaitez pour les ordres en attente (30 pips je crois que vous avez dit).

Définissez Expiration en minutes sur le nombre de minutes pendant lesquelles vous souhaitez que les ordres soient actifs avant que l'EA ne les supprime s'ils ne sont pas exécutés.

Quoi qu'il en soit, jetez un coup d'oeil au code et si vous avez des questions, posez-les ici ou envoyez-moi un message.


Je pense que le PO est un programmeur débutant. Je doute qu'il/elle comprenne votre code.

Auriez-vous été capable de comprendre votre code lorsque vous avez commencé à apprendre ?

 
GumRai:


Je pense que le PO est un programmeur débutant. Je doute qu'il/elle comprenne votre code.

Auriez-vous été capable de comprendre votre code lorsque vous avez commencé à apprendre ?

Je vous suis vraiment reconnaissant. Je vais essayer le code et continuer à lire le livre pour en comprendre chaque partie. Je vous tiendrai au courant de tout problème que je rencontrerai. Merci
 
GumRai:


Je pense que le PO est un programmeur débutant. Je doute qu'il/elle comprenne votre code.

Auriez-vous été capable de comprendre votre code lorsque vous avez commencé à apprendre ?


Eh bien GumRay, le code est là, la documentation pour mql est disponible, le code a quelques explications et nous sommes ici pour aider. Comme je l'ai dit, "si vous avez des questions, posez-les ici ou envoyez-moi un message".

Cela ne signifie pas que j'ai toutes les réponses, juste que je suis prêt à aider si diamstar est prêt à apprendre.

"Je doute qu'il/elle comprenne votre code" pour le moment ou pas entièrement. De plus, le code peut ne pas correspondre à 100% à ce qu'il/elle recherche (j'ai fait de mon mieux compte tenu des informations disponibles) mais c'est un bon début.

Vous savez combien il est plus facile d'apprendre avec des exemples pratiques, n'est-ce pas ?

Je suis conscient qu'il y a beaucoup d'informations dans cette EA pour un débutant et que de nombreuses questions peuvent être posées à ce sujet, mais c'est pourquoi nous sommes ici, n'est-ce pas ?

Bien sûr, je n'étais pas capable de comprendre tout cela lorsque j'apprenais (j'apprends encore), du moins pas du premier coup, mais diamstar a réussi à trouver le bon forum pour demander de l'aide et semble déterminé à apprendre.

Souhaitons-lui bonne chance et aidons-le si nous le pouvons.

 
thrdel:


Eh bien GumRay, le code est là, la documentation pour mql est disponible, le code a quelques explications et nous sommes ici pour aider. Comme je l'ai dit, "si vous avez des questions, posez-les ici ou envoyez-moi un message".

Cela ne signifie pas que j'ai toutes les réponses, juste que je suis prêt à aider si diamstar est prêt à apprendre.

"Je doute qu'il/elle comprenne votre code" pour le moment ou pas entièrement. De plus, le code peut ne pas correspondre à 100% à ce qu'il/elle recherche (j'ai fait de mon mieux compte tenu des informations disponibles) mais c'est un bon début.

Vous savez combien il est plus facile d'apprendre avec des exemples pratiques, n'est-ce pas ?

Je suis conscient qu'il y a beaucoup d'informations dans cette EA pour un débutant et que de nombreuses questions peuvent être posées à ce sujet, mais c'est pourquoi nous sommes ici, n'est-ce pas ?

Bien sûr, je n'étais pas capable de comprendre tout cela lorsque j'apprenais (j'apprends encore), du moins pas du premier coup, mais diamstar a réussi à trouver le bon forum pour demander de l'aide et semble déterminé à apprendre.

Souhaitons-lui bonne chance et aidons-le si nous le pouvons.

J'apprécie vraiment toute l'aide apportée. Peu importe la complexité du code, c'est une aide précieuse que je n'aurais peut-être pas trouvée en quelques mois et les livres que je lis rendent la compréhension relativement facile. Il faut apprendre à lire et à comprendre avant d'écrire quelque chose de significatif.