Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 849

 
gince:

Pourquoi le mauvais objet s'affiche-t-il ? Ce devrait êtreun triangle pointant vers la gauchehttps://docs.mql4.com/ru/constants/objectconstants/arrows code 3, mais une flèche pointant vers le haut Wingdings code 241apparaît.

Code du programme (j'aiObjectSet(objName, OBJPROP_ARROWCODE, 3) ;)

Lisez-le plus attentivement. Je ne me souviens pas en détail, mais le code 3 ne fait pas partie de Wingdings.


ps ; Voici ce qu'il y a dans la note.

Les codes de flèche spéciaux ne peuvent pas être utilisés dans les indicateurs personnalisés lors de la définition de la valeur de la flèche pour les lignesavec le style DRAW_ARROW.

 
C'est un EA.
AlexeyVik:

Lisez-le attentivement. Je ne me souviens pas en détail, mais le code 3 ne fait pas partie de Wingdings.


ps ; Voici ce qui se trouve dans la note

Lescodes de flèche spéciaux ne peuvent pas être utilisés dans l'affichage de la flèche lors de la définition de la valeur de la flèche pour les lignesqui ont un style DRAW_ARROW.

C'est un EA et il a une fonction.

 
gince:
C'est le conseiller.
Ça n'a pas d'importance.
 
AlexeyVik:
Ça n'a pas d'importance.

Quand puis-je le faire ?

 
gince:
C'est le conseiller expert.

Il existe une deuxième fonction dans le même conseiller. Tout va bien là-bas. (ObjectSet(objName, OBJPROP_ARROWCODE, 1) ;)

void f_ArrowOpen(
                  datetime openTime,
                  int action,
                  double lots,
                  string symb,
                  double openPrice
                  )
{
   color c;
   string op="";
      if(action==1)
      {
         c=Blue;
         op="BUY";
      }
      else if(action==-1)
      {
         c=Red;
         op="SELL";
      }
   // order open arrow name:    #76840865 buy 0.05 EURUSDc at 1.30416

      string objName = StringConcatenate("#", TimeToString(openTime,TIME_DATE|TIME_MINUTES), " ", op, " ", lots, " ", symb, " at ", openPrice);
      ObjectCreate(objName, OBJ_ARROW, 0, openTime, openPrice);
      ObjectSet(objName, OBJPROP_COLOR, c);
      ObjectSet(objName, OBJPROP_ARROWCODE, 1);
      ObjectSetText(objName, "LOT: " + DoubleToStr(lots, 2));
}
//+------------------------------------------------------------------+ 
void f_ArrowClose(
                  datetime closeTime,
                  int action,          //íàïðàâëåíèå
                  double lots,
                  string symb,
                  double openPrice,
                  double closePrice,
                  double profit)
{
      color c;
      string op="";
      if(action==1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_BUY";
      }
      else if(action==-1)
      {
         if(profit>0)c=Blue;else if(profit<0)c=Red;else c=Yellow;
         op="cl_SELL";
      }
      
      string objName = StringConcatenate("#", closeTime, " ", op, " ", lots, " ", symb, " at ", openPrice, " close at ", closePrice);
      ObjectCreate(objName, OBJ_ARROW, 0, closeTime, closePrice);
      ObjectSet(objName, OBJPROP_COLOR, c);
      ObjectSet(objName, OBJPROP_ARROWCODE, 3);
      //ObjectSetText(objName, StringConcatenate("Profit: ", profit));
}
 
S'il vous plaît, dites-moi. Le conseiller expert négocie sur la base des signaux de l'indicateur sur chaque barre. Que dois-je faire pour que les conditions soient vérifiées à chaque tique. Voici les conditions de l'indicateur :
int limit, i ;
int counted_bars=IndicatorCounted() ; // Combien de barres ont déjà été comptées
if (counted_bars<0) return(-1) ; // Vérifier une éventuelle erreur
if (counted_bars>0) counted_bars-- ; // compter la dernière barre comptée
limit=Bars-counted_bars ; // Commencer à partir de la dernière barre comptée
// - 1 - ============================ Fin de bloc ===================================

// - 2 - ======================= Afficher l'indicateur sur l'historique ======================
for(i = limite ; i >= 0 ; i--)
{
FastMA= iMA(NULL, 0, FastMAPeriod, FastMAShift, FastMAMethod, FastMAPrice, i) ;
SlowMA= iMA(NULL, 0, SlowMAPeriod, SlowMAShift, SlowMAMethod, SlowMAPrice, i) ;

}
// - 2 - ============================ Fin du bloc ===================================

// - 3 - ======================= Sortie du signal ========================================
//if (LastBar != Time[0]) // une fois par barre
//{
c'est ça ?
 
gince:

Il existe une deuxième fonction dans le même conseiller. Tout va bien là-bas. (ObjectSet(objName, OBJPROP_ARROWCODE, 1) ;)

Vous pensez que je vais vous convaincre que vous avez mal compris quelque chose ? Vous feriez mieux de consacrer votre temps à des expériences et d'essayer de comprendre ce que vous avez écrit.
 

Bonjour à tous.

Pouvez-vous me dire quelle condition ajouter avant OrderSend, pour que l'ordre ne soit pas exécuté si la position ouverte précédente est déficitaire ? Pour qu'il n'y ait pas de moyenne.

 
Craft:

Bon après-midi à tous.

Pouvez-vous me dire quelle condition ajouter avant OrderSend, pour que l'ordre ne soit pas exécuté si la position ouverte précédente est déficitaire ? Je veux éviter de faire la moyenne.

En général, le contrôle se déroule comme suit

OrderSelect(ticket,SELECT_BY_TICKET) ;

si(OrderProfit()<0) { }


Et vous pouvez mettre ce que vous voulez entre parenthèses. Moi, par exemple, je l'utilise de cette façon pour faire fonctionner la méthode "Martin")

 
Bonsoir, pourriez-vous m'expliquer comment fonctionne l'EA. Si j'écris return directement dans la fonction principale Start, l'EA se termine-t-elle ? Merci d'avance !