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

 
Bonne journée à tous. J'ai besoin d'un robot qui garde la trace des transactions et crée un ordre en attente à la clôture par takeprofit pour remplacer un ordre fermé avec les mêmes paramètres qu'un ordre fermé. Un tel robot peut-il être mis en œuvre ? Je n'en ai jamais utilisé auparavant. Si vous en avez un quelque part, veuillez me donner un lien. Merci d'avance.
 
Auparavant, le bénéfice clôturé était dans la devise du dépôt et était calculé comme suit :
.
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
comment convertir cette formule en points ?
 

Je me demande comment optimiser le code pour accélérer le hibou dans le testeur. Pouvez-vous me dire comment exécuter la boucle plus rapidement, comme ceci :

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  continue; 
   if (OrderSymbol() != Symbol())                    continue;    
   if (OrderMagicNumber() != Magic)                  continue;
   
   // работаем с ордерами      
}

ou comme ça :

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

et d'autres conseils pour accélérer l'EA ?

 
T-G: Auparavant, la clôture sur le bénéfice était dans la devise du dépôt et comptée comme ceci
comment convertir cette formule en points ?
Cette formule n'a pas de sens à changer, il est plus facile de trouver l'ordre nécessaire (OrderSelect()) et de calculer (OrderOpenPrice()-Bid)/Point ( ou OrderOpenPrice()-Ask) et d'obtenir combien de pips l'ordre a déjà
.
T-G: et y a-t-il d'autres astuces pour accélérer l'EA ?

Dans mql4 il y a une vérification complète des conditions, c'est à dire que toutes les expressions qui sont entre parenthèses if() seront vérifiées jusqu'à la fin, donc parfois il est raisonnable de séparer les conditions complexes en plusieurs conditions :

if(a>b && c>d) peut être remplacé par if(a>b){ if (c>d)..... }

La première variante du code que vous proposez fonctionnera donc un peu plus rapidement, bien que dans la pratique - l'énumération des commandes ne charge pas beaucoup le processeur, les opérations mathématiques le chargent beaucoup, il est logique de chercher à augmenter les performances du code - tous les calculs ne doivent pas être effectués à chaque tic-tac.

 
IgorM:

Dans mql4 il y a une vérification complète des conditions, c'est-à-dire que toute expression qui est entre parenthèses if() sera vérifiée jusqu'à la fin, donc parfois il est raisonnable de casser des conditions complexes en plusieurs conditions :

if(a>b && c>d) peut être remplacé par if(a>b){ if (c>d)..... }

Ainsi, la première variante du code que vous suggérez fonctionnera un peu plus rapidement, bien qu'en pratique - la recherche d'ordre ne charge pas beaucoup le processeur, les opérations mathématiques le chargent beaucoup, il est logique de chercher à augmenter les performances du code - tous les calculs n'ont pas besoin d'être effectués à chaque tick.

Je vois. Merci :

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

ou la même normalisation dans les conditions :

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

ralentit beaucoup l'exécution des EAs ?

 
T-G: ou la même normalisation des conditions :

ralentit beaucoup l'exécution des EAs ?

Essayez de le vérifier vous-même avec GetTickCount(), créez un script et exécutez la normalisation une fois 10 000 fois et exécutez-la deux fois 10 000 fois, vous pourrez alors évaluer l'utilité pour vous de rechercher les sections de code où la normalisation est souvent exécutée. Pour ce qui est de Print(), j'ai même du mal à répondre - allez-vous sortir le Pronta à chaque tick ? Habituellement, les opérations de sortie ralentissent considérablement le Conseiller Expert. Les scripts avec Comment() sont exécutés 10 fois plus longtemps que sans sortie, mais là encore, la question est une question d'opportunité - si vous en avez besoin, vous devez le faire.
 
T-G:

Je vois. merci. mais dites-moi Imprimer par exemple après avoir fermé un ordre :

ou la même normalisation dans les conditions :

ralentit considérablement l'exécution des EAs ?

L'opération Print() est une opération avec un fichier (dans ce cas, un fichier journal). Et ces opérations sont TRÈS lentes (par rapport au traitement des données en mémoire). CONCLUSION : Créer une variable qui est initialisée dans init()

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

Et imprimer par condition de cette variable (c'est UNE option).

L'exemple de normalisation que vous avez donné n'a aucun sens, si l'on part des objectifs déclarés (optimisation du code). La normalisation est NÉCESSAIRE selon les exigences techniques du serveur de courtage, afin d'exécuter un ordre de transaction UNIQUEMENT pour le prix et le STOP.

 
Bonjour, lorsqu'un Expert Advisor ouvre une position, dois-je écrire dans son code un indicateur (condition) en fonction des signaux duquel il ouvre un ordre ou dois-je écrire dans l'Expert Advisor le chemin vers la fenêtre d'un instrument financier avec des indicateurs installés ?
 

Chers spéculateurs, au secours ! Je recherche un EA qui fixe automatiquement le SL et le TP lors de l'ouverture d'une position.

Je vous en suis très reconnaissant à l'avance.

 
Bon après-midi. Si quelqu'un sait où l'on peut télécharger un indicateur ZIGZAG qui marque le point où un nouveau faisceau apparaît (par exemple dans une couleur différente). S'il y en a une...