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

 

MT4

Cos'è questo articolo e cosa fa, non riesco a trovare una descrizione da nessuna parte?

Come faccio a disabilitarlo di default?


 
void OnStart()
  {
string text="Hello man";
   string keystr="ABCDEFG";
   uchar src[],dst[],key[];
//--- подготовка ключа шифрования
   StringToCharArray(keystr,key);
//--- подготовка исходного массива src[]
   StringToCharArray(text,src);
//--- вывод исходных данных
   PrintFormat("Initial data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
//--- шифрование массива src[] методом DES с 56-битным ключом key[]
   int res=CryptEncode(CRYPT_AES256,src,key,dst);
//--- проверка результата шифрования
   if(res>0)
     {
      //--- вывод шифрованных данных
      PrintFormat("Encoded data: size=%d %s",res,ArrayToHex(dst));
      //--- расшифровка данных массива dst[] методом DES с 56-битным ключом key[]
      res=CryptDecode(CRYPT_AES256,dst,key,src);
      //--- проверка результата
      if(res>0)
        {
         //--- вывод дешифрованных данных
         PrintFormat("Decoded data: size=%d, string='%s'",ArraySize(src),CharArrayToString(src));
        }
      else
         Print("Ошибка в CryptDecode. Код ошибки=",GetLastError());
     }
   else
      Print("Ошибка в CryptEncode. Код ошибки=",GetLastError());
  }
//+------------------------------------------------------------------+
string ArrayToHex(uchar &arr[],int count=-1)
  {
   string res="";
//--- проверка размера
   if(count<0 || count>ArraySize(arr))
      count=ArraySize(arr);
//--- преобразование в шестнадцатиричную строку
   for(int i=0; i<count; i++)
      res+=StringFormat("%.2X",arr[i]);
//---
   return(res);
  }

Sto cercando di eseguire l'esempio di crittografia dal manuale, mauso il metodo CRYPT_AES256 invece diCRYPT_DES. Il risultato è l'errore 4029 dopo il metodoCryptEncode

 
Dmitri Custurov:

Sto cercando di eseguire l'esempio di crittografia dal manuale, mauso il metodo CRYPT_AES256 invece diCRYPT_DES. Di conseguenza, l'errore 4029 dopo il metodoCryptEncode

L'ho capito. Ha bisogno di una chiave più attenta).

 

Ciao!

Sono stupido e non riesco a capirlo da solo, per favore consigliatemi quale potrebbe essere il problema o almeno indicatemi la giusta direzione.

Diversi indicatori stanno iniziando a mostrare un pezzo di storia diverso in modo sincrono. Succede a volte, non tutti i giorni.

Ho pensato che la ragione è che gli indicatori non elaborano correttamente la storia caricata dinamicamente. Ho provato tutto ciò che riguarda il corretto aggiornamento dell'indicatore sulla cronologia di aggiornamento, non so cos'altro si dovrebbe fare per evitare questo.

Broker Alpari. MT5 build 2363 dal 13.03.2020.

Gli screenshot mostrano prima la versione "fallita".

Poi la versione corretta dopo l'aggiornamento manuale.

//+------------------------------------------------------------------+
bool IsReadyForCalculate(const int rates_total,const int prev_calculated,const datetime &time[])
  {
   //--- подключение терминала и синхронизация данных
   if(TerminalInfoInteger(TERMINAL_CONNECTED))  
      if(!SymbolIsSynchronized(_Symbol) || 
         !SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED))   return(false);
   //--- некорректное значение prev_calculated
   if(prev_calculated<0)                  return(false);
   //---
   if(prev_calculated==0)     prev_time = time[rates_total-1];
   //--- произошли изменения в данных, но prev_calculated не сброшен в 0
   //--- или изменение времени не соответствует одному бару
   if(  (rates_total!=prev_calculated+1 &&
         rates_total!=prev_calculated &&
         prev_calculated!=0) ||
        (time[rates_total-1]>prev_time &&
         time[rates_total-2]!=prev_time))
     {
      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);
     }
   //--- корректный сценарий
   if(  (rates_total==prev_calculated   || rates_total==prev_calculated+1 || prev_calculated==0) &&
        (time[rates_total-1]==prev_time || time[rates_total-2]==prev_time))
     {
      loc_prev_calculated = prev_calculated;
      return(true);
     }
   //--- 
   return(false);       // верну false, пока не знаю, какие варианты ещё могут быть
  }
//+------------------------------------------------------------------+
//| 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(!IsReadyForCalculate(rates_total,prev_calculated,time))     return(0);
//---
        // вызов функции зигзага
   
//--- return value of prev_calculated for next call
   prev_time = time[rates_total-1];
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Salve.

Ho questa domanda in MQL5. Come posso forzare l'avvio della funzione OnChartEvent()? C'è un modo standard per farlo?

Per questo scopo, uso la funzione ChartNavigate() e la eseguo da OnChartEvent(). Ma funziona in modo instabile - quando arrivano molti tick, spesso OnChartEvent() non riparte dopo aver chiamato ChartNavigate() per qualche motivo. Non riesco a capire come sia collegato - ChartNavigate() e tasso di arrivo dei tick, ma succede comunque.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
inwinterborn:

Ciao!

Sono stupido e non riesco a capirlo da solo, per favore consigliatemi quale potrebbe essere il problema o almeno indicatemi la giusta direzione.


      loc_prev_calculated = 0;    // чтобы индикатор не висел "голым" до следующей котировки, вычисляю индикатор из того, что есть
      return(true);

Forse ho aggiunto questo di recente per niente...

Rimosso
loc_prev_calculated 

Sostituito con...

      return(false);

Lo terrò d'occhio.


Per favore, mi parli degli indicatori standard che vengono forniti con la MT5, come funzionano? Si fluttuano come ho fatto io negli screenshot qui sopra?

 

Buongiorno a tutti!
Sto imparando la doppia funzione OnTester() e la funzione TesterStatistics( ). Ho scritto un semplice codice per il mio tester in MT4, che apre un ordine ogni giorno alle 10:00, alle 16:00, alle 20:00 e alle 01:00. Alla fine del test, la funzione TesterStatistics( ) restituisce il valore più piccolo del saldo (cioè il drawdown relativo).

PROBLEMA

TesterStatistics( ) restituisce il valore di saldo più piccolo per TUTTI gli ordini aperti

DOMANDA

Quale costruzione del linguaggio può essere usata per far sì che TesterStatistics() restituisca il valore del saldo più piccolo solo per un ordine aperto in un certo momento particolare, per esempio alle 16:00. A questo punto, tutti gli ordini specificati nel codice dovrebbero essere testati simultaneamente. Significa che TesterStatistics dovrebbe tracciare la dinamica del saldo per un solo ordine aperto alle 16:00 e, alla fine del test, visualizzare il valore minimo del saldo solo per l'ordine aperto alle 16:00.

Vi sarei molto grato se poteste inserire il costrutto linguistico richiesto nel mio codice. Mi permetterà di capire rapidamente l'algoritmo di soluzione del mio problema.
Ecco il mio codice.

int H;
double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
 
ANDREY:

Buona giornata a tutti!
Ho imparato il doppio OnTester() e TesterStatistics( ). Ho scritto un semplice codice per il mio tester in MT4, che apre un ordine alle 10:00, alle 16:00, alle 20:00 e alle 01:00 ogni giorno. Alla fine del test, la funzione TesterStatistics restituisce il valore di saldo più piccolo (cioè il drawdown relativo).

PROBLEMA

TesterStatistics( ) restituisce il valore di saldo più basso per TUTTI gli ordini aperti

DOMANDA

Quale costruzione del linguaggio può essere usata per far sì che TesterStatistics() restituisca il valore del saldo più piccolo solo per un ordine aperto in un certo momento particolare, per esempio alle 16:00. A questo punto, tutti gli ordini specificati nel codice dovrebbero essere testati simultaneamente. Cioè, TesterStatistics( ) dovrebbe tracciare la dinamica del saldo di un solo ordine aperto alle 16:00 e alla fine del test, restituire il valore minimo del saldo solo per l'ordine aperto alle 16:00.

Vi sarei molto grato se poteste inserire la lingua richiesta nel mio codice. Questo mi permetterà molto rapidamente di capire l'algoritmo per risolvere il mio problema.
Ecco il mio codice.

int H;
double  TesterStatistics( );
void OnTick()

Che cos'è?

 
 Сергей Таболин
:

È questo che è?

Grazie per il vostro feedback. Grazie a voi ho capito che specificandoTesterStatistics( ); funzione insieme alla dichiarazione della variabile globale H ... è stato un mio errore. L'ho aggiustato.

int H;
//double  TesterStatistics( );
void OnTick()
{
if (H!=Hour( ))
if (Hour( )==10||Hour( )==16||Hour( )==20||Hour( )==1)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,Ask+400*Point,Ask-200*Point,"C2",123 );
H=Hour( );
}
}
double OnTester()
{
TesterStatistics( STAT_BALANCEMIN  );
Print("-----------TesterStatistics( STAT_BALANCEMIN  )--------------",TesterStatistics( STAT_BALANCEMIN  )); 
}
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Buongiorno! Come posso implementare la visualizzazione dei dati delle barre alte e basse su un grafico? E per evidenziare lo stesso colore.