Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 832

 
Igor Makanu:

Les conseillers experts n'ont pas de tampons d'indicateurs et ne s'affichent pas dans le terminal.

Lisez dans l'aide quelle est la différence entre les conseillers experts, les scripts et les indicateurs.

Je vous remercie de votre réponse.

Pouvez-vous me dire comment mettre en œuvre cette fonctionnalité ?

 

Bonjour, aide pour passer un tableau dans une fonction

avoir une structure

struct pattern
  {
   double            x;
   datetime          y;
 };  

Je déclare un couple de tableaux statiques comme cette structure

pattern last_pattern_up[NUMBER_OF_SYMBOLS][NUMBER_OF_PERIODS], last_pattern_dn[NUMBER_OF_SYMBOLS][NUMBER_OF_PERIODS];

Maintenant, je veux passer un tableau statique dans une fonction, mais cela me donne une erreur - '[' - tableau requis

void MyFunction(pattern &array)
{
   Print(array[1][1].x," ",array[1][1].y);
   }

Comment passer correctement un tableau dans une fonction ?

 
Tango_X:

Bonjour, aide pour passer un tableau dans une fonction

avoir une structure

Je déclare un couple de tableaux statiques comme cette structure

Maintenant, je veux passer un tableau statique dans une fonction, mais cela me donne une erreur - '[' - tableau requis

Comment passer correctement un tableau dans une fonction ?

void MyFunction(pattern &array[][NUMBER_OF_PERIODS])
 
Artyom Trishkin:

Merci ! Super !

 
Alexander Layzerevich:

Je vous remercie de votre réponse.

Pouvez-vous me dire comment mettre en œuvre cette fonctionnalité ?

seulement séparément un Expert Advisor qui appelle un indicateur via iCustom() et séparément un indicateur pour un graphique

à ce que le conseiller expert, lorsqu'il appelle l'indicateur, utilise une nouvelle copie de l'indicateur, c'est-à-dire que si vous lancez le conseiller expert sur un graphique et que vous modifiez ses paramètres (ceux que vous passez à iCustom() ), l'indicateur ne réagira pas sur le graphique.

l'indicateur, qui a été appelé par le conseiller expert, sera affiché dans le testeur de stratégie à la fin du test. Pendant le test en mode visuel, vous pouvez lancer l'indicateur sur le graphique du testeur de stratégie.....

Si vous voulez utiliser l'indicateur d'une manière différente, vous pouvez utiliser l'indicateur de votre choix, mais je ne sais pas comment changer les paramètres dans le modèle ... peut-être que quelqu'un l'a fait

 
Alexander Layzerevich:

Je vous remercie de votre réponse.

Pouvez-vous me dire comment mettre en œuvre cette fonctionnalité ?

Dessiner des lignes(OBJ_TREND)

 
Alexander Layzerevich:

Je vous remercie de votre réponse.

Pouvez-vous me dire comment mettre en œuvre cette fonctionnalité ?

Si vous dessinez les lignes de l'indicateur sans utiliser l'indicateur du tout, mais seulement avec les calculs transférés de l'indicateur à l'Expert Advisor, alors seulement avec les objets graphiques - les lignes de tendance. Mais il est cher. Mais nous pouvons limiter la zone de visibilité des barres sur le graphique.

 

Merci pour les conseils.

En fait, l'Indicateur fait la même chose.

c'est-à-dire que j'ai calculé des valeurs, je dois les relier par des lignes(OBJ_TREND).

 
Igor Makanu:

au moins un paramètre doit être modifié lors de la modification d'une commande, erreur n°1 - si rien ne doit être modifié après l'envoi d'une requête au serveur

désimprimez ce que vous avez envoyé au serveur, vous le verrez tout de suite.

L'erreur persiste, bien que j'aie ajouté une condition supplémentaire pour vérifier s'il existe un stop ou un profit.

if(OrderMagicNumber() == id_number && (OrderStopLoss() == 0 || OrderTakeProfit() == 0))


Également pour le suivi

if(OrderMagicNumber() == id_number && OrderStopLoss() != 0)
           {
            if(OrderType() == OP_BUY)
              {
               if(OrderComment() == "1" && Bid - OrderOpenPrice() >= a1 && OrderStopLoss() != OrderOpenPrice() + l1) {bol = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+l1,OrderTakeProfit(),0,clrNONE);};
               if(OrderComment() == "2" && Bid - OrderOpenPrice() >= a2 && OrderStopLoss() != OrderOpenPrice() + l2) {bol = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+l2,OrderTakeProfit(),0,clrNONE);};
              }
            else
              {
               if(OrderComment() == "1" && OrderOpenPrice() - Ask >= a1 && OrderStopLoss() != OrderOpenPrice() - l1) {bol = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-l1,OrderTakeProfit(),0,clrNONE);};
               if(OrderComment() == "2" && OrderOpenPrice() - Ask >= a2 && OrderStopLoss() != OrderOpenPrice() - l2) {bol = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-l2,OrderTakeProfit(),0,clrNONE);};
              };
           };
 
Alexandr Sokolov:

L'erreur persiste, bien que j'aie ajouté une condition supplémentaire pour vérifier la présence d'un stop ou d'un profit.

Également pour le suivi

OrderStopLoss() != NormalizeDouble(OrderOpenPrice() - l1,_Digits)