[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 315

 
Savez-vous si le testeur de stratégie a des limites quant au nombre de passages ? J'ai lancé le testeur, en bas à gauche au-dessus de la barre au début du test se trouvait : 0/1280 (25706). J'ai compté 25 kopecks - c'est le nombre de toutes les combinaisons possibles. Mais il a terminé le test quand il était : 1088/1280 (25706). Il n'a donc fait que 1088 passes ? Que signifient les deux premiers chiffres ?
De plus, cela compte un peu bizarrement... quand il a ajouté un autre critère pour 3 paramètres, les 25 pièces n'ont pas été multipliées par 3, mais ont donné quelque chose comme 40 koz. Est-ce un problème ou est-ce que je me trompe quelque part ?
 
AndrejFX:
Savez-vous si le testeur de stratégie a des limites quant au nombre de passages ? J'ai lancé le testeur, en bas à gauche au-dessus de la barre au début du test se trouvait : 0/1280 (25706). J'ai compté 25 koz - c'est le nombre de toutes les combinaisons possibles. Mais il a terminé le test quand il était : 1088/1280 (25706). Il n'a donc fait que 1088 passes ? Que signifient les deux premiers chiffres ?
De plus, cela compte un peu bizarrement... quand il a ajouté un autre critère pour 3 paramètres, les 25 pièces n'ont pas été multipliées par 3, mais ont donné quelque chose comme 40 koz. Est-ce un problème ou est-ce que je me trompe quelque part ?
Lisez le manuel. Vous y trouverez personnellement tous les détails.
 

Aidez-nous à résoudre le problème du code de queue !!!

Doit rechercher les StopLoss déjà ouverts à la distance "TrailingStop", du niveau haut ou bas, des bougies précédentes. Une fois que le conseiller expert est lancé, il ne fonctionne qu'avec un ordre sur la première transaction ouverte. Une fois que le StopLoss est déclenché et que la transaction suivante est ouverte, l'ordre StopLoss n'est pas suivi. Si je comprends bien, c'est parce que la variable "ORDER_SL" n'est pas modifiée et que la condition de modification de l'ordre n'est pas remplie ? Si oui, pourquoi et comment y remédier ?

Voici le code qui suit :

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);
int ORDER_Type=OrderType();
double ORDER_SL=OrderStopLoss();
double Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*Point;
double Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*Point;
            if (ORDER_Type==OP_BUY && ORDER_SL<Point_High){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }
            if (ORDER_Type==OP_SELL && ORDER_SL>Point_Low){
                    OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
                    while(!IsTradeAllowed()) Sleep(100);
            }

Voici l'EA dans son intégralité :

Dossiers :
 

Ce code

int ORDER=OrdersTotal();    
OrderSelect(ORDER,SELECT_BY_TICKET,MODE_TRADES);

devrait être mis dans les perles. Le plus intéressant est que cela fonctionne, mais seulement dans le testeur sur la première commande.

 
Christoff:

Aide pour le suivi !!!

Doit traîner les StopLoss déjà ouverts à la distance de "TrailingStop", du niveau de High ou Low, des chandeliers précédents. Après le démarrage, le conseiller expert travaille uniquement avec un ordre sur la première transaction ouverte. Une fois que le StopLoss est déclenché et que la transaction suivante est ouverte, l'ordre StopLoss n'est pas suivi. Si je comprends bien, c'est parce que la variable "ORDER_SL" n'est pas modifiée et que la condition de modification de l'ordre n'est pas remplie ? Et si oui, pourquoi et comment y remédier ?

Voici le code du chalut :

Voici le conseiller expert dans son intégralité :

Avant de chaluter quelque chose, vous devez le sélectionner. Vous devez d'abord parcourir en boucle toutes les positions ouvertes du terminal, en sélectionnant celles qui sont ouvertes par le conseiller expert. A chaque itération de la boucle, si l'ordre requis est sélectionné, appelez votre chalut directement depuis la boucle. Seulement dans ce cas, toutes les positions ouvertes par le Conseiller Expert seront parcourues.

Approximativement :

void Trailing(string sy, int mn) 
{
   int      i, err, ORDER_Type, k=OrdersTotal();
   double   PointX, ORDER_SL, Point_High, Point_Low;
 
   if (sy=="0") sy=Symbol();
   int    dg=MarketInfo(sy, MODE_DIGITS);
   double pt=MarketInfo(sy, MODE_POINT);
   
   if(dg==5 || dg==3) PointX=pt*10;
   if(dg==4 || dg==2) PointX=pt;
   
   for (i=0; i<k; i++) {
      if (OrderSelect(i, SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)        continue;
         if (OrderType()>1)            continue;
         if (OrderMagicNumber()!=mn)   continue;
               
         ORDER_Type=OrderType();
         ORDER_SL=OrderStopLoss();
         Point_High=iHigh(OrderSymbol(),0,2)-TrailingStop*PointX;
         Point_Low=iLow(OrderSymbol(),0,2)+TrailingStop*PointX;
         if (ORDER_Type==OP_BUY)
            if (NormalizeDouble(Point_High-ORDER_SL,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_High,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         if (ORDER_Type==OP_SELL)
            if (NormalizeDouble(ORDER_SL-Point_Low,dg)>0) {
            OrderModify(OrderTicket(),OrderOpenPrice(),Point_Low,OrderTakeProfit(),0,CLR_NONE);
            while(!IsTradeAllowed()) Sleep(100);
            }
         }
      if (!OrderSelect(i, SELECT_BY_POS)) {
         err=GetLastError();
         Print("FUNC Trailing: Ошибка выбора ордера - ", err);
         break;
         }
      }
   return;
}

Je n'ai pas regardé le code de votre chalut, mais je l'ai laissé tel quel (bien que je devrais aussi le modifier - ajouter une vérification pour que le StopLevel ne soit pas dépassé, ou peut-être quelque chose d'autre), et j'ai ajouté seulement une boucle sur les ordres et la normalisation lors de la comparaison des doubles dans le code de votre chalut, et ainsi de suite ... des trucs utiles ... Vous trouverez la solution si vous le voulez :)

ZS. Je n'ai pas revu le code, je l'ai écrit tel quel, il peut donc y avoir des erreurs. C'est juste un exemple.

Maintenant, à l'endroit du code où vous devez rechercher des positions, appelez cette fonction :

Trailing(Symbol(), Magic);
Magic - numéro magique défini dans l'EA comme un entier unique afin qu'il puisse distinguer ses propres ordres des ordres d'un autre EA ou des ordres ouverts manuellement où il n'y a pas de numéro magique du tout.
Si nous laissons Symbol() dans l'appel de fonction, les positions du symbole sur lequel se trouve notre EA seront ciblées.
Vous pouvez également remplacer Symbol() par le nom de la paire de devises dont vous souhaitez consulter les positions.
 
Veuillez m'aider à échanger des données de la manière la plus rapide entre des terminaux MT4 sur un seul ordinateur.
 
trave:
Veuillez m'aider à échanger des données de la manière la plus rapide entre des terminaux MT4 sur un seul ordinateur.

Si vous avez besoin de copier des transactions, alors voici le copieur. Si vous ne faites qu'échanger des données, alors vous devez faire une dll.
Dossiers :
kopirowshik.zip  465 kb
 
drknn:

Si vous voulez copier des transactions, voici le copieur. Si vous souhaitez simplement échanger des données, vous devez créer une dll.

Joyeuses fêtes à vous... :-)))
 
Vinin:

Tu ne devrais pas poster des trucs volés sur ce forum. C'est une route vers le bannissement.

est au sens figuré, cette dinde a été finalisée par moi.
 
Roman.:
Joyeuses fêtes à vous... :-)))
Vladimir, puisque vous avez posté une compilation, vous devez avoir traité ce problème.
Avez-vous trouvé une variante simple et prête à l'emploi pour transférer une variable de terminal à terminal via la mémoire, la variable Windows, etc., c'est-à-dire pas via un fichier ?
Comme variante finale, un indicateur qui dessine la ligne Close[0] d'un autre terminal sur un terminal en ligne. Sur un graphique en tic-tac, cette comparaison apparaîtrait très clairement.