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

 
#propriété indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 blue
//--------------------------------------------------------------------
double Buffer[] ;
//--------------------------------------------------------------------
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY,2) ;
SetIndexBuffer(0,Buffer ;)
retour(0) ;
}
// -------------------------------------------------------------------
int deinit()
{
retour(0) ;
}
//--------------------------------------------------------------------
int start()
{
int StartBar = Bars - IndicatorCounted() - 1 ;
for(int i = StartBar ; i >= 0 ; i--)
Buffer[i] =(iClose("EURGBP",0,i)-iOpen("EURGBP",0,i))/MarketInfo("EURGBP",MODE_POINT)+
(iClose("EURAUD",0,i)-iOpen("EURAUD",0,i))/MarketInfo("EURAUD",MODE_POINT) ;
retour(0) ;
}

//---------------------------------------------------------------------

Désolé, je ne sais pas comment formater le texte avec du code .

Il s'agit d'un simple indicateur de compteur (somme des corps d'instruments en pips sur la période actuelle). Chaque barre de l'histogramme commence par "O" et se termine à la clôture de l'intervalle de temps. Par exemple, le timeframe actuel est H1, à 12.00 il montre "0" et à 13.00 il montre "+20" et le graphique à barres indique clairement = +20. Mais pendant cette heure les lectures étaient -50 et +60, mais l'indicateur ne les montre pas, nous devrions ajouter un tampon pour le Buffer[i] bas et un pour le Buffer[i] haut. Nous ne pouvons pas utiliser High et Low car ces valeurs arrivent à des moments différents pour chaque symbole inscrit dans l'indicateur. Je veux que le deuxième tampon fixe la valeur maximale de Buffer[i] du plus petit graphique (M5) sur le graphique actuel (H1), et que le troisième tampon fixe la valeur minimale de Buffer[i] du plus petit graphique (M5) sur le graphique actuel (H1). Mon cher, qui peut conseiller quoi ?

 
vitek2010:

Je suis désolé, je ne sais pas comment coder le texte.

Nous ne pouvons pas utiliser High et Low parce que ces valeurs arrivent à des moments différents pour chaque instrument spécifié dans l'indicateur.

Et la fermeture de chaque instrument a lieu au même moment, pendant la durée de vie de la bougie ? C'est donc une opinion erronée, les tiques arrivent toutes à des moments différents)))

 
trader781:
Le fait est qu'il y aura TOUJOURS des ordres perdants avec un certain lot qui devront également être couverts par le reste des ordres. Le déclencheur est l'heure de fermeture. Si nous en fermons ne serait-ce qu'un, toute la chaîne sera perdue. Par conséquent, la question est de savoir comment rechercher le prix moyen de tous ceux qui ont été sélectionnés.

Nous devons donc passer en revue tous les ordres "nécessaires" dans la boucle et calculer ce prix moyen. Ensuite, lorsque le prix actuel s'écarte du prix moyen calculé dans la direction souhaitée, nous devons charger à nouveau la boucle avec modification de tous les ordres.

Si nous ne voulons pas lire le prix moyen à chaque tick, nous pouvons le lire uniquement lorsque nous ajoutons un autre ordre.

 
Alexey Viktorov:

Nous devons donc passer en revue tous les ordres "nécessaires" dans la boucle et calculer ce prix moyen. Ensuite, lorsque le prix actuel s'écarte du prix moyen calculé dans la direction souhaitée, nous devons charger à nouveau la boucle avec modification de tous les ordres.

Si nous ne voulons pas lire le prix moyen à chaque tick, il peut être lu uniquement lorsqu'un autre ordre est ajouté.

Si vous le voulez bien, expliquez-moi comment je dois calculer le prix moyen lorsque la grille d'ordres est distribuée de manière inégale (où OrderType()<2). C'est tout.
 
Vitalie Postolache:

Et la fermeture de chaque instrument intervient au même moment, pendant la durée de vie de la bougie ? Je ne parle pas de ticks, je parle de fixer les lectures minimum et maximum du tampon de l'indicateur).

Je ne parle pas des ticks, je disais que nous devrions fixer les lectures minimales et maximales du tampon de l'indicateur calculé sur une plus petite échelle de temps, dans l'écart d'une plus grande échelle de temps, je vais essayer de le montrer sur la capture d'écran Dans ce cas, la plus petite échelle de temps est H1 (mais il a différentes échelles de temps) :

[img]https://charts.mql5.com/13/642/eurgbp-w1-instaforex-group.png[/img]

Je vais considérer la semaine 05.12 (croix rouge) ce graphique à barres par l'indicateur montré ci-dessus montre clairement que le mouvement total de la paire à la fin de la semaine était descendant de 95 points, mais il ne montre pas combien de points étaient descendants ou ascendants pendant la semaine.

Et ici sur cet écran vous pouvez voir la dynamique de cet indicateur sur le graphique H1 pendant cette semaine :

[img]https://charts.mql5.com/13/642/eurgbp-h1-instaforex-group.png[/img]

Je vois que l'indicateur avait une valeur minimale de 400 et qu'après il est monté à 700 et a clôturé à 160 (la différence de chiffres sur les deux écrans n'est pas importante).

j'ai besoin de toutes ces valeurs dans un indicateur dans une barre de l'histogramme et le minimum, le maximum et la fermeture (dans ce cas sur le wiki). idéalement sur le timeframe actuel de celui que vous spécifiez dans les paramètres du timeframe.

je l'ai fait avec mt4 insta copiant du site mcl5

 
trader781:
Si ce n'est pas difficile, expliquez-moi comment je peux calculer le prix moyen lorsque la grille d'ordres est inégalement répartie (où OrderType()<2). C'est tout.

J'espère que vous pourrez trouver une solution.

for(int i=0; i<OrdersTotal(); i++) {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
   if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY) {
      _BuyProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _BuyLot+=OrderLots(); //совокупный лот по всем Sell
    }
    if(OrderType()==OP_SELL) {
      _SellProfit+=OrderProfit()+OrderSwap()+OrderCommission(); // совокупный профит  по всем Sell
      _SellLot+=OrderLots(); //совокупный лот по всем Sell
    }
}}}

double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);

if(_BuyLot  > 0) { BuyAwerage = NormalizeDouble(Bid-(_BuyProfit/(TickValue*_BuyLot))*_Point,_Digits); } else { BuyAwerage=0; }// безубыток buy
if(_SellLot > 0) { SellAwerage= NormalizeDouble(Ask+(_SellProfit/(TickValue*_SellLot))*_Point,_Digits); } else { SellAwerage=0; } // безубыток sell
if(_BuyLot-_SellLot! = 0) { AllAwerage= NormalizeDouble(((_BuyLot>_SellLot)?Bid:Ask)-((_BuyProfit+_SellProfit)/(TickValue*(_BuyLot-_SellLot))*_Point),_Digits); } else { AllAwerage=0; } // общий безубыток
 
Vitaly Muzichenko:

J'espère que vous y arriverez.



double TickValue= MarketInfo(_Symbol,MODE_TICKVALUE);


Peut-on parler un peu de celui-ci ? Je ne comprends pas l'intérêt de ce code.
 
trader781:
On peut en parler un peu ?

Le montant de la variation minimale du prix d'un instrument dans la devise du dépôt.

La valeur du pip est différente pour chaque instrument et n'est pas égale à "1" comme par exemple pour l'EUR/USD.

 
Vitaly Muzichenko:

Le montant de la variation minimale du prix d'un instrument dans la devise du dépôt.

La valeur du pip est différente pour chaque instrument et n'est pas égale à "1" comme par exemple pour l'EUR/USD.

Yep, maintenant je vois

il s'avère que vous pouvez également définir un arrêt flottant, par exemple (eqi=balance*1.1) ou (eqi=balance*0.9)

existe-t-il de tels outils ?

 
trader781:

Yep, je l'ai maintenant.

mais il s'avère que vous pouvez également définir un arrêt flottant par exemple (eqi=balance*1.1) ou (eqi=balance*0.9)

existe-t-il de tels outils ?

Vous avez déjà un prix spécifique à partir duquel vous n'avez plus qu'à chaluter en utilisant l'analogue d'un chalut simple, mais un chalut simple est basé sur le prix d'ouverture de la position = OrderOpenPrice() , alors qu'ici il est basé sur le prix moyen calculé et modifie toutes les positions d'un niveau.
Raison: