[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 567

 
Catrock писал(а) >>

Une autre question d'un débutant.

J'utilise plusieurs fonctions définies par l'utilisateur dans mon conseiller expert. Comment puis-je faire en sorte que ces fonctions soient combinées dans une bibliothèque, et dans le corps du conseiller expert, les appeler simplement à partir de là.

Je ne connais pas la syntaxe des langues à cet égard.

Veuillez vous référer à la documentation ou à la section des didacticiels. Je ne l'ai pas trouvé là-bas.


https://book.mql4.com/ru/build/structure

https://www.mql5.com/ru/articles/1462

+ pour couronner le tout... https://book.mql4.com/ru/appendix/examples

 

Comment écrire une fonction qui vérifie si une position est ou a été ouverte sur une barre zéro (de préférence un choix de timeframe. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), ou cette fonction le fait. Si j'ai bien compris, il ne renvoie que -1 si la position est ouverte en ce moment, mais si elle était ouverte et déjà fermée.

//+----------------------------------------------------------------------------+
//| Renvoie le numéro de barre de la dernière position ouverte ou -1. |
//| Paramètres : |
//| sym - nom de l'instrument ("" - symbole actuel) |
//| tf - timeframe ( 0 - timeframe actuel) |
//| op - opération (-1 - n'importe quelle position) |
//| mn - MagicNumber (-1 - n'importe quelle magik) |
//+----------------------------------------------------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
datetime oot ;
int i, k=OrdersTotal() ;

if(sym=="")
sym=Symbol() ;
for(i=0 ; ik ; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime() ;
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True)) ;
}
//+----------------------------------------------------------------------------+

 
Nous avons besoin de deux cycles. Dans la première, nous parcourons l'historique des commandes, dans la seconde, nous parcourons les commandes en cours. Dans les deux cas, si l'heure d'ouverture de l'ordre est supérieure ou égale à Time[0], alors l'ordre a été ouvert sur la bougie actuelle. Cela est vrai pour toutes les échéances.
 
drknn >>:
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.

Merci de cliquer. Pourriez-vous demander ceci dans le code
 
gince >>:

Спадибо, что аткликнулся. А можно попросить это в коде

Voici un exemple de passage historique

//=========== SchSellHist()  ===============================
//  Функция возвращает количество Sell-ордеров, лежащих в истории сегодняшних торгов
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSellHist(int MAGIC){
  string SMB=Symbol();
  int SchSell=0;
  int i;
  for (i=OrdersHistoryTotal()-1;i>=0;i--){
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { WriteError(i);}
    else {
      if(OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue;} 
      if(OrderType()==OP_SELL){
        if(OrderOpenTime()>=Time_D0){// сегодняшний ордер
          SchSell++;
        }
      }
    }
  }
 return(SchSell);     
}    
             
//==================================================================================================

Essayez de créer votre propre code, d'autant plus que vous avez l'algorithme et un exemple tout fait sous les yeux.
 
Bonjour à tous, aidez-moi à comprendre le code après qu'il fonctionne beaucoup de déchets est laissé sur le graphique flèches cercles de la ligne comment les supprimer ou si elle elle-même supprimé voici une partie du code
 
void seta(string a_name_0, int a_window_8, double a_datetime_12, double a_price_20, int ai_28, colour a_color_32, int a_width_36) {
ObjectDelete(a_name_0) ;
ObjectCreate(a_name_0, OBJ_ARROW, a_window_8, a_datetime_12, a_price_20) ;
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28) ;
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32) ;
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36) ;
}

void _setabuy(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120) ;
seta(g_str_concat_356, 0, TimeCurrent(), Bid + 15.0 * Point, SYMBOL_ARROWUP, Blue, 2) ;
gi_120++ ;
}

void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120) ;
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2) ;
gi_120++ ;
}
 
drknn >>:

Вот пример прохода по истории


Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.

Merci. Je vais essayer.
 
drknn >>:

Вот пример прохода по истории


Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.

Ou bien voici une fonction qui vérifie si une position a été ouverte sur la barre actuelle (avec une vérification sur OrdersTotal() et OrdersHistoryTotal() ). Renvoie un résultat positif si un ordre de type a été ouvert.

bool CheckExists(int Type)                                  
 {
  bool Result = True;
  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i, SELECT_BY_POS))
    if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
     if(OrderOpenTime() >= Time[0])
      Result = False;
  for(i = 0; i < OrdersHistoryTotal(); i++)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     if(OrderType() == Type && OrderOpenTime() >= Time[0]
        && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
      Result = False;
    }

  return(Result);
  }
 

Veuillez me dire comment mettre en œuvre cette condition.

Si( il y a des ordres en attente) alors faites ceci et cela ;