Erreurs, bugs, questions - page 2906

 

Les arrêts et les prises ne fonctionnent pas lors des tests. La capture d'écran montre un exemple de limite de vente déclenchée avec un SL et un TP définis, mais le stop (et le take) ne se déclenche pas, quelle que soit l'évolution du prix. Où creuser ?

Dossiers :
Screenshot_1.jpg  177 kb
 

Pour les positions, il existe la propriété POSITION_TIME_UPDATE - l'heure du dernier changement de position.

Il n'existe pas de propriété de ce type pour les commandes dans le terminal. Mais il y en a un sur le serveur ?


Est-ce que je comprends bien que la modification d'un ordre Limit sur un marché boursier est une réédition de l'ordre Limit : supprimer l'ancien et en fixer un nouveau ?

Si c'est le cas, alors la modification doit changer ORDER_TIME_SETUP. Or, ce n'est pas le cas.

 

Disparition des graphiques d'indicateurs

Très souvent, après quelques heures de travail, les graphiques indicateurs disparaissent.

Pour restaurer les données et minimiser le calcul de l'indicateur, j'utilise les étapes de chargement et de calcul des données.

Lorsque j'installe l'indicateur sur le graphique, toutes les étapes fonctionnent normalement.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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(prev_calculated == 0)
  {
    switch (mar_data.stage)
    {
      case LOAD_TICKS:
        if(LoadTicks(time) == true)
        {
          //--- 
          mar_data.stage = READ_PRIM_TICKS;
        }
        return(0);
      break;
      case READ_PRIM_TICKS:
        if(ReadPrimTicks() == true)
        {
          //---
          mar_data.stage = READ_SEC_TICKS;
        }  
        return(0);
      break;
      case READ_SEC_TICKS:
        if(ReadSecTicks() == true)
        {
          //---
          mar_data.stage = FILL_DATA;
        }  
        return(0);
      break;
      case FILL_DATA:
        //---
        FillData();
        mar_data.stage = LOAD_TICKS;
      break;
    }
  } 
  else
  {
    //--- Live data ---
  }
  return(rates_total);
}

Dans la dernière étape, la première étape est assignée, de sorte que l'indicateur (quand il est clé) peut recharger les données.

mar_data.stage = LOAD_TICKS;

Mais, lorsque l'indicateur est réinitialisé, les données ne sont pas restaurées.

La fonction

//+------------------------------------------------------------------+
//| Custom indicator Load ticks function                             |
//+------------------------------------------------------------------+
bool LoadTicks(const datetime &a_times[])
{
  int result = CopyTime(Symbol(), PERIOD_M1, start_time, end_time, mar_data.time_array);
  if(result > 0)
  {
    if(mar_data.time_array[result - 1] == a_times[ArraySize(a_times) - 1])
    {
      mar_data.b_cnt = result;
      result = CopyTicksRange(Symbol(), mar_data.pr_ticks, COPY_TICKS_INFO, ulong(start_time) * 1000, ulong(end_time) * 1000);
      if(result > 0)
      {
        if(mar_data.pr_ticks[result-1].time >= mar_data.time_array[ArraySize(mar_data.time_array) - 1]) 
        {
          mar_data.pr_cnt = result;
          datetime sec_time_array[];
          result = CopyTime(sec_symbol, PERIOD_M1, start_time, end_time, sec_time_array);
          if(result > 0)
          {
            result = CopyTicksRange(sec_symbol, mar_data.sec_ticks, COPY_TICKS_INFO, ulong(start_time) * 1000, ulong(end_time) * 1000);
            if(result > 0)
            {
              if(mar_data.sec_ticks[result-1].time >= sec_time_array[ArraySize(sec_time_array) - 1])
              {
                mar_data.sec_cnt = result;
                return(true);
              } else Print("Не хватает тиков ", sec_symbol, "!");
            } else Print("Не получены тики по символу ", sec_symbol, "!");
          } else Print("Не скопировано время баров по символу ", sec_symbol, "!");
        } else Print("Не хватает тиков ", Symbol(), "!"); 
      } else Print("Не получены тики по символу ", Symbol(), "!");
    } else Print("Не хватает баров по символу ", Symbol(), "!");
  } else Print("Не скопировано время баров по символу ", Symbol(), "!");
  return(false);
}

Ne sort que cette

"Le temps de la barre BR-1.21 n'a pas été copié !".

Mais rien ne se passe plus loin.

Parce qu'il y a un appel de LoadTicks(), donc toutes les étapes doivent être répétées, comme lors du chargement de l'indicateur.

Chers développeurs, pourquoi l'indicateur cesse-t-il de fonctionner ?

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Каждый скрипт, сервис и эксперт работает в собственном отдельном потоке. Все индикаторы, рассчитываемые на одном символе, даже если они запущены на разных графиках, работают в одном потоке. Таким образом, все индикаторы на одном символе делят между собой ресурсы одного потока. В одном потоке с индикаторами также последовательно выполняются...
 
fxsaber:
C'est le deuxième jour que la recherche sur le site ne fonctionne pas.

La base de recherche s'est beaucoup réduite. Beaucoup de choses ne sont pas trouvées.

 
Comment puis-je savoir quand la position/la commande a été modifiée pour la dernière fois ?
 
fxsaber:
Comment puis-je savoir quand j'ai modifié ma position ou mon ordre pour la dernière fois ?

MISE À JOUR DE LA POSITION_TEMPS

 
Igor_Gagarin:

MISE À JOUR DE LA POSITION_TEMPS

C'est l'heure du dernier changement de volume. Filet Echo.

 
fxsaber:

C'est l'heure du dernier changement de volume. Filet Echoes.

L'heure d'ouverture du poste est donnée. De quoi parliez-vous ?

 
Igor_Gagarin:

Il donne l'heure d'ouverture du poste. Quelle était votre question ?

Raison: