Erreurs, bugs, questions - page 2136

 
Vitaly Muzichenko:

Pourquoi ?

Parce que SILVER,H1 : stoploss invalide pour la fonction OrderModify

OrderStopLoss() = 15,15 devrait être = 15,155
 
Комбинатор:
Je le veux pour OrderModify, pas pour Print.
 
Igor Golieniev:

Parce que SILVER,H1 : stoploss invalide pour la fonction OrderModify

Il y aura un "0" dans le troisième chiffre, et cela ne résoudra pas le problème.

Vous devez chercher ailleurs

 
Igor Golieniev:
NormalizeDouble(value,3);
 
Pavel Kolchin:

C'est fou : j'ai commencé à modifier la commande que je venais d'ouvrir... et comment ! !! 1912619.624 !!!

ARGENT,M15 : modifier #1 vendre 0.01 ARGENT à 16.965 sl : 1912619.624 tp : 0.000 ok

 
Igor Golieniev:

C'est fou : j'ai commencé à modifier la commande que je venais d'ouvrir... et comment ! !! 1912619.624 !!!

ARGENT,M15 : modifier #1 vendre 0.01 ARGENT à 16.965 sl : 1912619.624 tp : 0.000 ok

NormalizeDouble() est une fonction qui va rendre un certain nombre de décimales, elle ne va pas corriger les erreurs dans le code, voir quels paramètres vous passez et d'où ils proviennent.

 
Pavel Kolchin:

NormalizeDouble() est une fonction qui va rendre un certain nombre de décimales, elle ne va pas corriger les erreurs dans le code, voir quels paramètres vous passez et d'où ils proviennent.

Chalut simple. MAIS : SILVER,H1 : stoploss invalide pour la fonction OrderModify. Pourquoi ? Comment le réparer ? Sur tous les autres marchés, cela fonctionne.
void Trailing()
  {
   if(Digits==3 || Digits==5)
     {
      TrailingStep *= 10;
      TrailingOpen *= 10;
      TrailingStop *= 10;
     }
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid>OrderOpenPrice()+TrailingOpen*Point)
                 {
                  if(OrderStopLoss()<Bid-(TrailingStop+TrailingStep)*Point)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),0,0))
                        Print("Oshibka =", DoubleToString(OrderStopLoss(), Digits()));
                    }
                 }
              }
            if(OrderType()==OP_SELL)
              {
               if(Ask<OrderOpenPrice()-TrailingOpen*Point)
                 {
                  if(OrderStopLoss()>Ask+(TrailingStop+TrailingStep)*Point)
                    {
                     if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*Point,Digits),0,0))
                        Print("Oshibka", DoubleToString(OrderStopLoss(), Digits()));
                    }
                 }
              }
           }
        }
     }
  }
 
Igor Golieniev:
Chalut simple. MAIS : SILVER,H1 : stoploss invalide pour la fonction OrderModify. Pourquoi ? Comment le réparer ? Sur tous les autres marchés, cela fonctionne.

SYMBOL_TRADE_STOPS_LEVEL

 

Erreur lors de la compilation

#define  MACRO1( x, y )  x
#define  MACRO2                  MACRO1( , unsigned )
void OnStart()
{
         MACRO2 int i; //Error: 'MACRO1' - undeclared identifier
}

Prévu d'être remplacé par :

void OnStart()
{
                int i;
}
 

Erreur lors de la lecture du bénéfice (ou est-ce que je comprends déjà mal quelque chose).

Il existe une fonction au sein de l'EA :

bool Fn_profit_summ(double &profit_summ, bool is_buy, ulong magic, bool prnt=false){
   profit_summ = 0;
   string str=(is_buy?"B":"S")+" -> "; 
   //-----------------------------             
   int total = PositionsTotal();          
   for(int i=total-1; i>=0; i--){
      const ulong tic= PositionGetTicket(i); if(tic<=0)     return(false); //--- asinchr
      if(!PositionSelectByTicket(tic)                   )   return(false); //--- asinchr 
      bool is_buy_ = (PositionGetInteger(POSITION_TYPE  )==POSITION_TYPE_BUY); 
      if( is_buy_                             !=  is_buy)   continue; 
      if( PositionGetInteger(POSITION_MAGIC ) !=  magic )   continue;
      if( PositionGetSymbol (POSITION_SYMBOL) != _Symbol)   continue;
      profit_summ += PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
      str+=IntegerToString(tic)+" - "+DoubleToString((PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)), 2)+"/";
      }
   //-----------------------------
   if( prnt) Print(str+" --> "+DoubleToString(profit_summ, 2));
   return(true);}

Je peux voir dans le journal :

2018.02.21 01:44:04.315 2018.02.14 04:59:49   S -> 273 - -5.62/ --> -5.62

Ce serait bien, mais il s'agit d'un ordre d'achat de profit, pas d'un ordre de vente.

Le ticket correspond exactement à un ordre de vente (273, comme dans le journal).


Je pensais avoir vérifié dans la fonction et le même type était considéré correctement, mais le bénéfice n'est vraiment pas le même. Si c'est vrai, alors c'est l'apocalypse - le client ferme les positions de vente et d'achat séparément lorsqu'il atteint le profit/la perte spécifié(e) et il ferme constamment les ventes, car il prend un profit d'achat. De la même façon que le dépôt peut être involontairement vidé

(Si j'ai trop travaillé et que j'imagine déjà des choses - corrigez-moi, s'il vous plaît. J'espère sincèrement que c'est vrai et qu'il n'y a pas un tel bug critique)