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

 
Comment obtenir des crédits ou comment les déposer ?
 

Voici le code de l'Expert Advisor qui utilise cet indicateur TrendToTrend_open.

code ci-dessous

Question - pourquoi mon conseiller expert définit-il cet indicateur avec un prix de clôture?

//--- входные параметры
input int LongTrend=14; // Период LongTrend
input int ShortTrend=7; // Период ShortTrend
input int EA_Magic=0;   // Magic Number советника
input double Lot=0.02; // Количество лотов
input double STR= 0.14;
input double TR= 0.1;
input double TP= 0.55;

//--- глобальные переменные

int TrendToTrend;
int TrendToTrendOpen;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
  {
  //--- достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<60) // общее количество баров на графике меньше 60?
     {
      Alert("На графике меньше 60 баров, советник не будет работать!!");
      return(-1);
     }
TrendToTrend=iCustom(_Symbol,0,"TrendToTrend",LongTrend,ShortTrend);
TrendToTrendOpen=iCustom(_Symbol,0,"TrendToTrend_open",LongTrend,ShortTrend);

if(TrendToTrend<0||TrendToTrendOpen<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(-1);
     } 
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- освобождаем хэндлы индикаторов
   IndicatorRelease(TrendToTrend);
   IndicatorRelease(TrendToTrendOpen);
   }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
//--- советник должен проверять условия совершения новой торговой операции только при новом баре
   if(IsNewBar==false)
     {
      return;
     }
//--- Имеем ли мы достаточное количество баров на графике для работы
   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) // если общее количество баров меньше 60
     {
     Alert("На графике менее 60 баров, советник работать не будет!!");
     return;
     }
return; 
}
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
 

Bonjour !


Veuillez m'indiquer où lire la réponse à ma question.

J'ai un EA avec deux stratégies qui ouvrent des trades sur des principes différents. Elle a pour résultat final une position commune.

Un peu plus tard, je dois comprendre comment chaque stratégie a contribué à la position. Alors, quelle stratégie (ou deux) a ouvert la position.

Comment dois-je m'y prendre ?


Merci !

 
sanderz:

Bonjour !


Pouvez-vous m'indiquer la direction de la réponse à votre question ?

J'ai un EA avec deux stratégies qui ouvrent des trades sur des principes différents. Elle a pour résultat final une position commune.

Un peu plus tard, je dois comprendre comment chaque stratégie a contribué à la position. Alors, quelle stratégie (ou deux) a ouvert la position.

Comment dois-je m'y prendre ?


Merci !

Si votre EA a la possibilité de désactiver une des stratégies et que vous pouvez modifier le nombre magique dans les paramètres. Vous devez alors ajouter deux EA à votre compte et désactiver l'une des stratégies dans chacun d'entre eux et définir des nombres magiques différents pour les positions, puis utiliser les nombres magiques dans l'historique pour suivre celui qui donne le plus de profits ou de pertes.
 
Kino:
Si l'EA a la possibilité de désactiver l'une des stratégies et que vous pouvez modifier le nombre magique dans les paramètres. Ensuite, mettez deux EA sur le compte et désactivez l'une des stratégies dans chacun d'eux et attribuez des nombres magiques différents pour les positions, puis retracez dans l'historique ce qui donne plus de plus ou moins par les nombres magiques.

Merci pour la réponse. J'ai créé des variables statiques qui changent leur valeur si la position de la stratégie est ouverte (à la fermeture et au stop loss, les valeurs changent également). En général, cela fonctionne bien, mais je comprends qu'après avoir redémarré l'EA, il perdra ses ordres.

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 
Pourquoi l'argent ne fait-il pas tic-tac ?
Dossiers :
965pp1ixr4.png  2000 kb
 
sneak:
Pourquoi l'argent ne fait-il pas tic-tac ?
La mise à jour des calculs n'est pas fréquente. Une fois par jour peut-être.
 

Merci, mon pote... Je vais garder ça en tête.

J'ai des ordinateurs à la cave, ...., je creuse les pots... faisons quelque chose.

 

Je ne comprends pas pourquoi la fonction renvoie 0 :

int BarsAmountPassed(datetime open_time)
  {
   datetime time_array[];
   int n;
   Print("inpupt time=",TimeToString(open_time));
   CopyTime(_Symbol,_Period,open_time,TimeCurrent(),time_array);
   n=ArraySize(time_array);
   Print("number of elements in array=",n);
   return(n);
  }

En appelant comme ceci par exemple :

int bars;
bars=BarsAmountPassed(1365198000);  
Print(__FUNCTION__+": Баров прошло с этого времени ",bars);
n écrit correctement, mais renvoie 0.
 
tor4en:

Je ne comprends pas pourquoi la fonction renvoie 0 :

En appelant comme ceci par exemple :

n écrit correctement, mais renvoie 0.
C'est étrange, si je change le type de la fonction en short ou double, elle renvoie la valeur calculée (qui s'avère être 4 dans cet exemple). Mais avec int 0.