[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 608

 
Tragedy:

Bonjour à tous.

Comment créer un délai dans un EA avant d'ouvrir un nouveau trade après la fin d'un trade précédent.

C'est-à-dire que l'opération s'est terminée t/p et qu'après cela, je dois attendre par exemple 15 minutes et ce n'est qu'ensuite que la formule continuera à fonctionner :)

Trouvé

OrderCloseTime( )
Mais comment puis-je lier cela à l'heure du programme, et pour qu'il n'y ait pas de conflit avec l'exécution de l'EA à travers l'historique. Merci d'avance


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

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после открытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после закрытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterCloseLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) t=OrderCloseTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}
 
Prompt :) Merci
 
rigonich:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Renvoie l'indice de la plus haute valeur trouvée (décalage par rapport à la barre actuelle).
Paramètres :
La valeur est retournée comme lavaleur de la barre la plus haute :

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
Renvoie l'indice de la plus haute valeur trouvée (décalage par rapport à la barre actuelle).
Paramètres :
symbole - Nom du symbole dont les données seront recherchées. NULL signifie le symbole actuel.
cadre temporel - Période. Peut être l'une des périodes du graphique. 0 indique la période du graphique actuel.
type - L'identifiant de la série chronologique. Peut être n'importe quel identifiant de série temporelle.
compter - Nombre d'éléments de la série temporelle (dans le sens de la barre actuelle vers l'indice ascendant), parmi lesquels la recherche doit être effectuée.
commencer - L'indice (décalage par rapport à la barre actuelle) de la barre de départ à partir de laquelle la recherche de la valeur la plus élevée commencera. Les valeurs négatives sont ignorées et remplacées par des valeurs nulles.
La question est de savoir comment spécifier que la recherche doit être effectuée avant la barre au-dessus de laquelle la fractale est apparue et si la période est inférieure à une minute..... comment faire ?
 

Je suis désolé,

ce serait génial. J'ai parcouru le tutoriel sur les variables globales, je comprends que c'est ce dont j'ai besoin, mais je ne comprends pas les nuances. Où les déclarer, comment y inscrire les valeurs nécessaires, etc.

Si, par exemple, 5 EAs sont suspendus dans le terminal sur 5 paires différentes et que chaque EA a 4 variables qui doivent être écrites, cela signifie que nous avons besoin de 20 variables globales et qu'elles doivent être nommées d'une manière ou d'une autre en utilisant la commande Symbol() afin que je ne doive pas écrire chaque nom dans l'EA.

En somme, ce n'est pas encore pour mon cerveau (((

 
i999i:



Retenez le temps d'ouverture de la barre où la dernière fractale a été définie, utilisez-le pour trouver le numéro de cette barre. Si la période est inférieure à une minute........, comment ça se fait ? Si la période du graphique, moins d'une minute est tout simplement pas là.
 
i999i:

Merci pour la réponse, mais je voulais savoir comment savoir si la fractale actuelle a été brisée ou non avant que la prochaine fractale n'apparaisse.

Si vous recherchez le prix d'une fractale fraîche (vous pouvez faire défiler la molette de la souris sur cette page), vous saurez alors si cette fractale est en rupture. Mon profil contient des liens vers l'expo ProfitUnity de B.Williams. Je l'ai écrit moi-même. Maintenant, je trade par signaux inverses, dans la direction du retour du prix vers sa moyenne mobile.
 
xant:

Je suis désolé,

ce serait génial. J'ai parcouru le tutoriel sur les variables globales, je comprends que c'est ce dont j'ai besoin, mais je ne comprends pas les nuances. Où les déclarer, comment y inscrire les bonnes valeurs, etc.

Si, par exemple, 5 EAs sont suspendus dans le terminal sur 5 paires différentes et que chaque EA a 4 variables qui doivent être écrites, cela signifie que nous avons besoin de 20 variables globales et qu'elles doivent être nommées d'une manière ou d'une autre en utilisant la commande Symbol() afin que je ne doive pas écrire chaque nom dans l'EA.

En somme, ce n'est pas encore pour mon cerveau (((

Si je n'ai pas assez de cervelle pour les variables globales du terminal, alors pour les écrire dans un fichier aussi...

double Var1, Var2, Var3, Var4;  // 4-ре переменных для сохранения (у Вас они свои !!!)
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
}
// в init()
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
{
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
//----
}

Mais, il y a une première fois pour tout. fSave_MineGV() dans start() et fGet_MineGV() dans init().

J'espère que vous trouverez la solution et que vous écrirez vos variables de sauvegarde au lieu de Var1, etc.
 
xant:

Je suis désolé,

ce serait génial. J'ai parcouru le tutoriel sur les variables globales, je comprends que c'est ce dont j'ai besoin, mais je ne comprends pas les nuances. Où les déclarer, comment y inscrire les valeurs nécessaires, etc.

Si, par exemple, 5 EAs sont suspendus dans le terminal sur 5 paires différentes et que chaque EA a 4 variables qui doivent être écrites, cela signifie que nous avons besoin de 20 variables globales et qu'elles doivent être nommées d'une manière ou d'une autre en utilisant la commande Symbol() afin que je ne doive pas écrire chaque nom dans l'EA.

Eh bien, ce n'est pas encore pour mon cerveau(()

Les variables dont vous avez besoin sont vraiment 20, vous ne voulez pas les écrire dans votre EA, faites-en un fichier séparé, il y a des commandes de préprocesseur pour prédéfinir les constantes, et pour un débutant il est beaucoup plus facile de travailler avec des variables globales, qu'avec des fichiers, mais bien sûr vous êtes le patron.

chaîne perem = "peremEURUSD-1" ;
chaîne perem = "peremEURUSD-2" ;
double A ;
//+------------------------------------------------------------------+
//| fonction de démarrage du programme de script |
//+------------------------------------------------------------------+
int start()
{
GlobalVariableSet(peremEURUSD-1,2.5) ; //créer ou attribuer une nouvelle valeur
A=GlobalVariableGet(peremEURUSD-1) ; //donc lecture de la valeur
if(GlobalVariableGet(peremEURUSD-1)==....) //vérifier de cette façon
retour(0) ;
}

//+------------------------------------------------------------------+

P.S. Il est préférable de prédéfinir les variables (pour une paire de devises) une fois init.

 

rigonich,

pourquoi, dans l'EA je veux juste, je pensais au contraire que l'enregistrement des fichiers est plus facile.

TarasBY ,

Merci, tout est clair, je vais essayer, je pense que ça va marcher.

 
veuillez me conseiller... que diable... dans sa forme originale (sansPlaySound("alert.wav") ;) - travaux. Mais si vous ajoutez à n'importe quel lien en plus de l'attribution du drapeau et d'une certaine action (jouer de la musique par exemple) ... alors les drapeaux s'impriment 0000 et la musique joue à pleine vitesse ! s'il vous plaît dites-moi où l'erreur ?
      if(Stoch_1>Stoch_2) flag1=1 ;  
      {Print (flag1,flag2,flag3,flag4);
      
      if(Stoch_1<Stoch_2 && flag1==1) flag2=1;
      {Print (flag1,flag2,flag3,flag4);
      
      if ((Stoch_1>Stoch_2) && flag1==1 && flag2==1) flag3=1; 
      {Print (flag1,flag2,flag3,flag4);PlaySound("alert.wav");
      
       if(Stoch_1<Stoch_2 && flag1==1 && flag2==1 &&  flag3==1) flag4=1;
              {Print (flag1,flag2,flag3,flag4);
       if(Stoch_1>Stoch_2 && flag1==1 && flag2==1 &&  flag3==1 && flag4==1) 
       {OrderSend (Symbol( ), OP_SELL,  0.01 ,Bid, 0, 0, 0, NULL, 450, 0, CLR_NONE);
        Print ("OUT");


 
flag1=0;
flag2=0;
flag3=0;
flag4=0;}

}}     
  }}}
=================================================================
.....