Fonctions utiles de KimIV - page 8

 

Il y a beaucoup de questions...
Je veux dire, ils se présentent tout le temps, mais au cas par cas.

Pour les fonctions qui sont publiées maintenant il n'y a pas de questions, parce que je regarde simplement sans "sentir" dans l'unité.
En outre, à part eux, il y a des questions sur les codes antérieurs, en particulier sur le suivi, qui a quelque chose à voir avec
avec ce qui est écrit ci-dessus : comment, pourquoi passer aux fonctions, par exemple, cette section de queue m'a laissé perplexe :

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm) PlaySound("expert.wav");
}
Le rôle de ldStopLoss n'est pas clair ...
 

oooo... :-) est une fonction tellement ancienne. Il a été conçu pour modifier le niveau d'arrêt d'une position ouverte ou d'un ordre fixé. Il existait également une fonction similaire pour les prises de bénéfices. Ils ont tous deux été remplacés par un ModifyOrder() meilleur et plus fonctionnel.

kombat:
Le rôle de ldStopLoss n'est pas clair ...

Il s'agit d'une variable locale, au moyen de laquelle le niveau de prix, auquel le StopLoss doit être fixé, est transmis à la fonction ModifyStopLoss. Par exemple, appelons la fonction ModifyStopLoss comme suit :

ModifyStopLoss(1,5662);

Alors la variable locale ldStopLoss prendra la valeur 1.5662. Vous pouvez le vérifier de cette façon :

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;
 
  Print("ldStopLoss=",ldStopLoss);
 
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm) PlaySound("expert.wav");
}

Le journal contiendra cet enregistrement :

<Время> <Эксперт> <Инструмент>,<таймфрейм>: ldStopLoss=1.5662
 
KimIV:

oooo... :-) est une fonction tellement ancienne. Il a été conçu pour modifier le niveau d'arrêt d'une position ouverte ou d'un ordre fixé. Il existait également une fonction similaire pour les prises de bénéfices. Ils ont tous deux été remplacés par ModifyOrder(), plus parfait et plus fonctionnel.


Alors... ancien ... (un peu gêné :)))
J'ai parcouru les dossiers, le fichier le plus ancien est daté du 22.01.2006.
Et on dirait qu'il n'a même pas été trafiqué par mes manivelles...
Je suis désolé, je pratique des choses simples depuis longtemps, changer un chiffre par exemple.
Calculatrices simples, etc...

Tout cela a commencé par une demande d'écriture d'un conseiller expert sur l'un des forums du PRDC, mais...
Mes centimes ne sont pas suffisants, mais je dois les acheter sur le marché.
Maintenant, j'en suis accro... Moi ? C'est pratique... tout est là... unitor, etc, compact, portable.

Je me souviens de ma première et dernière tentative à Delphi 6... Je frissonne.
J'ai encore quelques uns de ces disques sur l'étagère... :)))) désolé pour le hors sujet.


Alors, qu' y a-t-il entre les parenthèses de function(), est-ce une sorte de "formulaire" pour lui passer des paramètres ?


Parce que je me suis mis en tête, pour une raison quelconque, qu'il s'agit d'un paramètre que la fonction renvoie à l' issue du traitement.
Et c'est aussi que la fonction reçoit des paramètres à traiter à l'intérieur de crochets curly...{}

void TrPos() {
if (OrderType()==OP_BUY) {
    if ( (Bid-OrderOpenPrice())>TrailingStop*Point) {
      if (OrderStopLoss()<Bid-TrailingStop*Point) {
        ModifyStopLoss(Bid-TrailingStop*Point);
        return;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

C'est-à-dire que tous ces Bid, Point et ainsi de suite sont des paramètres d'entrée.

J'ai dû me tromper lourdement... Et ce qui est à l'intérieur des accolades() permet de passer des paramètres à une fonction,
alors que la fonction elle-même peut être située à n'importe quel endroit (ou autre) du code propre du script...

N'est-ce pas ?

 
La question est de savoir pourquoi, contrairement à OpenPosition, il n'y a pas de traitement des erreurs dans ModifyOrder ? Il y a aussi toutes sortes d'erreurs pendant la modification. J'aimerais avoir des fonctions séparées pour l'installation, la modification et la fermeture, et une unité de gestion des erreurs séparée pour toutes - moins de code, plus facile à écrire, et cela fonctionnerait plus rapidement... Si je me trompe, corrigez-moi...
 
Bonjour, Igor ! J'ai des problèmes pour utiliser vos EAs et scripts en utilisant des chaluts de toute forme sur mon compte réel (Alpari DC). Je suis particulièrement intéressé par e-News-Lucky$ (idéal pour mon système), e-TFL_v2, Set2StopOrders, e-SotTrailing. Il fonctionne sur la démo (également Alpari). Aucun message d'erreur. Qu'est-ce que ça peut être ? Et une dernière question. Comment désactiver la liaison horaire dans e-News-Lucky$ pour entrer et sortir à tout moment ? Merci !
 
ag-forex писал (а):
Bonjour, Igor ! J'ai des problèmes pour utiliser vos EAs et scripts en utilisant des chaluts de toute forme sur mon compte réel (Alpari DC). Je suis particulièrement intéressé par e-News-Lucky$ (idéal pour mon système), e-TFL_v2, Set2StopOrders, e-SotTrailing. Il fonctionne sur la démo (également Alpari). Aucun message d'erreur. Qu'est-ce que ça peut être ?
Le problème a été résolu à plusieurs reprises en contactant le support technique de cette société de courtage.
 
kombat писал (а):
Donc, ce qui se trouve entre les parenthèses de function() est une sorte de "formulaire" pour lui passer des paramètres ?

Oui... un peu comme un récipient :-)

kombat a écrit (a) :
Parce que pour une raison quelconque, j'ai le contraire dans ma tête : c'est le paramètre que la fonction renvoie à la suite du traitement.

Ce que la fonction renvoie est la valeur de retour. Voici un exemple simple. Nous définissons une fonction qui additionne deux nombres :

int f(int a, int b) {
  int x;
  x=a+b;
  return(x);
}

Maintenant, si nous appelons cette fonction comme ceci :

int y;
y=f(3, 5);

alors les nombres 3 et 5 sont les paramètres de la fonction f. Les paramètres d'une fonction peuvent être des nombres, des variables ou des expressions. Les variables a et b sont des variables locales qui prennent les valeurs des paramètres et les donnent à la fonction. La variable x est la valeur de retour de la fonction f, c'est-à-dire qu'après notre appel à la fonction f, la variable y prendra la valeur qui lui est passée par la variable x, c'est-à-dire 8.

Kombat:

Et aussi le fait que la fonction reçoit des paramètres à manipuler à l'intérieur de crochets curly...{}

void TrPos() {
if (OrderType()==OP_BUY) {
    if ( (Bid-OrderOpenPrice())>TrailingStop*Point) {
      if (OrderStopLoss()<Bid-TrailingStop*Point) {
        ModifyStopLoss(Bid-TrailingStop*Point);
        return;
      }
    }
  }
// в качестве примера !!! просто выдраный кусок кода!

c'est-à-dire que tous ces Bid, Point, etc. sont les paramètres d'entrée.

non... le paramètre de la fonction ModifyStopLoss sera la valeur de l'expression Bid-TrailingStop*Point.

Kombat:

J'ai dû faire une erreur grossière... et ce qui est entre parenthèses() permet de passer des paramètres à traiter dans la fonction,
la fonction elle-même peut être située à n'importe quel endroit (ou autre) du code du script lui-même...

N'est-ce pas ?

oui

 
sasa999:
La question est la suivante : pourquoi, contrairement à OpenPosition, ModifyOrder n'a pas de gestion des erreurs ?

J'ai entendu dire quelque part que le code de la route était écrit avec du sang. Et il n'y a rien de superflu en eux. Derrière chaque mot, il y a presque une vie perdue dans un accident.

J'écris mes fonctions, en fonction de mon expérience, et j'inclus le traitement des erreurs qui se sont produites dans ma pratique, et il n'y a aucun moyen de les éviter. J'essaie d'être aussi "poli" que possible (traitement des erreurs) lorsque j'essaie d'entrer sur le marché. Lors de la modification, la plupart des erreurs sont éliminées par la normalisation des prix et de simples contrôles des valeurs. Si une erreur se produit au cours de la modification, elle est rétablie au prochain tic-tac. La même chose se produit à la fermeture.

 

Quel est le but de l'envoi du pp - prix d'ouverture de l'ordre à cette fonction ?

void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE)

C'est comme si la couleur était déjà fixée au départ... test_ModifyOrder.mq4 (12.14 KB) ... pourquoi ne pas l'utiliser, mais le renvoyer à la fonction

color clModifyBuy = Aqua; // Цвет значка модификации покупки
color clModifySell = Tomato; // Цвет значка модификации продажи
quel est l'avantage de
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
pp=NormalizeDouble(pp, dg);

avant le formulaire court

pp=NormalizeDouble(pp, Digits);

pourquoi avez-vous besoin de normaliser OrderOpenPrice()? n'est-il pas dans le même format que dans l'ordre ?

op=NormalizeDouble(OrderOpenPrice() , dg);
Jusqu'à présent, je n'ai pas remarqué d'erreurs si la même chose est insérée lors de la modification. Il en va de même avec OrderStopLoss(), et OrderTakeProfit()
 
sasa999:

Quel est le but de l'envoi du pp - prix d'ouverture de l'ordre à cette fonction ?

void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE)

Les ordres OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT et OP_SELSTOP seront déplacés.

sasa999:

La couleur est aussi en quelque sorte déjà définie au tout début... test_ModifyOrder.mq4 (12.14 KB) ...pourquoi ne pas l'utiliser, et renvoyer à la fonction

color clModifyBuy = Aqua; // Цвет значка модификации покупки
color clModifySell = Tomato; // Цвет значка модификации продажи

Merci ! Je vais l'utiliser !

sasa999:
quel est l'avantage
int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it;
pp=NormalizeDouble(pp, dg);

avant un formulaire court

pp=NormalizeDouble(pp, Digits);

La polyvalence qui permet à l'EA de travailler avec des positions et des ordres non seulement pour le symbole actuel, mais aussi pour d'autres symboles. Par exemple, l'EA fonctionne sur le graphique EURUSD. Une variante avec Digits ne permettra pas de travailler avec des positions ouvertes sur USDJPY.

sasa999:

Pourquoi l'OrderOpenPrice() doit-il être normalisé ?

op=NormalizeDouble(OrderOpenPrice() , dg);

Pour réussir à comparer des valeurs de type double. Si elle n'est pas normalisée, la comparaison est impossible ou plutôt dénuée de sens.

sasa999:
Je n'ai pas remarqué d'erreur si vous remettez la même chose lors de la modification. Il en va de même pour OrderStopLoss() et OrderTakeProfit().
Sans normalisation, la fonction génère l'erreur 1(OrderModify tente de modifier des valeurs déjà définies avec les mêmes valeurs).
Raison: