[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 970

 
Vinin:

Merci.
 
AlexSTAL:
avertissements

Ma langue maternelle est l'ukrainien. Mais merci de votre attention.
 

Au secours ! Si j'ai 2 pendentifs mis en place et que l'un d'entre eux est fermé par Take Profit, j'ai besoin que le 2ème soit supprimé. Comment l'écrire ? Où se trouve l'erreur dans le code ?

int pos;
for (pos=0; pos<OrdersTotal(); pos++)
{
if (OrderSelect(pos, SELECT_BY_POS))
{
if (OrderClosePrice() >= OrderTakeProfit())
{
int i;
for (i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if (OrderDelete(OrderTicket()))
{
Print("Ордер удален");
       }
      }
     }
    }
break;
   }
  }
 }
return(0);
}
 

Bonsoir (j'ai oublié de vous saluer dans les messages précédents). Pouvez-vous me conseiller sur la fonction à utiliser pour faire ce qui suit. Dans l'Expert Advisor, un ordre est ouvert par l'indicateur sur la bougie actuelle (soit le numéro = 9). Si après l'ordre d'ouverture, il (l'indicateur) redessine (et après la bougie de fermeture 9 n'est pas apparu), alors je dois APRÈS la bougie de fermeture 9 ordre fermé.

 

Il existe des paramètres d'entrée :

bool Mart - si vrai, cela signifie qu'il y avait un ordre fermé sur le stop, donc faire double.

TradeInf - permission de négocier, si elle est vraie, cela signifie qu'il n'y a pas d'ordres négociés et que nous pouvons négocier)

Il y a le code suivant :
if (Mart == true && TradeInf==true)
{
Alert("double le lot") ;
LotS=NormalizeDouble(LotS*martin,2) ;
Alert("taille du lot",LotS) ;
}
if (Mart == false && TradeInf==true)
{
Alert("Reset lot") ;
LotS=lot ;
}

Puis dans les commandes OpenOrder, taille du lot = LotS.

Ainsi, s'il trouve un lot fermé par lot, la taille du lot devient -9315605757223323600
. Pourquoi ?

 

Bonjour, Je calcule un lot à partir d'une valeur de solde selon un principe différent...

Je me retrouve avec un nombre comme 0,2345, comment puis-je couper le double sans l'arrondir, je veux dire :

à un chiffre - 0,2

à deux chiffres - 0,23

à trois - 0,234 et ainsi de suite...

 
akacuk21:

Bonjour, Je calcule un lot à partir d'une valeur de solde selon un principe différent...

Je me retrouve avec un nombre comme 0,2345, comment couper le double sans l'arrondir, je veux dire :

à un chiffre - 0,2

à deux chiffres - 0,23

à trois - 0.234 etc...


double lot = NormalizeDouble(LOT,2)

lot - pour passer des commandes

LOT - formule de calcul de la commande

"2" - arrondi à 2 décimales.

 
Merci pour la réponse, mais dans le cas de NormalizeDouble, un nombre comme 0,29 arrondi à un chiffre sera 0,3 et j'ai besoin qu'il soit 0,2.
 
C'est contraire aux règles de l'arrondi, alors attendons d'entendre ce que les anciens ont à dire.
 
Sys15975382:
C'est contraire aux règles de l'arrondi, attendons ce que les anciens camarades ont à dire.

Euh... Messieurs. On ne peut pas normaliser des choses comme ça... :) Voici un peu d'aide :

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.05.2008                                                     |
//|  Описание : Возвращает нормализованное значение торгуемого лота.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    lo - нормализуемое значение лота.                                       |
//|    ro - способ округления          (   False    - в меньшую,               |
//|                                        True     - в большую сторону)       |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//+----------------------------------------------------------------------------+
double NormalizeLot(double lo, bool ro=False, string sy="") {
  double l, k;
  if (sy=="" || sy=="0") sy=Symbol();
  double ls=MarketInfo(sy, MODE_LOTSTEP);
  double ml=MarketInfo(sy, MODE_MINLOT);
  double mx=MarketInfo(sy, MODE_MAXLOT);

  if (ml==0) ml=0.1;
  if (mx==0) mx=100;

  if (ls>0) k=1/ls; else k=1/ml;
  if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;

  if (l<ml) l=ml;
  if (l>mx) l=mx;

  return(l);
}