Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1668

 
artem artem #:

SanAlex, oui, j'ai regardé le testeur de la version actuelle de cette année, tout est ok) Les résultats sont bons, dans un futur proche, j'essaierai de l'utiliser sur un compte réel.

Quel est le nom du conseiller expert ? L'avez-vous téléchargé à partir de kodobase ? J'ai besoin de voir comment l'auteur l'a implémenté dans la fonction

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Il nous manque quelque chose - pour ajouter la condition à l'ontik

 
SanAlex #:

Quel est le nom de l'expert ? L'avez-vous téléchargé à partir de kodobase ? J'ai besoin de voir comment l'auteur l'a implémenté dans la fonction

Il y a quelque chose qui manque - pour ajouter une condition à l'ontik

Sasha, le travail de chronométrage n'a pas été inclus. J'ai juste ajouté quelques fonctionnalités à brancher pendant le développement)
 
MakarFX #:
Sasha, le travail de chronométrage n'a pas été inclus. J'ai juste ajouté quelques fonctionnalités à brancher pendant le développement)

Je vais le refaire à ma façon.

 
artem artem #:

SanAlex, oui, j'ai regardé le testeur de la version actuelle de cette année, tout est ok) Les résultats sont bons, dans un futur proche, j'essaierai de l'utiliser sur un compte réel.

Celui-ci et le temps fonctionneront - j'ai changé la fonction

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

La fonction Time dans mt4 et dans mt5 fonctionne

Dossiers :
 
MakarFX #:
Vous ne voulez pas vous débarrasser des classes ?

Je n'ai découvert leur existence que récemment. Je ne sais pas, c'est un truc super pratique. Que suggérez-vous ? Tout mettre en fonction ? Si cela pouvait résoudre le problème.

J'ai deux objets globaux (bar, db_last) d'une classe Bar, le premier est initialisé avec les paramètres de chaque nouvelle barre (barre habituelle sur le graphique), et le second enregistre une barre correspondant à toutes les conditions. En fait, dans un autre objet local de la classe Order, tous les calculs sont effectués à partir des paramètres db_last pour ouvrir un ordre. Les paramètres db_last et bar sont utilisés à de nombreux endroits, mais uniquement pour la lecture, l'initialisation et l'affectation se produisent à un seul endroit, dans OnTick(), de sorte que les changements inattendus dans les objets ne devraient pas être.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Je n'ai découvert leur existence que récemment. Je ne sais pas, c'est un truc super pratique. Que suggérez-vous ? Tout mettre en fonction ? Si cela pouvait résoudre le problème.

J'ai deux objets globaux (bar, db_last) d'une classe Bar, le premier est initialisé avec les paramètres de chaque nouvelle barre (barre habituelle sur le graphique), et le second enregistre une barre correspondant à toutes les conditions. En fait, dans un autre objet local de la classe Order, tous les calculs sont effectués à partir des paramètres db_last pour ouvrir un ordre. Les paramètres db_last et bar sont utilisés à de nombreux endroits, mais uniquement pour la lecture. L'initialisation et l'affectation se font à un seul endroit, dans OnTick (), de sorte que des modifications inattendues des objets ne devraient pas se produire.

Je l'essaierais - cela ne coûte pas d'argent).

Mais il y a des erreurs, surtout des erreurs avec la normalisation simple

Pouvez-vous m'envoyer le fichier dans un message privé ? Je vais y jeter un coup d'oeil.
 
SanAlex #:

Quel est le nom de l'expert ? L'avez-vous téléchargé à partir de kodobase ? J'ai besoin de voir comment l'auteur l'a implémenté dans la fonction

J'ai oublié quelque chose - pour ajouter la condition à l'ontik

SanAlex, j'ai joint la version téléchargée dans ce message - il a Puria + trailing stop + Breakeven level + watchdog trading. Je testerais bien les échanges en fonction de l'heure, mais je n'en ai pas encore eu l'occasion).

 
MakarFX #:

L'absence d'historique affecte la lecture de l'indicateur au début du test.

MakarFX, j'ai également pensé à cela, donc cela devrait fonctionner comme il se doit.

 
artem artem #:

SanAlex, j'ai joint la version que j'ai téléchargée dans ce post - c'est Puria + trailing stop + breakeven level + clock trading. Je testerais bien le commerce par l'horloge, mais je n'en ai pas encore eu l'occasion).

Trouvé ceci dans kodobase https://www.mql5.com/ru/code/12654

- J'ai manqué votre cible, que vouliez-vous y changer ?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Trouvé ceci dans kodobase https://www.mql5.com/ru/code/12654

- J'ai manqué votre cible, que vouliez-vous y changer ?

Les ajouts que je voulais faire :

1. Ainsi, l'ouverture d'une transaction et la vérification de toutes les conditions des indicateurs(croisement d'une rapide (5), de deux lentes (75) (85) et de la barre MACD s'ouvrant dans la même direction avec une rapide (5)) ont été effectuées uniquement au prix d'ouverture d'une nouvelle bougie (le tout premier tick de chaque bougie de 30 minutes) ;
  1. Créer les conditions d'une "mise à zéro" des indicateurs. Par exemple, pour un mouvement rapide (5) S'il est supérieur à la lenteur, c'est un signal d'achat. S'il descend ensuite et touche l'un d'entre eux, ou se trouve entre les indicateurs lents (75) et (85)- alors le signal de l'indicateur rapide se met pour ainsi dire à zéro, et restera dans cette position" zéro" tant qu'il touchera ou restera entre les indicateurs lents. Si après cela, le rapide croise les deux lents d'un côté(y compris s'il retourne du côté d'où il venait avant de toucher les lents)- alors ce sera un signal de cet indicateur. Avec le MACD, la situation est similaire- Seul MACD=0 sera considéré comme "zéro"(si sur la première bougie le MACD, par exemple, a ouvert avec 0.0043, et sur la deuxième bougie avec -0.0010, cela signifie que le MACD sur la deuxième bougie a" zéro" et a donné un nouveau signal). Cependant, il y a un moment le rapide (5) et le MACD devraient être en quelque sorte "sur un pied d' égalité" - si (5) ne change pas sa position par rapport au lent, et que le MACD a ouvert sur la bougie précédente dans la mauvaise zone (pas d'entrée), et sur la suivante - dans la même zone que le rapide, alors toutes les conditions ont convergé et une entrée à l'ordre devrait être faite. Notez que tout ceci doit se faire uniquement sur les prix d'ouverture des bougies - uniquement sur ce tick;
  1. Et le dernier, pour que le Conseiller Expert attende 4 ouvertures de bougies consécutives:

    1. 1er prix d'ouverture - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 1 confirmation sur 4;
    2.Le prix d'ouverture de la 2ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0- 2 confirmations sur 4 est;
    3. Le prix d'ouverture de la 3ème bougie - (5) sur (75) et (85) + barre MACD ouverte au-dessus de 0- 3 confirmations sur 4 est;
    4.Prix d'ouverture de la 4ème bougie - (5) au-dessus de (75) et (85) + barre MACD ouverte au-dessus de 0- 4 confirmations sur 4 oui- Ouvrir un trade d'achat sur la même bougie (4ème).
La même situation avec les ordres de vente, mais dans l'autre sens, les indicateurs doivent s'ouvrir. Et il y a un point important- si à n'importe quel stade de la 1ère bougie à la 4ème, les indicateurs changent de position(par exemple, sur la 3ème bougie d'ouverture, la barre MACD s'ouvre soit en dessous de 0, soit = 0)- alors tout se réinitialise, car les signaux n'ont pas été vérifiés à l'ouverture de la 4ème bougie d'affilée.