[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 24

 

Il était déjà en marche. Il n'a pas prédit le signal d'ouverture pendant longtemps, et l'air était fourni par la même minuterie.

En bref, Paul est mort.

 
Quelqu'un peut-il me conseiller : C'est une question triviale , mais je n'arrive pas à la résoudre à longueur de journée. Comment faire pour que l'EA ouvre un ordre à l'ouverture d'une bougie, et s'il se ferme sur la même bougie, ne pas l'ouvrir jusqu'à l'apparition d'une nouvelle bougie. Le problème ici est que lorsque le signal s'ouvre, disons que l'ordre est fermé sur le même chandelier, donc le signal est en vigueur, mais il n'est plus pertinent car le robot a été écrit pour le prix d'ouverture. Je me souviens qu'il y avait un moyen, mais je ne m'en souviens pas.
 

Le drapeau est appelé.

Lorsque l'ordre s'ouvre, attribuez OrderIsOpened=true. Lorsqu'une nouvelle bougie s'ouvre - ...=faux, et ainsi de suite.

 
tara:

Le drapeau est appelé.

Lorsque l'ordre s'ouvre, attribuez OrderIsOpened=true. Lorsqu'une nouvelle bougie s'ouvre - ...=faux, et ainsi de suite.

Merci. Et comment coder l'ouverture d'une nouvelle bougie?
 
kwadrad:
Merci. Et comment coder l'ouverture d'une nouvelle bougie ?


Tout ce que vous voulez - c'est entre vos mains. Par exemple :

- quand le temps change selon la taille du TF (le plus facile)

- lorsque le "nouveau" prix ouvert diffère de l'"ancien" prix.

par la même technologie de "drapeau".

Vous êtes les bienvenus.

 
kwadrad:
Merci. Et comment code-t-on l'ouverture d'une nouvelle bougie ?
Explorez avec un moteur de recherche.
 
Fartarantula:

Bonjour chers mql. Voici mon premier problème de code.

Il s'agit d'un indicateur de tendance. La tâche est un indicateur de tendance avec des coordonnées 1-th line = max du dernier jour et du jour précédent et 2-th line = min du dernier jour et du jour précédent.

Tout irait bien, mais lorsque vous passez à une échelle de temps inférieure, la coordonnée s'accroche au début de la journée, bien qu'au niveau de prix correspondant..... et le sens de la ligne est complètement perdu.

Lors de la création d'un objet ligne de tendance, le paramètre datetime est à blâmer. Je ne sais pas comment l'atteindre. Il est nécessaire de calculer le temps de formation des extrema de prix. Il semble que cette information

Il semble que cette information soit intégrée dans l'intervalle de temps d'une minute. Comment déterminer la date à laquelle l'horizon temporel change pour qu'une tendance soit redessinée et que des coordonnées soient attachées aux barres correspondant aux extrema.

Malheureusement, la recherche n'a rien donné sur le sujet. Je vous serais reconnaissant de me conseiller.

Je comprends que la procédure d'écriture du code elle-même pose des difficultés.

Je vous propose la méthode suivante pour résoudre cette tâche :

// Ваша трендовая по High на дневном таймфрейме
datetime Time1 = iTime(Symbol(), PERIOD_D1, 1);
double   High1 = iHigh(Symbol(), PERIOD_D1, 1);
datetime Time2 = iTime(Symbol(), PERIOD_D1, 2);
double   High2 = iHigh(Symbol(), PERIOD_D1, 2);
ObjectCreate("High_Trend", OBJ_TREND, 0, Time2, High2, Time1, High1, 0, 0);

// Ищем точное время High'ев на таймфрейме PERIOD
int PERIOD = PERIOD_M5;

int BarTime1 = iBarShift(Symbol(), PERIOD, Time1);
int BarTime2 = iBarShift(Symbol(), PERIOD, Time2);
Time1 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime1, 1));
Time2 = iTime(Symbol(), PERIOD, 
      Highest(Symbol(), PERIOD, MODE_HIGH, BarTime2, BarTime1+1));

ObjectSet("High_Trend", OBJPROP_TIME2, Time1);
ObjectSet("High_Trend", OBJPROP_TIME1, Time2);

Le seul problème est que si vous lancez l'Expert Advisor avec ce code dans le Strategy Tester et que vous définissez la variable PERIOD à PERIOD_M1, les deux fonctions iBarShift renvoient -1, c'est-à-dire que la fonction ne peut pas trouver une barre sur TF M1 avec la même heure dans l'historique... Je ne sais pas pourquoi ça arrive.

J'ai découvert pourquoi ! Il n'y a pas eu d'historique pour les barres M1 sur la période testée.

 
alex12:

J'ai besoin de visualiser le comportement des prix sur l'ensemble de l'historique de l'instrument par MA, mais l'indicateur n'est pas dessiné lorsqu'il est inséré dans le graphique.

Quel est le problème ?

Lorsque compilé = 0 et 0.

Au fait, le terminal MT4 se bloque !

Réglez les paramètres d'entrée History et Aver_Bars sur une valeur plus petite et le terminal cessera de "pendre".

Qu'est-ce qui vous fait penser que l'indicateur n'est pas dessiné lorsqu'il est attaché à un graphique ? Voici ce que votre indicateur a dessiné lorsque je l'ai placé sur le graphique d'aujourd'hui pour EUR/USD TF M1 :


:D :D :D :D

 
artmedia70:
Lorsque cette erreur se produit (division par zéro), l'EA cesse de fonctionner. Recherchez un endroit dans le code où la division par zéro se produit - très probablement, le zéro est obtenu à la suite du calcul de certains paramètres.
Merci, j'ai trouvé la solution. Je le vérifierai ce week-end.
 

Bonjour, chers membres du forum.

Bien sûr, j'ai quelques questions de la part d'un nouveau venu. J'essaie d'apprendre mql4, puisque je n'ai jamais développé de programme auparavant, donc les questions peuvent être très primitives. Mais je n'ai jamais été capable de les faire moi-même.

J'ai décidé de "déconner" avec l'affichage des volumes en traçant une ligne au lieu d'un graphique à barres avec quelques traitements. Le code devrait avoir le sens suivant. En partant de la deuxième barre qui est dans la même direction que la précédente (les deux barres sont à la hausse), le volume est dessiné à partir de la deuxième barre. En conséquence, j'obtiens une ligne brisée dans la fenêtre de l'indicateur, qui est effectivement tracée à partir de la deuxième barre vers le haut, mais pas dans tous les cas pour une raison quelconque. La ligne est interrompue parce que les autres conditions de son tracé ne sont pas du tout définies, elle est une chose du futur. Mais ici, pour comprendre pourquoi la ligne n'est pas tracée sur une barre sur deux vers le haut, je ne peux pas. Aidez-moi, s'il vous plaît.

Voici le code. Si vous avez d'autres commentaires sur d'autres bogues dans le code, je serai heureux de vous aider.

double dVolume=Volume[i];
double vback1=Volume[i+1];

         {
         double vteor12=(dVolume+vback1)/2;
            if (Close[i+1]>Open[i+1] && Close[i]>Open[i]) double UP12=(Close[i]-Open[i+1])*1000; else UP12=0;
            if (UP12!=0) double vrealUP12=(dVolume+vback1)/UP12; else vrealUP12=0;
            if (Close[i+1]>Open[i+1])
            if (Close[i]>Open[i])
            ExtVolumesBuffer[i]=dVolume+vteor12-vrealUP12;
            if (ExtVolumesBuffer[i]<0) ExtVolumesBuffer[i]=0;
              }
Raison: