[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 39

 
forexnew:

Si vous avez initialement défini le rapport entre StartBalance et StarLots en fonction des risques fixés, il faut alors déterminer la valeur de l'équité :

si(AccountEquity()<StartBalance) Top-up = (AccountBalance()+(StartBalance-AccountEquity()))*New Lot/StarLots

Ceci exclut AccountCredit(). Si je vous comprends bien, bien sûr.


Une formule y est déjà donnée :

Vous pouvezcalculer le volume nécessaire (supplémentaire) à l'aide de la formule : V(extra)= (SumInv / Equity) * Lots

Où :
SumInv - Montant du nouvel ajout - sa taille doit être connue d'une manière ou d'une autre, calculée par programme pour le moment précis (connu au préalable),
Fonds propres - Fonds propres du compte au même moment - cette valeur est obtenue à partir de la fonction d'obtention d'informations sur le compte de trading :

double AccountEquity( ) 
Возвращает сумму собственных средств для текущего счета.  


Lots - Volume d'actifs achetés précédemment (au départ), disons 1 lot.
Cela signifie que pour corriger les positions, vous devez connaître la valeur de la variableSumInv...

Quelle est la meilleure façon de résoudre le calcul programmatique de cette variable, à condition qu'elle ne soit pas égale à zéro ?

 
Roman.:


La formule y est déjà donnée :

Vous pouvezcalculer le volume nécessaire (supplémentaire) à l'aide de la formule : V(extra) = (SumInv / Equity) * Lots

Où :
SumInv - Montant du nouvel ajout - sa taille doit être connue d'une manière ou d'une autre, calculée par programme pour le moment précis (connu au préalable),
Fonds propres - Fonds propres du compte au même moment - cette valeur est obtenue à partir de la fonction d'obtention d'informations sur le compte de trading :


Lots - Volume d'actifs achetés précédemment (au début), disons 1 lot.
Cela signifie que pour corriger les positions, vous devez connaître la valeur de la variableSumInv...

Quelle est la meilleure façon de résoudre le calcul programmatique de cette variable, pour autant qu'elle ne soit pas nulle ?

Je ne sais pas sur quoi baser vos calculs si vous ne savez pas de combien de lots vous voulez augmenter votre lot de départ. C'est un facteur purement humain :

SumInv = "Je veux augmenter mon solde de x quid" + StartBalance-Equity

Ou vous ne connaissez pas l'équilibre de départ optimal sur lequel vous appuyer? Il doit être calculé en fonction de la taille des stops et de l'effet de levier.

Dans mon EA, tous les calculs sont basés sur la taille des stops, donc le solde de départ optimal (il n'est pas forcément égal au solde initial), puis il y a un calcul automatique du lot de départ.


 
forexnew:

Je ne sais pas par quoi commencer quand on ne sait pas de combien de lots on veut augmenter le lot de départ. C'est un facteur purement humain :

SumInv = "Je veux augmenter mon solde de x quid" + StartBalance-Equity

Ou ne connaissez-vous pas l'équilibre optimal de départ? Il doit être calculé à partir de la taille des stops et de l'effet de levier.

Dans mon EA, tous les calculs sont basés sur la taille des stops, d'où le solde de départ optimal (il n'est pas forcément égal au solde initial), et ensuite va le calcul automatique du lot de départ.


Tout est connu. Le lot initial est augmenté en proportion des dépôts effectués selon la formule ci-dessus. Une fois encore, lisez le lien pour prendre connaissance des informations - ajustements du volume de la position lors du dépôt/retrait de fonds.
Vous, si vous êtes sur le sujet - essayez simplement de répondre à la question : Comment déterminer le logiciel (en utilisant un algorithme, ou toutes les formules, si vous ne pouvez pas directement à la fonction d'information sur le compte ) - ont été des ajouts à un compte de négociation à quel moment (précédemment connu) dans la journée (disons, à 00 heure). Les autres variables permettant de calculer le volume supplémentaire dans la formule ci-dessus, nécessaire pour compléter le volume précédent (de départ), sont connues.

Les gars, dites-moi...

 
Roman.:

Tout est connu. Le lot initial est augmenté en proportion des dépôts effectués selon la formule ci-dessus. Encore une fois, lisez les informations du lien - ajustements du volume de la position lorsque vous déposez/retirez des fonds.
Vous, si vous êtes sur le sujet - essayez simplement de répondre à la question : Comment déterminer le logiciel (en utilisant un algorithme, ou toutes formules, si vous ne pouvez pas directement à la fonction d'information sur le compte) - y avait-il des ajouts à un compte de trading à un moment (précédemment connu) de la journée (disons à 00 heure). Les autres variables permettant de calculer le volume supplémentaire dans la formule ci-dessus, nécessaire pour compléter le volume précédent (de départ), sont connues.

Les gars, un indice...

Maintenant, c'est clair. Supposons que nous ayons besoin de calculer de manière programmatique s'il y a eu une recharge/un retrait au cours du dernier jour. Je joins l'indicateur. Il vous suffit de saisir le solde qui était au début de la période de calcul et le nombre de jours de calcul. J'espère maintenant vous avoir bien compris.

Dossiers :
balans_9.mq4  6 kb
 

Bonjour à tous !

Je suis à nouveau avec mon indicateur. Sur les conseils de mes vieux amis, j'ai essayé de construire une boucle qui calcule la valeur d'un point de la ligne et de remplir le tableau de l'indicateur avec ces valeurs.

On dirait qu'elle y arrive un par un. Ensemble, ils accrochent le terminal :=(

//pour (i=Vnf2;i>0;i--)

// {int k=Vnf2 ;

// ArrayResize(Buf_DN,Vnf2+1) ;

// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k) ;

// k-- ;

// }

 

Une petite erreur, mais elle est toujours présente dans cette variante.

int k=Vnf2 ;

pour (i=Vnf2;i>0;i--)

// {

// ArrayResize(Buf_DN,Vnf2+1) ;

// Buf_DN[i]= EquationDirect(Vnf2,VMF2,Vnf1,VMF1,k) ;

// k-- ;

// }


 
Вопрос:  как сделать так ,чтобы эксперт мог открыть только одну позицию?

int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ko=0, ot;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) ko++;
        }
      }
    }
  }
  return(ko);

}

использую это примерно так:

if(NumberOfOrders(NULL)==0)
            {
            Print("Вошли в цикл");
            
             
                  Print("Покупаю");
                  NumderOrder=OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-50*Point,Ask+50*Point,"1",0,0,Red);
                  Print(GetLastError());

                  }

В результате он все равно открывает несколько подряд не закрыв старую. Не могу понять в чем дело. Помогите плиз.

 
nuan:
if (ot>1      У ордеров  Buy ot=0, мож в этом дело?
 
nuan:
Vous utilisez les fonctions d'Igor Kim. Il a des définitions pour les ordres et les positions. Les ordres sont des ordres en attente et les positions sont des positions sur le marché.
Vous essayez de calculer le nombre d' ordres en attente , et non le nombre de positions ouvertes sur le marché.
 
Merci beaucoup.
Raison: