Erreurs, bugs, questions - page 2994

 
Vladimir Karputov:

Quelle est votre preuve ?

/

 
Vladimir Karputov:

Quelle est votre preuve ?

Non. Il n'y a pas d'erreur.

J'ai été troublé par la commande elle-même. Et le fait qu'il ne prenne pas 0. Il veut toujours une variable.


 
Alexandr Bryzgalov:

Non. Il n'y a pas d'erreur.

L'ordre lui-même est déroutant. Et qu'il ne prend pas 0. Il faut nécessairement une variable.

C'est ce que dit l'aide - il faut une VARIABLE

   int&           sub_window,   // The number of the subwindow 
 
Vladimir Karputov:

C'est ce qui est dit dans la fiche technique - il faut une VARIABLE.

 

Mes amis, aidez-moi. Je suis complètement déconcerté par ce qui se passe.

#property indicator_chart_window
#property indicator_plots 0

int                      ma_handle;
bool FirstStart;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(ChartPeriod()!=PERIOD_M1)
     {
      ChartSetSymbolPeriod(0,_Symbol,PERIOD_M1);
     }
   ma_handle=iCustom(Symbol(),PERIOD_H1,"Indicator For Search Data");
   FirstStart = true;
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ulong tmpTimeCopy = GetMicrosecondCount();
   if(FirstStart)
     {
      double tmp[];
      datetime DateStart=D'2018.07.19', DateEnd=D'2021.01.19 23:59:59';
      int DataCopy=-1;
      while(true)
        {
         DataCopy=CopyBuffer(ma_handle,0,DateStart,DateEnd,tmp);
         if(DataCopy<0)
            Print("Return");
         else
           {
            IndicatorRelease(ma_handle);
            FirstStart=false;
           }
         if(!FirstStart)
            break;
        }
      Print("Time Copy Buffer: ", GetMicrosecondCount() - tmpTimeCopy);
      Print("Data to Copy: ", DataCopy, " ", tmp[0], " ", tmp[1], " ", tmp[2], " ", tmp[3], " ", tmp[4]);
      Print(datetime(tmp[0])," ",datetime(tmp[1])," ",datetime(tmp[ArraySize(tmp)-1]));

     }
   return(rates_total);
  }

Voici l'indicateur complet. Quand il démarre, il commence à donner

Capture d'écran

Pourquoi un tel optimisme. Si j'appuie sur pause ou stop, j'obtiens toujours des valeurs dans l'onglet Expert Advisor de la fenêtre Toolbox. La fenêtre avec l'indicateur est déjà fermée, mais les valeurs sont affichées avec succès.

Comment cela se produit-il ? Qui peut expliquer quelque chose ?

 
ROMAN KIVERIN:

Mes amis, aidez-moi. Je suis complètement déconcerté par ce qui se passe.

Voici l'indicateur complet. Quand il démarre, il commence à donner

Pourquoi un tel optimisme. Si j'appuie sur pause ou stop, j'obtiens toujours des valeurs dans l'onglet Expert Advisor de la fenêtre Toolbox. La fenêtre avec l'indicateur est déjà fermée, mais les valeurs sont affichées avec succès.

Comment cela se produit-il ? Quelqu'un peut-il expliquer quelque chose ?

Qui a dit que CopyBuffer() réussira au moins une fois ?

Qui a dit que iCustom() sera un succès ?

"Les erreurs peuvent former des cycles. Le plus persistant d'entre eux est l'infini." La théorie de l'erreur.
 

Depuis la dernière mise à jour, la fonctionEnumToString ne fonctionne pas correctement selon le code appelé. Un appel séparé àEnum_ ne reproduit pas l'erreur.

template<typename T>

int Enum_(T enum_value)
  {
   ...
         s1=EnumToString(T(i1));

   ...

   }

Dans le débogueur :

GetLastError renvoie :

ERR_INVALID_PARAMETER.

4003

Paramètre erroné lors de l'appel d'une fonction système

 

copie d'aide du magazine mt4

sell 0.20 CL-MAY21 at 59.36 sl: 0.00 tp: 0.00 -> sl: 0.00 tp: 58.00
14:07:13.521 Trade: '50223437': order #5595882 sell 0.20 CL-MAY21 at 59.36 was modified -> sl: 0.00 tp: 58.00
15:56:34.215 Startup: MetaTrader 4 for Android
15:56:34.223 Startup: Copyright 2001-2021, MetaQuotes Software Corp.
15:56:34.223 Startup:
15:56:34.223 Startup: Device: samsung a41 (QP1A.190711.020.A415FXXU1BUC3) 10(REL) 29SDK
15:56:34.223 Startup: Kernel: 4.14.141-20194519
15:56:34.239 Terminal: Native library initialized. Version 400 Build 1334
15:56:34.259 Chat: initialization success
15:57:43.276 Terminal: Codepage for current language (ru_RU) is 'CP1251'
15:57:43.277 Terminal: Using 'windows-1251' for server strings
15:57:43.284 Terminal: Terminal instance created
15:57:43.641 Terminal: Connecting to PinedaIntl-Trader through 'Main'
15:57:43.793 Terminal: Connected to PinedaIntl-Trader through Main
15:57:43.993 Chat: connected to msg.mql5.com:443
15:57:44.088 Network: '50223437': login successfull [connection type: unknown]
15:58:02.749 GL: Texture size: 256x256
15:59:35.745 Trade: '50223437': modify order #5595882 sell 0.20 CL-MAY21 at 54.19 sl: 0.00 tp: 58.00 -> sl: 0.00 tp: 52.0015:59:36.073 Trade: '50223437': order #5595882

comment cela est-il arrivé

 
JRandomTrader:

Qui dit que CopyBuffer() ne réussira jamais ?

Qui dit que iCustom() sera un succès ?

"Les erreurs peuvent former des cycles. Le plus persistant d'entre eux est l'infini." La théorie de l'erreur.

Ce qui est intéressant, c'est que cette fonction est exécutée avec succès. Elle est exécutée et produit des valeurs. Après cela, le terminal n'entre que dans un état incompréhensible.

La fonction iCustom() est également exécutée avec succès.

 
   datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

   if(handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}


Quelqu'un peut-il répondre à la question de savoir pourquoi ce code ne fonctionne correctement que sur les minutes ?

Il s'agit d'un indicateur.


P. S.

Sur les échelles de temps autres que celles des minutes, il produit des valeurs erronées.

Raison: