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

 
borilunad:


Il ne reste plus qu'une chose à faire, l'inviter à investir nos comptes ! :))

D'accord ! Surtout - le compte d'investissement est déjà prêt! :-)
 

Bonjour.

Nous avons besoin de la fonction qui calcule le lot par incréments. Qu'est-ce qu'il serait possible d'ajuster, par exemple, pour chaque augmentation de 500 lots à venir ?

So depo 1000 - lot 0.1

Depo 1500 - lot 0.15

2000 - lot 0.2

Veuillez afficher la fonction.

 

Bonjour ! Que signifie l'état de vide ? Lorsque le prix augmente de 35 pips, mon stoploss se déplace de 10 pips sous l'ordre, c'est-à-dire que sa distance par rapport au prix est de 45 pips.

Ou de quel genre d'écart parlons-nous ?

 
T-G:

Bonjour.

Vous avez besoin de la fonction pour calculer le lot de manière incrémentielle. Il serait possible de l'ajuster, par exemple, pour chaque augmentation de 500 lots.

So depo 1000 - lot 0.1

Depo 1500 - lot 0.15

depo 2000 - lot 0.2

Veuillez afficher la fonction.


C'est possible sans fonctions :

extern double depo = 1000.0;

extern double lot    = 0.1; 

double Lot; 

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

int start()

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

double Equ = AccountEquity();

Lot  = NormalizeDouble(lot*Equ/depo,2);
 
T-G:

Bonjour.

Nous avons besoin de la fonction qui calcule le lot de manière incrémentielle. Il serait possible de l'ajuster, par exemple, pour chaque augmentation de 500 lots.

So depo 1000 - lot 0.1

Depo 1500 - lot 0.15

Depo 2000 - lot 0.2

Veuillez afficher la fonction.

Vous pourriez le faire de cette façon :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Расчитываем размер лота (ступенчато)                                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_Lots (double fd_BeginLot = 0.1,        // начальный размер лота
                  int fi_BeginDepo = 1000,         // начальный размер депозита
                  int fi_IncrementDepo = 500,      // приращение депозита
                  double fd_IncrementLot = 0.05)   // приращение лота
{
    double ld_Balance = AccountBalance();
//----
    if (ld_Balance < fi_BeginDepo + fi_IncrementDepo) return (fd_BeginLot);
    int li_K_Lot = (ld_Balance - fi_BeginDepo) / fi_IncrementDepo;
//----
    return (fd_BeginLot + fd_IncrementLot * li_K_Lot);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

n'oubliez pas de normaliser le lot.

 
Délivré un ticket au-dessus du départ. Maintenant, il ne modifie qu'une seule commande, mais c'est une autre erreur ! Sinon, la variable a été déclarée à l'intérieur des ifs.
 
Dimka-novitsek:

Bonjour ! Qu'est-ce qu'une condition d'écart ? Lorsque le prix augmente de 35 pips, mon stoploss se déplace de 10 pips sous l'ordre, c'est-à-dire que sa distance par rapport au prix est de 45 pips.

Ou de quel genre d'écart parlons-nous ?


Bonjour, tête rafraîchie !

Pendant que nous envoyons, recevons et exécutons un ordre de modification, le prix ne reste pas immobile, à la hausse ou à la baisse, qui sait !

#include <stderror.mqh>
#include <stdlib.mqh> 
//-------------------

extern int prev = 30;//зазор! Для 5-знака!
extern int sl   = ??;
extern int tp   = ??;
//------------------
int start()
{
//------------------
//----------------------/  Stops & Trailing  \----------------------\\
  for(int i = 0; i < OrdersTotal(); i++)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() != Symbol() && OrderMagicNumber() != Magic) continue;
      if(OrderCloseTime() != 0) continue;
      if(OrderType() == OP_BUY)
      {
        if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
        {
//----------------------
          if(OrderStopLoss() == 0)
          if(Bid < OrderOpenPrice() && Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          if(Bid > NormalizeDouble(OrderOpenPrice()-sl*Point+prev*Point,Digits))
          {
            SL = NormalizeDouble(OrderOpenPrice()-sl*Point,Digits);
            if(Bid < NormalizeDouble(OrderOpenPrice()+tp*Point-prev*Point,Digits))
            {
              TP = NormalizeDouble(OrderOpenPrice()+tp*Point,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,TP,0,Blue);return(0);
        } } }
//-----------------------
//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3)
  {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0)
    { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(3000); RefreshRates(); ModifyCnt++;
} } }

Et pour Sall, c'est opportunément l'inverse ! Bonne chance pour le comprendre sans commentaire, qui est redondant à mon avis !

Et, s'il vous plaît, regardez dans le dictionnaire explicatif russe, afin que vos posts soient plus lisibles.

Je vérifie parfois, car cela fait plus de 10 ans que je pense dans une autre langue et je ne suis pas au courant de vos "innovations"... :))

 
Dimka-novitsek:

Bonjour ! Erreur de modification de commande 4051. J'ai réfléchi pendant une heure. Il semble que ce soit le bon paramètre ! !! Pour faire une longue histoire courte. Le paramètre prix est le prix d'ouverture de l'ordre, OrderOpenPrice(), il est standard.

Notre prix stop est 10 points en dessous du prix ouvert, et nous avons mémorisé le prix. Nous le stockons dans la variable tsena lors de l'ouverture de la commande.

Nous avons deux commandes, une avec un bénéfice et une sans. Il semble que ce soit clair. Quelle est l'erreur ? Qu'est-ce que ça pourrait être d'autre ?

Oui, la condition semble être claire, bien qu'elle ne soit pas vraiment pertinente. C'est-à-dire que le prix a bougé de 30 points, la condition a fonctionné (tsena+30*Point).

Nous avons défini perenos=true une fois ; Ces conditions semblent réellement fonctionner.

Je ne sais pas comment y penser.

En fait Wear once perenos=true ; Ces conditions n'avaient pas à être respectées, puisqu'il ne portait nulle part.

Cette ligne :

        int tacket = OrderSend (Symbol(), OP_BUY, lot, NormalizeDouble (Ask, Digits), 5, NormalizeDouble (Ask - (35 * Point), Digits), 
            NormalizeDouble (Ask + (45 * Point), Digits), NULL, 450, 0, CLR_NONE);

et ensuite utiliser (pas sur ce tick) cette variable pour modifier un ordre avec tick = 0 (la variable sera réinitialisée), montre que vous ne connaissez pas les bases - commencez par les concepts de variables locales et globales.

Et ouvrir une copie de l'ordre qui vient d'être ouvert après 2 secondes - C'EST LE PLUS GRAND PILOTAGE ! !! - Je pleure... :)))

 
MERCI ! !!
 
borilunad:

Vous pouvez le faire sans fonctions :

Avant de vous précipiter pour répondre, vous devriez d'abord avoir pris la peine de lire attentivement les conditions (ce que la personne veut) et ensuite prendre et calculer les résultats de votre code.
Pour commencer, la conversation porte sur le dépôt, et il s'agit de AccountBalance(). Equ/depo est un nombre fractionnaire, et de quel type d'échelonnement peut-on parler ?
Raison: