Erreurs, bugs, questions - page 1929

 
const uchar Tmp[]; // 'Tmp' - 'const' variable must be initialized  
FrameAdd(Name, ID, Value, Tmp); // Нужно передать только Value
 
fxsaber:

Nous avons besoin d'un analogue d'IndicatorParameters pour les EAs - ExpertParameters.

En raison de son absence, il est impossible de comprendre dans OnTesterPass quels paramètres d'entrée de la passe calculée sont arrivés.

La fonction FrameInputs n'est pas utile ? Ou peut-être que je ne comprends pas ce qu'il faut faire et comment l'utiliser.

 
Stanislav Korotky:

La fonction FrameInputs n'est pas utile ? Ou je ne comprends pas ce qu'il faut faire et comment l'utiliser.

Oui, c'est ce qu'il vous faut ! Je ne pouvais pas le voir.

 

Auparavant, vous pouviez faire glisser une DLL dans moi et voir la liste des fonctions disponibles, maintenant vous ne pouvez pas le faire, ou cela a-t-il changé d'une manière ou d'une autre ?

 

Encore une fois l'erreur HistorySelect dans le testeur. En 1626, je ne pense pas qu'il y en avait une. En 1629, il y a.

#include <Trade\Trade.mqh>

void OnTick()
{
  static CTrade Trade;

  const datetime NowTime = TimeCurrent();
  
  if (Trade.Buy(1) && Trade.PositionClose(_Symbol) && HistorySelect(NowTime, NowTime))
  {
    Print(HistoryDealsTotal()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-время
      
    ExpertRemove();
  }
}
 
fxsaber:

Encore une fois l'erreur HistorySelect dans le testeur. En 1626, je ne pense pas qu'il y en avait une. En 1629 - il y a.

L'Expert Advisor fonctionne sur votre ordinateur avec des informations préchargées.

Il faut un certain temps (moins de 10 secondes) pour que l'action effectuée maintenant s'affiche :

1. Votre terminal envoie une requête au serveur

2. Le serveur le traite.

3) met à jour les informations sur votre terminal

4. Après cela, vous recevrez les valeurs correctes de HistorySelect et HistoryDealsTotal.

Signification : pour voir la dernière action dans l'historique, vous devez exécuter Sleep après Trade et avant HistorySelect.

... ou utiliser un autre moyen pour vérifier que l'historique n'est pas périmé.

(comme pour les devis - vous les avez mais ils sont les mêmes qu'au moment du téléchargement)

 
Ivan Ivanov:
fxsaber:

Encore une fois l'erreur HistorySelectdans le testeur. En 1626, je ne pense pas qu'il y en avait une. En 1629, il y a.

 

Voici un exemple :

//--- отправка запроса
    if ( !OrderSend(request,result) )
      PrintFormat("OrderSend error %d",GetLastError());
    else
    { Sleep(9999); // Time to get result
      ..... // Здесь мне нужен result
    }

Sans Sleep, ça ne marche pas pour moi, mais quand il y a 10 secondes, ça va.

https://www.mql5.com/ru/docs/trading/ordersend
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Ivanov:

Voici un exemple :

C'est à propos d'un testeur.
 
Une question presque enfantine : pourquoi en est-il ainsi ?
void OnStart()
{
  const double Norm = NormalizeDouble(8905 / 1000.0, 3);
  Print(Norm); // 8.904999999999999
  Print(DoubleToString(Norm, 3)); // 8.905
  
  const double Norm2 = (double)DoubleToString(Norm, 3);
  Print(Norm2); // 8.904999999999999
  Print(Norm == Norm2); // true
}

Pour une raison quelconque, j'étais persuadé que DoubleToString n'avait aucun sens après la normalisation. Mais non, comme le montre le scénario. Pourquoi en est-il ainsi ?

Il semble que la conversion double -> chaîne de caractères ne fonctionne pas correctement.

Raison: