Discussion sur la mise en place des conseillers. - page 8

 
altec3:

Bonjour !

J'essaie d'écrire une fonction qui détermine le profit pour le jour en cours :

Pouvez-vous me dire comment dans la fonction

Indiquez la période à partir du jour actuel. Il est clair que la fin de la période to_date=TimeCurrent(), comment spécifier correctement le début de la période from_date, de sorte qu'elle commence exactement à partir de 00h:00m:00c du jour actuel ?

Choisissez en fonction de vos goûts :

datetime  iTime(
   const string        symbol,          // символ
   ENUM_TIMEFRAMES     timeframe,       // период PERIOD_D1
   int                 shift            // сдвиг
   );
int  CopyTime(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период PERIOD_D1
   int              start_pos,       // откуда начнем 0
   int              count,           // сколько копируем 1
   datetime         time_array[]     // массив для копирования времени открытия. Объявить заранее

Ou le plus, le plus. Ce qui a déjà été suggéré.

 
Vladimir Karputov:

En supposant qu'il y a eu au moins un tick aujourd'hui, l'algorithme est le suivant : l'heure actuelle est envoyée à la structureMqlDateTime. Ensuite, mettez les heures, les minutes et les secondes à zéro dans cette structure. Il reste à convertir la structure éditée en un temps :


Résultat :

Merci ! Autre question, si j'ajoute une fonction

//+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect(TimeCurrent()-PeriodSeconds(PERIOD_D1),TimeCurrent());
   uint     total       =HistoryDealsTotal();   // количество сделок в истории
   ulong    ticket      =0;                     // тикет сделки в истории
   long     type        =0;                     // тип сделки
   double   profit      =0.0;                   // финансовый результат сделки
   double   commission  =0.0;                   // коммиссия по сделке
   double   DayProfit   =0.0;                   // прибыль за текущие сутки
//--- for all deals
   for(uint i=0; i<total; i++)
     {
      if((ticket=HistoryDealGetTicket(i))>0)       //--- если имеются сделки, то...
        {
         profit      =HistoryDealGetDouble(ticket,DEAL_PROFIT);
         commission  =HistoryDealGetDouble(ticket,DEAL_COMMISSION);
         if(HistoryDealGetInteger(ticket,DEAL_TYPE)!=DEAL_TYPE_BALANCE)
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

à l'Expert Advisor, comment la période pour laquelle les transactions sont analysées sera-t-elle mise à jour ? Par exemple, si mon conseiller expert fonctionne pendant quelques jours, le jour suivant, la période sera-t-elle mise à jour ?

Mise en œuvre de la fonction ci-dessus dans le conseiller expert :

void OnTick()
  {
   if(Day_Profit()<ProfitMax)
     {
      ExtExpert.OnTick();
     }
   return;
  }
 
altec3:

Merci ! Une autre question, si j'ajoute la fonction :

à l'Expert Advisor, comment la période pour laquelle les transactions sont analysées sera-t-elle mise à jour ? Par exemple, si le conseiller expert fonctionne pendant quelques jours, le jour suivant, la période sera mise à jour ?

L'implémentation de la fonction ci-dessus dans l'Expert Advisor :

L'heure doit être réglée du début d'une journée à l'heure actuelle + jour ou + trois jours.

Vous savez déjà comment déterminer le début du jour.

 

Bonjour !

Il est nécessaire de déterminer le spread d'un symbole avant de passer un ordre sur celui-ci. La bibliothèque standard de MQL5 comprend la classe CSymbolInfo. C'est alors que j'ai commencé à me demander quelle est la meilleure façon de mettre en œuvre cette vérification - via CSymbolInfo ou en utilisant une fonction ? S'il vous plaît, expert, conseillez-moi sur ce qu'il faut faire ! Si cette question a déjà été soulevée, je vous serai très reconnaissant de m'orienter dans la bonne direction.

 

Bonjour !

J'ai besoin de conseils. Comment les barres sont-elles prises en compte si un EA contient des modules de signaux provenant de différentes échéances ?

Par exemple, j'ai un Expert Advisor simple qui a deux modules de signaux basés sur la stochastique (lorsque la ligne principale est au-dessus de la ligne de signal sur 0 et 1 barres - BUY, en dessous de la ligne de signal sur 0 et 1 barres - SELL) - un sur H1 et l'autre sur M15. Les poids des deux modules sont les mêmes et le conseiller expert a fixé la valeur seuil pour l'ouverture d'une position de telle sorte que les signaux des deux modules doivent être pris en compte simultanément. Le conseiller expert travaille sur le graphique à l'échelle H1. Si vous regardez la capture d'écran de H1, tout est clair - la ligne principale est plus élevée que la ligne de signal sur les dernières et avant-dernières barres et c'est pourquoi nous achetons. Mais sur le graphique de la M15, je n'arrive pas à comprendre quelle barre doit être considérée comme 0 et quelle barre comme 1 ? L'accord est ouvert - cela signifie qu'à la M15, les conditions de l'accord doivent également être remplies.

Dossiers :
H1.png  43 kb
M15.png  21 kb
 
altec3:

Par exemple, il existe un conseiller expert simple qui comprend deux modules de signaux basés sur la stochastique (lorsque la ligne principale est au-dessus de la ligne de signal sur 0 et 1 barre - ACHETER, en dessous de la ligne de signal sur 0 et 1 barre - VENDRE) - l'un pour H1, l'autre pour M15.

La barre zéro est diabolique ! L'indicateur sur l'historique que vous voyez est calculé comme si sur 1 barre - fermé (enfin, simplifié, si on ne tient pas compte de la possibilité de recroisement). Par conséquent, la stratégie est construite sur une barre fermée et dans le testeur, l'indicateur de la principale TF dans MT4 montrera le résultat de même une barre zéro, comme une barre fermée - c'est-à-dire, du futur.
Le résultat est une déception : une chose est différente chez le testeur, alors que le contraire est vrai en temps réel.
Croyez-moi sur parole : j'ai perdu la moitié de ma vie à essayer de trouver l'origine de l'erreur système. En général, avec Pushka, par exemple, tout est simple - multiplier la période par le ratio TF et l'ordre, mais s'il y a des calculs non linéaires, alors il n'y a qu'une imitation du calcul sur la barre 0.
J'ai cassé le RSI pendant un an pour qu'il affiche correctement les principaux TF sur le graphique.
Je n'insiste pas, je recommande au minimum d'utiliser les signaux des barres fermées, surtout celles qui sont plus élevées par rapport à l'horizon temporel actuel, et de vérifier également les indicateurs personnalisés pour le re-rating.
 
altec3:

Bonjour !

J'ai besoin de conseils. Comment les barres sont-elles calculées lorsqu'un EA contient des modules de signaux de différentes échéances ?

Par exemple, j'ai un Expert Advisor simple qui a deux modules de signaux basés sur la stochastique (lorsque la ligne principale est au-dessus de la ligne de signal sur 0 et 1 barres - BUY, en dessous de la ligne de signal sur 0 et 1 barres - SELL) - un sur H1 et l'autre sur M15. Les poids des deux modules sont les mêmes et dans le conseiller expert, le seuil d'ouverture d'une transaction est fixé de telle sorte que les signaux provenant des deux modules doivent être pris en compte simultanément. Le conseiller expert travaille sur le graphique à l'échelle H1. Si vous regardez la capture d'écran de H1, tout est clair - la ligne principale est plus élevée que la ligne de signal sur les dernières et avant-dernières barres et c'est pourquoi nous achetons. Mais sur le graphique de la M15, je n'arrive pas à comprendre quelle barre doit être considérée comme 0 et quelle barre comme 1 ? L'accord est ouvert, cela signifie qu'à la M15, les conditions de l'accord doivent également être remplies.

Sur l'historique vous voyez des barres déjà fermées et la barre zéro n'est pas un mal, mais elle est mobile et nous devons en tenir compte, car elle est formée en fonction du prix actuel et les changements de direction stochastiques sont possibles lorsque les prix sautent, doncelle est plus sensible, elle peut se fermer par exemple.

Essayez d'ajouter une barre supplémentaire juste pour ouvrir 0 && 1 && 2. Peut-être que les prunes seront réduites.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...