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

 
Où se trouve l'erreur "mauvais nombre de paramètres" ici ?
MA1 = iMA(NULL, 0, MA_Period1, MODE_SMA, PRICE_CLOSE,0);
 
Сvovan-gogan:
Où se trouve l'erreur "mauvais nombre de paramètres" ici ?


Bonjour ! Merci, monsieur, d'avoir posé la question. Heureux d'être utile.

Nous nous inclinons à la taille et répondons intelligemment :

Il vous manque manifestement un paramètre dans iMA :

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
Calcul de la moyenne mobile.
Paramètres :
symbole - Symbole nom du symbole, sur les données duquel l'indicateur sera calculé. NULL signifie le symbole actuel.
cadre temporel - Période. Peut être l'une des périodes du graphique. 0 signifie la période du graphique actuel.
période - Période de calcul de la moyenne pour le calcul de la moyenne mobile.
ma_shift - Décalage de l'indicateur par rapport au graphique des prix.
ma_méthode - Méthode de calcul de la moyenne. Peut être n'importe quelle valeur des méthodes de moyenne mobile.
prix appliqué - Prix utilisé. Peut être n'importe quelle constante de prix.
équipe - Index de la valeur obtenue à partir du tampon de l'indicateur (décalage par rapport à la barre actuelle du nombre de périodes en arrière spécifié).
--------------------------

Le plus probable est que le paramètre est manquant :

ma_shift - Décalage de l'indicateur par rapport au graphique des prix.

Nous attendons avec impatience vos autres questions !

 
Merci beaucoup)
 

J'ai besoin de votre aide.

Cette expression doit être traduite

OrderOpenPrice()-OrderClosePrice()
en nombre de points et calculer le profit ou le stop pour chaque position en fonction du lot. Et enfin imprimer le montant total en % du profit ou du stop.
 
Vodya:

J'ai besoin de votre aide.

Je dois traduire cette expression

au nombre d'articles ......


Sélectionnez d'abord l'élément souhaité.

( OrderOpenPrice() - OrderClosePrice() ) /Point - il s'agit du profit/de la perte de la position sélectionnée en pips.

---------------

En fait, pour vos calculs, il est préférable d'utiliser des fonctions appropriées de I. Kim. Et la tâche sera plusieurs fois plus facile.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225

 
leonid553:


Choisissez d'abord la bonne position.

( OrderOpenPrice() - OrderClosePrice() ) * Point - ce sera le profit/la perte de la position sélectionnée en points.

---------------

En fait, pour vos calculs, il est préférable d'utiliser des fonctions appropriées de I. Kim. Et la tâche sera plusieurs fois plus facile.

https://www.mql5.com/ru/forum/131859

https://www.mql5.com/ru/forum/131859/page3#434225


Merci. Mais je n'ai pas trouvé ce dont j'ai besoin dans sa fonction. Et dans ce cas ( OrderOpenPrice() - OrderClosePrice() ) * Point I fait ( OrderOpenPrice() - OrderClosePrice() ) / Point

En multipliant 000000000000000000, on obtient

 

Oui, bien sûr - j'ai fait une erreur - il faut diviser par Point, pas multiplier du tout !

Par fonction.

C'est très simple. Par exemple. Vous devez connaître le bénéfice (ou la perte) actuel(le) dans la devise de dépôt des transactions ouvertes (supposons) - positions de vente sur EURUSD et positions de vente sur GBPUSD.

Prenons la fonction https://www.mql5.com/ru/forum/131859/page3#434223

et copiez-le à la fin de votre code (en dehors de la fonction START)

Le profit actuel dans la devise de vos positions sera alors (défini à l'intérieur de START) :

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Si vous avez spécifié un magik lors de l'ouverture de ces positions, spécifiez le magik au lieu de "-1".

Si vous avez besoin de connaître le bénéfice d'une position en fonction du symbole actuel, c'est-à-dire dans le graphique, sur lequel l'EA a été placé et est en cours d'exécution, alors :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;

 
leonid553:

Oui, bien sûr - j'ai fait une erreur - il faut diviser par Point, pas multiplier du tout !

Par fonction.

C'est très simple. Par exemple. Vous devez connaître le bénéfice (ou la perte) actuel(le) dans la devise de dépôt des transactions ouvertes (supposons) - positions de vente sur EURUSD et positions de vente sur GBPUSD.

Prenons la fonction https://www.mql5.com/ru/forum/131859/page3#434223

et copiez-le à la fin de votre code (en dehors de la fonction START)

Le profit actuel dans la devise de vos positions sera alors (défini à l'intérieur de START) :

double PROFIT_ EURUSD = GetProfitOpenPosInCurrency(EURUSD, OP_BUY, -1) ;

double PROFIT_FUNTDOLLAR = GetProfitOpenPosInCurrency(GBPUSD, OP_SELL, -1) ;

Si vous avez spécifié un magik lors de l'ouverture de ces positions, spécifiez le magik au lieu de "-1".

Si vous avez besoin de connaître le bénéfice d'une position en fonction du symbole actuel, c'est-à-dire dans le graphique, sur lequel l'EA a été placé et est en cours d'exécution, alors :

double PROFIT_NULL = GetProfitOpenPosInCurrency(NULL, OP_SELL, -1) ;


Merci pour le conseil.

Mais je veux définir le profit comme un pourcentage du dépôt initial et la perte du dépôt à calculer. Cela fonctionne, mais seulement pour chaque transaction, il n'est pas possible de calculer la perte totale.

 
Vodya:


Merci pour le conseil.

Mais je veux calculer le profit en pourcentage du dépôt initial et la perte du dépôt. Je peux le calculer, mais seulement pour chaque transaction, cela ne fonctionne pas au total.

Vous trouverez ci-dessous des fonctions permettant de calculer les pertes et profits.

Si vous avez la valeur de la taille/perte, vous pouvez calculer ce qu'elle représente en pourcentage du dépôt.

 double Profit(){
   double profit=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()>0)profit+=OrderProfit();
    }        
 return(profit);} 

 double Loss(){
   double loss=0; 
   for(int i=OrdersHistoryTotal()-1; i>=0; i--){
     if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue; 
     if(OrderSymbol()!=Symbol())continue;
     if(OrderMagicNumber()!=Magic)continue;
     if(OrderType()>1)continue;
     if(OrderProfit()<0)loss+=OrderProfit();
    }        
 return(loss);} 
 
charter:

Vous trouverez ci-dessous les fonctions permettant de calculer les pertes et profits.

Avec la taille/la valeur des profits et pertes, vous pouvez calculer ce que cela représente en pourcentage du dépôt.


Merci.

Mais quand vous compilez dans cette rangée.

double Profit(){

il s'affiche avec '(' - définition de fonction inattendue

et ce "}". - parenthèses non équilibrées où se trouve le dernier retour (0).

Où doit-il être collé ? Peut-être que je l'ai mis au mauvais endroit

Raison: