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

 
Integer:


Eh bien, nous y voilà, tous en même temps... Modérateurs, il serait préférable de maintenir l'ordre là où il doit être surveillé. Il y a une folie qui se déroule sur le forum, et où sont les modérateurs ? Si tu es coincé, casse-le, envoie-le, il y a des modérateurs. Peut-être qu'il est temps d'arrêter les conneries ?

Ça me fait mal de voir les géants du forum se battre pour rien. Il s'agit d'un forum pour les programmeurs d'une ressource très puissante. Soyez poli. Suggestion :

1. Si une tentative est faite pour passer à des personnalités, même de manière subreptice, bannissement pour 24 heures ;

2. insulter une personne - interdiction d'une semaine ;

3. insultes répétées avec jurons - interdiction d'un mois ;

Ignorer tous les avertissements précédents et répéter les violations d'une manière brutale - bannissement permanent.

 
yosuf:

Il est douloureux de voir les géants du forum se battre pour des broutilles. Il s'agit d'un forum de programmeurs d'une ressource puissante. Soyez poli. Suggestion :

1. Si une tentative est faite pour passer à des personnalités, même de manière subreptice, bannissement pour 24 heures ;

2. insulter une personne - interdiction d'une semaine ;

3. insultes répétées avec jurons - interdiction d'un mois ;

4. ignorer tous les avertissements précédents et répéter les violations sous une forme sévère - bannissement perpétuel.



Je suis tout à fait d'accord, sauf que, malheureusement, les modérateurs ici ne sont pas assez compétents pour détecter "quelque chose de déguisé". C'est la même chose avec tous les diplomates sophistiqués ici.
 

Désolé pour les offtops, mais peut-être que quelqu'un peut me dire de quoi il s'agit :

Du manuel :

"Il est possible de passer des paramètres par référence. Dans ce cas, la modification de ces paramètres affectera les variables correspondantes dans la fonction appelée passée par référence. Les éléments des tableaux ne peuvent pas être passés par référence. Les paramètres peuvent être passés par référence uniquement dans les limites d'un seul module, cette possibilité n'est pas offerte aux fonctions de bibliothèque. Pour spécifier que le paramètre est transmis par référence, le modificateur & doit être placé après le type de données.

Les tableaux peuvent également être transmis par référence, tous les changements seront reflétés dans le tableau initial. Contrairement aux paramètres simples, les tableaux peuvent également être transmis par référence dans les fonctions de bibliothèque".

Afin de transmettre une valeur par référence à partir d'une fonction de bibliothèque, je dois utiliser un proxy sous la forme d'un tableau de dimension unitaire,

Existe-t-il d'autres solutions de contournement ?

Et pourquoi est-ce fait de cette façon ?

 
ALXIMIKS:

Désolé pour les offtops, mais peut-être que quelqu'un peut me dire de quoi il s'agit :

Du manuel :

"Il est possible de passer des paramètres par référence. Dans ce cas, la modification de ces paramètres affectera les variables correspondantes dans la fonction appelée passée par référence. Les éléments des tableaux ne peuvent pas être passés par référence. Les paramètres peuvent être passés par référence uniquement dans les limites d'un seul module, cette possibilité n'est pas offerte aux fonctions de bibliothèque. Pour spécifier que le paramètre est transmis par référence, le modificateur & doit être placé après le type de données.

Les tableaux peuvent également être transmis par référence, tous les changements seront reflétés dans le tableau initial. Contrairement aux paramètres simples, les tableaux peuvent également être transmis par référence dans les fonctions de bibliothèque".

1. Pour passer une valeur par référence à partir d'une fonction de bibliothèque, je dois utiliser un proxy sous la forme d'un tableau de dimension unitaire,

Existe-t-il d'autres solutions de contournement ?

2. pourquoi le faire de cette manière ?

1. Bien. Il n'y a pas d'autre moyen dans MQL4.

2. Quoi exactement ? Si nous parlons du passage par référence, c'est pour passer de grands volumes de données (supérieurs à la longueur du type de base). Pas pour charger la pile avec eux. Habituellement, les structures, les classes et les tableaux sont transmis par le pointeur ou la référence. Bien que la classe et la structure puissent être renvoyées de la fonction par le biais de return. Vous pouvez également renvoyer une référence ou un pointeur vers une classe, une structure ou un tableau.

 

J'ai ce problème :

Lorsque je modifie le stoploss, de temps en temps, il ne parvient pas à placer un stop sur le dernier ordre ouvert. Cela se produit assez rarement, mais il y a des poussées de temps en temps.

Je n'ai pas d'erreurs dans les prix. Il arrive qu'une ordure ne place pas un ordre sur la dernière position, après quoi l'ordre est recalculé.

Pouvez-vous me dire où je me suis trompé ?

//+-------------------------------------------------------------------------------------+
//|                        Управление StopLoss, TakeProfit                              |
//+-------------------------------------------------------------------------------------+
bool ProfitManagement()
{
double StopLossBuy = BuyAP+Profit*Point;                             //Вычисляем StopLoss
double TakeProfitBuy = BuyAP + Profit*Point;                  //Вычисляем цену TakeProfit
double StopLossSell = SellAP-Profit*Point;
double TakeProfitSell = SellAP - Profit*Point;
RefreshRates();
for(int good = 0; good < OrdersTotal(); good ++)     // Выбираем со всего массива ордеров
 {
 if(OrderSelect (good, SELECT_BY_POS, MODE_TRADES))             
 if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
 if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)  //Выбираем ордера эксперта
   { 
//-------------------------Order Buy-----------------------------------------------------  
if (BuyCount >1)                                           //Если открыты длинные позиции
 {
 if (BuyAP < Bid)                                                //Если  мы идем по рынку  
 if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)           // Профит не равен нужному
 if (Bid - StopLossBuy > DedZone)                    // Уровень достаточно удален от цены
 if (WaitForTradeContext())                                // Свободен ли торговый поток?
 if (OrderType() == OP_BUY)                                        // Выбираем ордера Buy
 if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime))    // Изменяем StopLoss
  {
 Alert (Symbol()," Хрень со стопами! ",   GetLastError());
 return(false);
  }

// ну и далее по логике
 
yosuf:

Il est douloureux de voir les géants du forum se battre pour des broutilles. Il s'agit d'un forum de programmeurs d'une ressource puissante. Soyez poli. Suggestion :

1. Si une tentative est faite pour passer à des personnalités, même de manière subreptice, bannissement pour 24 heures ;

2. insulter une personne - interdiction d'une semaine ;

3. insultes répétées avec jurons - interdiction d'un mois ;

4. ignorer tous les avertissements précédents et répéter les violations sous une forme sévère - bannissement perpétuel.


Et le peloton d'exécution quand ? Il n'y en aura pas ?
 
Limita:

J'ai ce problème :

Lorsque je modifie le stoploss, de temps en temps, il ne parvient pas à placer un stop sur le dernier ordre ouvert. Cela arrive assez rarement, mais cela se produit de temps en temps.

Je n'ai pas d'erreurs dans les prix. Il arrive qu'une ordure ne place pas un ordre sur la dernière position, après quoi l'ordre est recalculé.

S'il vous plaît, dites-moi où je me suis trompé ?

Expliquez cette séquence en mots :

   //-------------------------Order Buy-----------------------------------------------------  
         if (BuyCount >1) {
            if (BuyAP < Bid)                                      //Если  мы идем по рынку, то выполнится следующая  
            if (MathAbs(OrderStopLoss() - StopLossBuy) >= Tick)   // Профит не равен нужному
            if (Bid - StopLossBuy > DedZone)                      // Уровень достаточно удален от цены
            if (WaitForTradeContext())                            // Свободен ли торговый поток?
            if (OrderType() == OP_BUY)                            // Выбираем ордера Buy
            if (!OrderModify(OrderTicket(), 0, NP(StopLossBuy), 0, 0, Lime)) {
               Alert (Symbol()," Хрень со стопами! ",   GetLastError());
               return(false);
            }

En termes simples, comment diriez-vous à un camarade qui est loin de la programmation

 

Nous voulons gagner, par exemple, 50 pips par position. StopLoss est égal à notre prix moyen + 50 pips .

Si nous avons une position longue ouverte, nous gagnons une certaine somme d'argent sur celle-ci. Nous fixons le StopLoss à un certain niveau. Laissez le marché se développer davantage. Si nous ne gagnons pas encore assez d'argent, nous attendons de commencer à en gagner suffisamment.

Nous ouvrons une autre position dans la direction de l'achat. Le prix moyen change, nous changeons le StopLoss.

Et bien sûr, nous fixons des stops, suivons les règles d'un courtier (flux de transactions, niveau de stop), sinon le courtier ne nous comprendra pas :))).

J'espère avoir réussi à expliquer :))

 
Limita:

Nous voulons gagner, par exemple, 50 pips par position. StopLoss est égal à notre prix moyen + 50 pips .

Si nous avons une position longue ouverte, nous gagnons une certaine somme d'argent sur celle-ci. Nous fixons le StopLoss à un certain niveau. Laissez le marché se développer davantage. Si nous ne gagnons pas encore assez d'argent, nous attendons de commencer à en gagner suffisamment.

Nous ouvrons une autre position dans la direction de l'achat. Le prix moyen change, nous changeons le StopLoss.

Et bien sûr, nous fixons des stops, suivons les règles d'un courtier (flux de transactions, niveau de stop), sinon le courtier ne nous comprendra pas :))).

J'espère avoir réussi à expliquer :))

Ouais... Je voulais dire - la logique de ces lignes ...

Vous avez là une logique ambiguë, car il n'y a pas de crochets. Ce qui signifie que toutes les lignes ne seront pas satisfaites si la condition précédente est satisfaite.

 
Limita:

J'ai ce problème :

Lorsque je modifie le stoploss, de temps en temps, il ne parvient pas à placer un stop sur le dernier ordre ouvert. Cela se produit assez rarement, mais il y a des poussées de temps en temps.

Je n'ai pas d'erreurs dans les prix. Il arrive qu'une ordure ne place pas un ordre sur la dernière position, après quoi l'ordre est recalculé.

Dites-moi où j'ai fait une erreur.


for (int good = 0; good < OrdersTotal(); good ++){                                // Выбираем со всего массива ордеров
    }    

Il est préférable de procéder de cette façon (quelqu'un a écrit qu'il avait des problèmes pour modifier ou supprimer des commandes avec votre façon de procéder) :

for (int good = OrdersTotal()-1; good >= 0; good --){     // Выбираем со всего массива ордеров
    }  

Et pourquoi l'huile et le beurre ? (laisser une chose seule)

 if (OrderSymbol() != Symbol() || OrderMagicNumber() !=  MagicNumber) continue;
 if (OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber) {          //Выбираем ордера эксперта
    }