Questions des débutants MQL5 MT5 MetaTrader 5 - page 1178

 
Aleksey Vyazmikin:

Il n'y a donc aucune mention d'un ventilateur pour cette fonction dans les instructions.

Comme un objet d'une même coordonnée de prix peut avoir plusieurs valeurs, un numéro de ligne doit être spécifié. Cette fonction est uniquement applicable aux objets suivants :

  • Ligne de tendance (OBJ_TREND)
  • Ligne de tendancepar angle (OBJ_TRENDBYANGLE)
  • Ligne de Gann (OBJ_GANNLINE)
  • Canal équidistant (OBJ_CHANNEL) - 2 lignes
  • Canal de régression linéaire (OBJ_REGRESSION) - 3 lignes
  • Canal d'écart-type (OBJ_STDDEVCHANNEL) - 3 lignes
  • Ligne avec flèche (OBJ_ARROWED_LINE)

Le ventilateur a deux points à tout moment. Ajoutez-y une ligne de tendance parallèle et calculez-la. La sortie peut toujours être trouvée.

 
Uladzimir Izerski:

Calculé avec leprix ObjectGetValueByTime, trouvez un pourcentage quelconque du ventilateur.

Cela fonctionne dans le testeur. Je ne l'ai pas testé.

Pouvez-vous le montrer sous forme de code ?

 
Aleksey Vyazmikin:

Pouvez-vous le montrer sous forme de code ?

Je viens de vérifier le code. Ça marche sur les chaînes. Il détecte aussi le ventilateur.

 F_Draw_Object("FAN",OBJ_FIBOFAN,Time[20],High[20],Time[5],Low[5],0,0,0,2,C'00,00,200',OBJPROP_FILL,false);
 PriseCLv=ObjectGetValueByTime(0,"FAN",Time[10],0);

Vous pouvez lier une ligne de tendance à un éventail et vous pouvez aussi le détecter. Mais ça marche comme ça.

 
Uladzimir Izerski:

Je viens de vérifier le code. Ça marche sur les chaînes. Il détecte aussi le ventilateur.

Vous pouvez lier la ligne de tendance à l'éventail et vous pouvez aussi la détecter. Mais ça marche comme ça.

Comment cela fonctionne-t-il pour vous ?

Cela ne fonctionne pas pour moi, du moins pas dans le testeur visuel...

bool fiboFanCreate(string ffname, datetime tm1, double pr1, datetime tm2, double pr2)
{
   Print(__FUNCSIG__);
   
   //if(!ObjectCreate(0,ffname,OBJ_FIBOFAN,0,tm1,pr1,tm2,pr2))
   if(!ObjectCreate(0,ffname,OBJ_FIBOFAN,0,tm1,pr1,tm2,pr2,0,0,0,2,C'00,00,200',OBJPROP_FILL,false))
   {
      Print(__FUNCSIG__,
            ": не удалось создать \"Веер Фибоначчи\"! Код ошибки = ",GetLastError());
      return(false);
   }
   
   ChartRedraw();
   Sleep(1000);
   
   return(true);
}
//+------------------------------------------------------------------+
bool fiboFanLevelsSet(double  &values[],  // значения линий уровня
                      string  name)       // имя веера
{
   Print(__FUNCSIG__);
   
   levels = ArraySize(values);
   ArrayPrint(values);
   //--- установим количество уровней
   ObjectSetInteger(0,name,OBJPROP_LEVELS,levels);
   
   //--- установим свойства уровней в цикле
   for(int i=0;i<levels;i++)
   {
      //--- значение уровня
      ObjectSetDouble(0,name,OBJPROP_LEVELVALUE,i,values[i]);
      //--- описание уровня
      ObjectSetString(0,name,OBJPROP_LEVELTEXT,i,IntegerToString(i+1));
   }
   ChartRedraw();
   Sleep(1000);
   //--- успешное выполнение
   return(true);
}

Vérifiez

void OnTick()
{
   new_bars    = current_chart.isNewBar();   // проверить появление нового бара
   
   if(new_bars > 0)
   {
      if(ObjectFind(0,ff_name) >= 0) Print(ff_name,"4 = ",NormalizeDouble(ObjectGetValueByTime(0,ff_name,TimeCurrent(),4),Digits()));

....

2020.01.19 19:38:50.208 2019.09.19 11:15:00   bool fiboFanCreate(string,datetime,double,datetime,double)
2020.01.19 19:38:50.208 2019.09.19 11:15:01   bool fiboFanLevelsSet(double&[],string)
2020.01.19 19:38:51.365 2019.09.19 11:30:00   FFan4 = 0.0
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

2 questions MT5

Sergey Tabolin, 2020.01.20 11:52

Qu'est-ce qui a provoqué une erreur lors de l'appel de l'indicateur à partir d'une EA ? L'indicateur est normalement placé manuellement sur le graphique.

   ResetLastError();
   handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01",0,in_symb1,false,false,in_smoothing);
   if(handle_ICTMP1 == INVALID_HANDLE)                                                 // проверяем наличие хендла индикатора
   {
      Print("Не удалось получить хендл индикатора handle_ICTMP1...",GetLastError());   // если хендл не получен, то выводим сообщение в лог об ошибке
      return(INIT_FAILED);                                                             // завершаем работу с ошибкой
   }
   else
   {
      Print("Получен хендл индикатора handle_ICTMP1");
      if(!MQLInfoInteger(MQL_OPTIMIZATION))
      {
         if(!ChartIndicatorAdd(ChartID(),0,handle_ICTMP1)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
      }
   }
2020.01.20 13:42:09.390 Core 1  file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 13:42:09.390 Core 1  loading of ICTMP_  EURGBP,M15 failed [557]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 13:42:09.390 Core 1  2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 13:42:09.390 Core 1  tester stopped because OnInit returns non-zero code
P.S. C'est dans le testeur.

Et ce, malgré le fait que l'EA soit exécuté sur le graphique en temps réel. Il ne rend pas l'indicateur. (((

En particulier, qu'est-ce que c'est ?

 

Chers amis, personne ne peut suggérer quoi que ce soit ?

Séparément, l'indicateur fonctionne à la fois dans le testeur et sur le graphique. Lorsque je l'exécute à partir de l'EA dans le testeur, j'obtiens une erreur peu claire. L'Expert Advisor avec cet indicateur démarre et travaille normalement sur le graphique.

Où dois-je creuser ?

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

Chers amis, personne ne peut suggérer quoi que ce soit ?

Séparément, l'indicateur fonctionne à la fois dans le testeur et sur le graphique. Lorsque je l'exécute à partir de l'EA dans le testeur, j'obtiens une erreur peu claire. L'Expert Advisor avec cet indicateur démarre et travaille normalement sur le graphique.

Où dois-je creuser ?

Peut-être vers la trajectoire de l'indicateur dans le testeur?
 
Artyom Trishkin:
Peut-être vers le chemin de l'indicateur dans le testeur ?

Comment ça ?

J'ai ainsi tous les indicateurs dont j'ai besoin

handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01"
handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_201",

Cela ne s'est jamais produit auparavant. De plus, c'est la première fois que j'entends parler d'un chemin séparé vers un indicateur dans le testeur...

Cela fonctionne-t-il pour d'autres indicateurs, mais pas pour celui-ci ?

 

Un autre indicateur a été spécialement ajouté au préalable.

   ResetLastError();
      handle_HMA7C = iCustom(Symbol(),0,"my_used\\my_HMA7C_201",45,9);
      if(handle_HMA7C == INVALID_HANDLE)                                                  // проверяем наличие хендла индикатора
      {
         Print("Не удалось получить хендл индикатора handle_HMA7C...",GetLastError());    // если хендл не получен, то выводим сообщение в лог об ошибке
         return(INIT_FAILED);                                                             // завершаем работу с ошибкой
      }
      else
      {
         Print("Получен хендл индикатора handle_HMA7C");
         if(!MQLInfoInteger(MQL_OPTIMIZATION))
         {
            if(!ChartIndicatorAdd(ChartID(),0,handle_HMA7C)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
         }
      }
   
   handle_ICTMP1 = iCustom(Symbol(),0,"my_used\\ICTMP_3.01",0,in_symb1,false,false,in_smoothing);
   if(handle_ICTMP1 == INVALID_HANDLE)                                                 // проверяем наличие хендла индикатора
   {
      Print("Не удалось получить хендл индикатора handle_ICTMP1...",GetLastError());   // если хендл не получен, то выводим сообщение в лог об ошибке
      return(INIT_FAILED);                                                             // завершаем работу с ошибкой
   }
   else
   {
      Print("Получен хендл индикатора handle_ICTMP1");
      if(!MQLInfoInteger(MQL_OPTIMIZATION))
      {
         if(!ChartIndicatorAdd(ChartID(),0,handle_ICTMP1)) Print("Ошибка подключения индикатора к графику"); // подключаем индикатор к графику
      }
   }
2020.01.20 20:15:34.713 program file added: Indicators\my_used\my_HMA7C_201.ex5. 41715 bytes loaded
2020.01.20 20:15:34.920 2019.09.19 00:00:00   Получен хендл индикатора handle_HMA7C
2020.01.20 20:15:34.921 file Indicators\my_used\ICTMP_3.01 read error
2020.01.20 20:15:34.921 loading of ICTMP_ EURGBP,M15 failed [557]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   cannot load custom indicator 'my_used\ICTMP_3.01' [4802]
2020.01.20 20:15:34.921 2019.09.19 00:00:00   Не удалось получить хендл индикатора handle_ICTMP1...4802
2020.01.20 20:15:34.921 tester stopped because OnInit returns non-zero code

L'EA est toujours placé sur le graphique normalement. Tous les indicateurs sont chargés et fonctionnent....

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

Chers Messieurs, personne ne peut suggérer quoi que ce soit ?

Où creuser ?

Je peux supposer que vous recevez la poignée à plusieurs reprises et que vous faites progressivement déborder la mémoire. Celui qui est sur le graphique en direct le fait lentement, et n'a pas le temps de remplir toute la mémoire. Le testeur le fait plusieurs fois par seconde, et fait rapidement déborder la mémoire.

Raison: