Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 41

 
Vitaly Muzichenko:
Sì, hai ragione, è solo che il codice è scritto in uno stile tale che il precedente interlocutore lo ha interpretato male.

E per controllare?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      Value=0;    // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(Value>0) Alert("1. Количество ордеров=",Value);
   else Alert("2. Это код после else");
      {
      Alert("3. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
Il codice tra parentesi graffe non si riferisce alla condizione if-else, e sarà sempre eseguito indipendentemente dal valore in Value
 
Artyom Trishkin:

E controllare?


Il codice tra parentesi graffe non si riferisce alla condizione if-else, e sarà sempre eseguito, indipendentemente dal valore in Value

Cavolo, davvero, ora ho rivisto il codice originale e mi sono sbagliato. Lo stile di scrittura è un po' storto - mi ha confuso.

 

Ricontrollato, rimosso l'"extra".

ladivisione per zero non è andata da nessuna parte

File:
zero.mq4  5 kb
 
trader781:

Ricontrollato, rimosso l'"extra".

ladivisione per zero non è andata da nessuna parte

 
trader781:

Ricontrollato, rimosso l'"extra".

La divisione per zero non è scomparsa

Perché non c'è nessun controllo se il divisore è diverso da 0. Che senso ha eseguire ulteriore codice quando non ci sono ordini e 0 lotti?

 

Metti un controllo su di esso

void ModifyOrders()
  {
   double avg_price=0;
   price=0;
   bool z=true;
   double orderlots=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
        {
         price+=OrderOpenPrice()*OrderLots();
         orderlots+=OrderLots();
        }
     }
    
   if(orderlots==0) { return; } // если ничего нет - выходим
   avg_price=NormalizeDouble(price / orderlots,Digits);
  
   if(FindLastOType()==OP_BUY)     tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
   if(FindLastOType()==OP_SELL)    tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);


   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))

         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
     }
  }
 
Vitaly Muzichenko:

Metti un controllo su di esso


Vitalie Postolache:


Mi sono mancati i lotti però, grazie.
 
trader781:
Ma mi mancavano i lotti, grazie.
Va bene sbagliare, non va bene non leggere il giornale di bordo, dice tutto, e dice quale linea è sbagliata.
 
Vitaly Muzichenko:
Va bene perderselo, non va bene nonleggere la rivista, è tutto lì.

Non avevo intenzione di leggerlo. Dice 'controllare nel mercato'. I miei prodotti non saranno mai sul mercato.

sul dividere per zero.

e quello sopra? Si suppone che si prendada lì.

{
prezzo+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}

if(orderlots==0) {return; }// se non c'è niente, exit
avg_price=NormalizeDouble(price / orderslots,Digits);

if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);

 
trader781:
Non avevo intenzione di leggerlo. Dice "da testare sul mercato". I miei prodotti non saranno mai sul mercato.

Sto parlando della rivista nel tester

Aggiunto: Assemblare il codice allo stato normale, rivederlo, poi eseguirlo nel tester e leggere gli errori nel log. Mi stai dando dei frammenti di codice qui.