[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 126

 
hoz:


Non, pas sans arrêt. Je viens d'en poster un morceau. Voici ma fonction Breakeven :

La ligne montre clairement que si le stop calculé est égal à celui que vous avez déjà, il n'y aura pas de modification ! N'est-ce pas ? Donc le chèque était initialement là ? Mais l'erreur 1 apparaissait constamment, jusqu'à ce que j'aie introduit une autre condition dans le début avant la fonction de modification :

C'est pourquoi.... c'est ce que je veux comprendre. Je pense que j'ai tout décrit en détail.

Cette fonction est utilisée pour toutes les modifications, telles que le réglage du SL et du TP, le déplacement des positions et des ordres au niveau inférieur, le chalutage avec les tentatives et les contrôles d'erreurs.

Et le départ doit seulement prescrire lasélection des positions, les conditions et les mesures de précaution. Voici la fonction :

void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }
C'est un petit, mais c'est un grand !
 
borilunad:

Pour les nouveaux arrivants avant tout :

Navigateur de forum et réponses aux questions fréquemment posées. Lecture hautement recommandée !( 1 2 3 4 5 6 ) 51 18.02.2011 FAQ


Merci ! Je le lirai certainement.

Le monde n'est pas dépourvu de bonnes personnes.

 
hoz:

Donnez aux variables un nom "lisible".


Je ne veux pas modifier tous les ordres ouverts mais seulement le début et le dernier ordre T/P. Aidez-moi. Voici le code

 /* Так и до бана не далеко */
 

Bonjour à tous, Je prends des valeurs d'indicateurs dans une fenêtre séparée à partir d'une barre déjà formée (c'est-à-dire la barre 1) que je compte une fois sur la barre 0 sur son premier tick. Tout fonctionne rapidement et correctement.Mais si j'éteins l'ordinateur et après un certain temps pour le rallumer, les indicateurs continuent à fonctionner correctement, mais leurs valeurs au moment où l'ordinateur était éteint, il y a juste une place vide. c'est-à-dire qu'il y a des valeurs d'indicateur avant et après l'allumage de l'ordinateur. Mais il suffit de passer d'un TF à l'autre - toutes les valeurs "disparues" apparaissent.Les indicateurs sont standard - CCI, AO, etc. Les codes ont été pris dans les forums, je les attache, s'il vous plaît expliquez où je me trompe et ce que je ne comprends pas.



      Код №1
        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);
 
  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------  



        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}


      
          Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------             
   
    Last=New;
   }     
//----
   return(0);
  }
//+------------------------------------------------------------------+




       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

 
borilunad:

J'ai une fonction pour toutes les modifications telles que la mise en place de SL et TP, le transfert vers B/S, la recherche de positions et d'ordres avec tentatives et contrôles d'erreurs.

Je dois seulement prescrire la sélection des positions, les conditions et les avertissements au départ. Voici la fonction :

Petit mais astucieux !


Wow :) Merci. Je vais devoir y jeter un œil !
 
agat8430:


Je ne veux pas modifier tous les ordres ouverts mais seulement le début et la fin de l'ordre sur T/P. Je veux faire un EA pour moi-même.

En fait, nous devrions "filtrer" tous les ordres fermés, sans compter le magicien et le symbole, bien sûr. Ensuite, vous devez sélectionner l'ordre initial et le dernier ordre à modifier.

L'ordreSelect (g_pos_300, SELECT_BY_POS, MODE_TRADES) ; - c'est le dernier ordre.

Et la commande OrderSelect(0, SELECT_BY_POS, MODE_TRADES) ; - ce sera la première commande.

Il s'agit d'une branche avec des questions sur la langue, et j'ai répondu à votre question. Les bots ne sont pas engagés dans la refonte ici. Mais vous pouvez trouver tout ce qu'il faut pour l'inclure dans le conseiller expert si vous avez la moindre compréhension du langage. J'espère que ça a aidé...

 
agat8430:


Je veux qu'il modifie non pas tous les ordres ouverts mais seulement le début et le dernier ordre T/P. Je veux qu'il modifie non pas tous les ordres ouverts mais seulement le dernier ordre T/P.

Pour attraper les bons objets, utilisez les "fonctions utiles" de Kim pour presque toutes les occasions possibles !

https://www.mql5.com/ru/forum/131859

 
hoz:

En règle générale, les ordres fermés doivent être "écartés", sans compter le magicien et le symbole, bien sûr. Sélectionnez ensuite l'ordre initial et le dernier ordre à modifier.

L'ordreSelect(g_pos_300, SELECT_BY_POS, MODE_TRADES) ; - c'est le dernier ordre.

Et la commande OrderSelect(0, SELECT_BY_POS, MODE_TRADES) ; - ce sera la première commande.

Il s'agit d'une branche avec des questions sur la langue, et j'ai répondu à votre question. Les bots ne sont pas engagés dans la refonte ici. Mais vous pouvez trouver tout ce qu'il faut pour l'inclure dans le conseiller expert si vous avez la moindre compréhension du langage. J'espère que ça a aidé...

Désolé, ça ne marchera pas ! Pas le premier, pas le dernier !
 
MK07:

je prends les valeurs des indicateurs dans une fenêtre séparée à partir d'une barre déjà formée (c'est-à-dire de la barre #1) que je compte une fois sur la barre #0 sur son premier tick. tout fonctionne rapidement et correctement. mais si j'éteins l'ordinateur et après un certain temps pour le rallumer, les indicateurs continuent à fonctionner correctement, mais leurs valeurs au moment où l'ordinateur était éteint n'existent pas.Il me suffit de basculer entre TF et TF pour que toutes les valeurs "manquantes" réapparaissent.

Code 1

        ------


int start()
  {  
              
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------    
        
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------
   return(0);

  }
   
//+------------------------------------------------------------------+  
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }

//--------------------------------------------------------------------  

        Код №2
        ------


int start()
{  
     if (NewBar() == true)
  {  
         
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;

   for(int i=0;i<limit;i++)
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
   }     
//-------------------------------           
  }    

   return(0); 
}
   
//+------------------------------------------------------------------+    
bool NewBar()
{
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }

}

         Код №3
          ------


//--- buffers
double ExtMapBuffer1[];
//--- for one bar
datetime Last,New;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    New=Time[0]; 
      
     if(Last!=New)     
   {
  
  int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
//-------------------------------      

   { 

       Код №4
       ------


int start()
  {
      if(last>=Time[0]) return;
  
    int counted_bars=IndicatorCounted(),
       limit;  
       
    if(counted_bars>0)
      counted_bars--;
   
      limit=Bars-counted_bars;
//----
   for(int i=0;i<limit;i++)
       
//-------------------------------      
   { 
   
              
      КОД ИНДИКАТОРА
      
                               
        
//-------------------------------              
       
      last=Time[0];      
   } 
//----
   return(0);
  }
//+------------------------------------------------------------------+

Utilisez le boutonSRC en haut pour coller le code! Personne n'ira fouiner comme ça. Je l'ai collé pour vous. Vous pouvez faire de même dans votre poste.
 
borilunad:
... Je l'ai mis pour vous. Vous pouvez faire de même dans votre poste.
Cool.