Veuillez traduire l'algorithme permettant de trouver les coordonnées du point d'intersection de deux segments.
Extrait de l'article :
C'est très simple ! x1,y1 et x2,y2 sont les coordonnées des sommets du premier segment ; x3,y3 et x4,y4 sont les coordonnées des sommets du deuxième segment ;
pour trouver l'intersection, on fait les équations des lignes : première équation : (x-x1)/(x2-x1)=(y-y1)/(y2-y1); deuxième équation (x-x3)/(x4-x3)=(y-y3)/(y4-y3); ces équations définissent une ligne passant par deux points, ce qui est ce dont nous avons besoin. A partir de ces équations, on trouve x et y par les formules suivantes : x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1)); y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3); Puisque nos lignes se croisent, elles ont un point d'intersection commun avec les coordonnées (x,y), que nous devons trouver. Pour que l'intersection appartienne à nos segments de ligne, nous devons la contraindre, c'est-à-dire vérifier la condition : si (((x1<=x)et(x2>=x)et(x3<=x)et(x4 >=x))ou((y1<=y)et(y2>=y)et(y3<=y) et(y4>=y)) alors il y a un point d'intersection de ces segments, et s'il n'y a pas de point d'intersection, alors il n'y a pas de point d'intersection. Vous devez également vérifier le parallélisme de ces segments à l'aide de coefficients d'angle : k1:=(x2-x1)/(y2-y1) ; k2:=(x4-x3)/(y4-y3) ; où k1 et k2 sont les tangentes des angles des segments par rapport à la direction positive de l'axe OX, si k1=k2, alors les segments sont parallèles et n'ont donc aucun point d'intersection.
Veuillez traduire l'algorithme permettant de trouver les coordonnées du point d'intersection de deux segments de droite.
Extrait de l'article :
C'est très simple ! x1,y1 et x2,y2 sont les coordonnées des sommets du premier segment ; x3,y3 et x4,y4 sont les coordonnées des sommets du deuxième segment ;
pour trouver l'intersection, on fait les équations des lignes : première équation : (x-x1)/(x2-x1)=(y-y1)/(y2-y1); deuxième équation (x-x3)/(x4-x3)=(y-y3)/(y4-y3); ces équations définissent une ligne passant par deux points, ce qui est ce dont nous avons besoin. A partir de ces équations, on trouve x et y par les formules suivantes : x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1)); y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3); Puisque nos lignes se croisent, elles ont un point d'intersection commun avec les coordonnées (x,y), que nous devons trouver. Pour que l'intersection appartienne à nos segments de ligne, nous devons la contraindre, c'est-à-dire vérifier la condition : si (((x1<=x)et(x2>=x)et(x3<=x)et(x4 >=x))ou((y1<=y)et(y2>=y)et(y3<=y) et(y4>=y)) alors il existe un point d'intersection de ces segments, et si ce n'est pas le cas, il n'y a pas de point d'intersection. Vous devez également vérifier le parallélisme de ces segments à l'aide de coefficients d'angle : k1:=(x2-x1)/(y2-y1) ; k2:=(x4-x3)/(y4-y3) ; où k1 et k2 sont les tangentes des angles des segments par rapport à la direction positive de l'axe OX, si k1=k2, alors les segments sont parallèles et n'ont donc aucun point d'intersection.
Peut-être que quelqu'un en a un prêt dans les archives ?
C'est un peu compliqué... J'ai écrit la définition de l'intersection des lignes, l'une aux hauts de 2m et l'autre aux bas de 2m, plus loin que la prochaine barre ou pas. Je l'ai écrit en utilisant la tangente, le rapport entre la différence de prix en pips et le nombre de barres entre les Haijs sur lesquelles la ligne est tracée. Par conséquent, c'est la tangente de l'angle de la deuxième ligne à Lowes. Puis j'utilise la tangente pour trouver le nombre de points sur la barre suivante, c'est-à-dire que j'utilise la formule inverse avec la valeur modifiée d'un cathetus (le nombre de barres). Nous obtenons la valeur du prix au point testé de ces lignes. Et par conséquent, si la valeur du prix de la barre droite est inférieure, le croisement a eu lieu.
Mais jusqu'à présent, je n'ai pas trouvé cet indicateur.
x1 - barre de la première coordonnée de ligne, y1 - prix de la première coordonnée de ligne. x2 - barre de la deuxième coordonnée de ligne, y2 - prix de la deuxième coordonnée de ligne, x - la barre pour laquelle le prix est renvoyé.
Vous pouvez trouver les prix de chacune des deux lignes et voir si elles se chevauchent...
Merci beaucoup Alexey et Artem pour votre attention à ma question !
J'ai écrit ici une sorte de..., quelque chose compte et est dessiné, mais pas à chaque intersection. Il y a un problème avec mon écriture. Je ne comprends pas ce que c'est.
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Aqua // Массив
#property indicator_width1 1
#property indicator_color2 Blue // Массив
#property indicator_width2 1
#property indicator_color3 Lime //
#property indicator_color4 Red //
double Buf0[]; // Массив
double Buf1[]; // Массив
double y1=0; // Координата Значения буфера Buf0[] на баре с индексом i=2double y2=0; // Координата Значения буфера Buf0[] на баре с индексом i=1double y3=0; // Координата Значения буфера Buf1[] на баре с индексом i=2double y4=0; // Координата Значения буфера Buf1[] на баре с индексом i=1double x1=2; // Координата Времени Buf0[] на баре с индексом i=2double x2=1; // Координата Времени Buf0[] на баре с индексом i=1double x3=2; // Координата Времени Buf1[] на баре с индексом i=2double x4=1; // Координата Времени Buf1[] на баре с индексом i=1double X=0; // Точка пересечения. Координата по оси Времениdouble Y=0; // Точка пересечения. Координата по оси Значенияdouble k1=0; // Тангенс угла наклона 1-первого отрезкаdouble k2=0; // Тангенс угла наклона 2-второго отрезкаdouble PointX=0; // Значение индикатора в точке пересечения отрезковdouble UpArrow[]; // Зелёные стрелки внизу индикаторного окнаdouble DnArrow[]; // Красные стрелки вверху индикаторного окна//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+int init()
{
SetIndexBuffer(0,Buf0);
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(1,Buf1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(2,UpArrow); // Зелёные стрелки внизу индикаторного окна
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,233);
SetIndexBuffer(3,DnArrow); // Красные стрелки вверху индикаторного окна
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,234);
return(0);
}
//+------------------------------------------------------------------+//| Moving Averages Convergence/Divergence |//+------------------------------------------------------------------+int start()
{
int i;
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(i=limit; i>=0; i--)
Buf0[i] = ....;
for(i=limit; i>=0; i--)
Buf1[i] = ....;
Fun_New_Bar();
if (New_Bar==true)
{
y1=Buf0_[2];
y2=Buf0_[1];
y3=Buf1_[2];
y4=Buf1_[1];
X=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
Y=((y3-y4)*X-(x3*y4-x4*y3))/(x4-x3);
if( ((x1<=X)&&(x2>=X)&&(x3<=X)&&(x4 >=X)) || ((y1<=Y)&&(y2>=Y)&&(y3<=Y)&&(y4>=Y)) ) // Проверка на "Пересечение линий вне отрезков"
{
if(y2-y1 != 0) // Проверка 1-первого отрезка на вырождение в точку
{
k1=(x2-x1)/(y2-y1); // Тангенс угла наклона 1-первого отрезкаif(y4-y3 != 0) // Проверка 2-второго отрезка на вырождение в точку
{
k2=(x4-x3)/(y4-y3); // Тангенс угла наклона 2-второго отрезкаif(k1 != k2) // Проверка прямых(отрезков) на параллельность
{
PointX=Y; // Значение индикатора в точке пересечения отрезковif(PointX>=0) UpArrow[1]=-0.001;
if(PointX< 0) DnArrow[1]= 0.001;
}
//else // Alert("Прямые(отрезки) параллельны");
}
//else // Alert("2-второй отрезок выродился в точку");
}
//else // Alert("1-первый отрезок выродился в точку");
}
//else // Alert("Пересечение вне, хотя бы одного, отрезка");
}
return(0);
}
//+------------------------------------------------------------------+void Fun_New_Bar()
{
staticdatetime New_Time=0;
New_Bar=false;
if(New_Time!=Time[0])
{
New_Time=Time[0];
New_Bar=true;
}
}
Leo59: Merci beaucoup Alexey et Artem pour votre attention à ma question !
J'ai écrit ici une sorte de..., quelque chose compte et est dessiné, mais pas à chaque intersection. Il y a un problème avec mon écriture. Je ne sais pas ce que c'est.
En ce moment, je ne suis pas capable de comprendre quoi que ce soit en programmation, c'est l'anniversaire de ma femme bien-aimée aujourd'hui. Elle est âgée de 18 ans et 384 mois.
Mais ! !! Notez que le croisement des lignes peut se produire DANS ou HORS des barres, et que le prix (coordonnée Y) ne peut être obtenu que sur la barre. Soit avant, soit après, mais le point de croisement ne peut pas toujours être déterminé. Je dirais que c'est rare. Compte tenu de ce qui précède, révisez votre code en gardant cela à l'esprit, peut-être cela fonctionnera-t-il.
TanFX: Veuillez me conseiller sur le type de commandes à insérer dans l'Expert Advisor pour qu'il corrige automatiquement les takeprofits déjà définis dans les positions ouvertes lorsqu'il les recalcule. Ou peut-être existe-t-il un script qui corrige tous les arrêts du dernier jeu ?
Генератор торговых стратегий Мастера MQL5 значительно упрощает проверку торговых идей. В статье рассказывается о том, как написать и подключить в Мастер MQL5 свой собственный модуль управления открытыми позициями, устанавливающий уровень Stop Loss в безубыток при движении цены в благоприятном направлении, что позволяет защитить прибыль и уменьшить потери. Рассматривается структура и формат описания созданного класса для Мастера MQL5.
Veuillez me conseiller sur la manière d'ajouter un code permettant de modifier le poids des modèles dans le testeur de stratégie. m_pattern_0(90) remplacer les variables d'entrée
Je ne suis pas très doué pour la POO, j'obtiens des erreurs"fonctionmembrenondéfinie" ou le code ne fonctionne tout simplement pas.
p.s. : Avec CiCustom je peux changer les poids pour les modèles, mais avec les indicateurs standards qui ont des classes standards (comme CSignalEnvelopes etc.) où sont les méthodes pour fixer les valeurs pour chaque modèle, mais elles ne sont pas encore disponibles dans l'assistant ? Ou peut-être y a-t-il une réponse pour cela quelque part ?
Je veux sauvegarder une archive de cotations plus longues que celle par défaut (2048 chandeliers) dans MT4 (Alpari-Demo). J'efface ce qui était là et j'appuie sur "Charger". Quelque chose sera chargé à partir du site MetaQuotes et j'obtiens l'image suivante : Top : Base de données 2049/12358 enregistrements. L'avant-dernier date du 17.10.2014, le dernier du 14.07.1993. Où sont ceux qui manquent ?
Veuillez traduire l'algorithme permettant de trouver les coordonnées du point d'intersection de deux segments.
Extrait de l'article :
C'est très simple !
x1,y1 et x2,y2 sont les coordonnées des sommets du premier segment ;
x3,y3 et x4,y4 sont les coordonnées des sommets du deuxième segment ;
pour trouver l'intersection, on fait les équations des lignes :
première équation :
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
deuxième équation
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
ces équations définissent une ligne passant par deux points, ce qui est ce dont nous avons besoin.
A partir de ces équations, on trouve x et y par les formules suivantes :
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
Puisque nos lignes se croisent, elles ont un point d'intersection commun avec les coordonnées (x,y), que nous devons trouver.
Pour que l'intersection appartienne à nos segments de ligne, nous devons la contraindre, c'est-à-dire vérifier la condition :
si
(((x1<=x)et(x2>=x)et(x3<=x)et(x4 >=x))ou((y1<=y)et(y2>=y)et(y3<=y) et(y4>=y))
alors il y a un point d'intersection de ces segments, et s'il n'y a pas de point d'intersection, alors il n'y a pas de point d'intersection.
Vous devez également vérifier le parallélisme de ces segments à l'aide de coefficients d'angle :
k1:=(x2-x1)/(y2-y1) ;
k2:=(x4-x3)/(y4-y3) ;
où k1 et k2 sont les tangentes des angles des segments par rapport à la direction positive de l'axe OX, si k1=k2, alors les segments sont parallèles et n'ont donc aucun point d'intersection.
Готовая функция. Код: POINT Point_X(POINT a1,POINT a2,POINT a3,POINT a4){ POINT T; if(((a1.x<=T.x)&&(a2.x>=T.x)&&(a3.x<=T.x)&&(a4.x >=T.x))||((a1.y<=T.y)&&(a2.y>=T.y)&&(a3.y<=T.y)&&(a4.y>=T.y))){ float x1=a1.x,x2=a2.x,x3=a3.x,x4=a4.x,y1=a1.y,y2=a2.y,y3=a3.y,y4=a4.y; float k1,k2; if(y2-y1!=0){ k1=(x2-x1)/(y2-y1); if(y4-y3!=0){ k2=(x4-x3)/(y4-y3); if(k1!=k2){ T.x=((a1.x*a2.y-a2.x*a1.y)*(a4.x-a3.x)-(a3.x*a4.y-a4.x*a3.y)*(a2.x-a1.x))/((a1.y-a2.y)*(a4.x-a3.x)-(a3.y-a4.y)*(a2.x-a1.x)); T.y=((a3.y-a4.y)*T.x-(a3.x*a4.y-a4.x*a3.y))/(a4.x-a3.x); T.x*=-1; return T; }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ //text2("Пересечение вне отрезка"); T.x=979; T.y=979; return T; } }Peut-être que quelqu'un en a une toute prête dans les archives ?Bonjour chers amis !
Veuillez traduire l'algorithme permettant de trouver les coordonnées du point d'intersection de deux segments de droite.
Extrait de l'article :
C'est très simple !
Peut-être que quelqu'un en a un prêt dans les archives ?x1,y1 et x2,y2 sont les coordonnées des sommets du premier segment ;
x3,y3 et x4,y4 sont les coordonnées des sommets du deuxième segment ;
pour trouver l'intersection, on fait les équations des lignes :
première équation :
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
deuxième équation
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
ces équations définissent une ligne passant par deux points, ce qui est ce dont nous avons besoin.
A partir de ces équations, on trouve x et y par les formules suivantes :
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
Puisque nos lignes se croisent, elles ont un point d'intersection commun avec les coordonnées (x,y), que nous devons trouver.
Pour que l'intersection appartienne à nos segments de ligne, nous devons la contraindre, c'est-à-dire vérifier la condition :
si
(((x1<=x)et(x2>=x)et(x3<=x)et(x4 >=x))ou((y1<=y)et(y2>=y)et(y3<=y) et(y4>=y))
alors il existe un point d'intersection de ces segments, et si ce n'est pas le cas, il n'y a pas de point d'intersection.
Vous devez également vérifier le parallélisme de ces segments à l'aide de coefficients d'angle :
k1:=(x2-x1)/(y2-y1) ;
k2:=(x4-x3)/(y4-y3) ;
où k1 et k2 sont les tangentes des angles des segments par rapport à la direction positive de l'axe OX, si k1=k2, alors les segments sont parallèles et n'ont donc aucun point d'intersection.
C'est un peu compliqué... J'ai écrit la définition de l'intersection des lignes, l'une aux hauts de 2m et l'autre aux bas de 2m, plus loin que la prochaine barre ou pas. Je l'ai écrit en utilisant la tangente, le rapport entre la différence de prix en pips et le nombre de barres entre les Haijs sur lesquelles la ligne est tracée. Par conséquent, c'est la tangente de l'angle de la deuxième ligne à Lowes. Puis j'utilise la tangente pour trouver le nombre de points sur la barre suivante, c'est-à-dire que j'utilise la formule inverse avec la valeur modifiée d'un cathetus (le nombre de barres). Nous obtenons la valeur du prix au point testé de ces lignes. Et par conséquent, si la valeur du prix de la barre droite est inférieure, le croisement a eu lieu.
Mais jusqu'à présent, je n'ai pas trouvé cet indicateur.
...
Ou peut-être que quelqu'un en a une toute prête dans les archives ?
Kim a posté une fonction. La fonction renvoie le prix du point du rayon tiré de la ligne vers la droite.
x1 - barre de la première coordonnée de ligne, y1 - prix de la première coordonnée de ligne. x2 - barre de la deuxième coordonnée de ligne, y2 - prix de la deuxième coordonnée de ligne, x - la barre pour laquelle le prix est renvoyé.
Vous pouvez trouver les prix de chacune des deux lignes et voir si elles se chevauchent...
J'ai écrit ici une sorte de..., quelque chose compte et est dessiné, mais pas à chaque intersection. Il y a un problème avec mon écriture. Je ne comprends pas ce que c'est.
Merci beaucoup Alexey et Artem pour votre attention à ma question !
J'ai écrit ici une sorte de..., quelque chose compte et est dessiné, mais pas à chaque intersection. Il y a un problème avec mon écriture. Je ne sais pas ce que c'est.
En ce moment, je ne suis pas capable de comprendre quoi que ce soit en programmation, c'est l'anniversaire de ma femme bien-aimée aujourd'hui. Elle est âgée de 18 ans et 384 mois.
Mais ! !! Notez que le croisement des lignes peut se produire DANS ou HORS des barres, et que le prix (coordonnée Y) ne peut être obtenu que sur la barre. Soit avant, soit après, mais le point de croisement ne peut pas toujours être déterminé. Je dirais que c'est rare. Compte tenu de ce qui précède, révisez votre code en gardant cela à l'esprit, peut-être cela fonctionnera-t-il.
Alexey Viktorov 2015.12.12 17:33 # RU
Elle a eu 18 ans.
Veuillez me conseiller sur le type de commandes à insérer dans l'Expert Advisor pour qu'il corrige automatiquement les takeprofits déjà définis dans les positions ouvertes lorsqu'il les recalcule. Ou peut-être existe-t-il un script qui corrige tous les arrêts du dernier jeu ?
Veuillez me conseiller sur la manière d'ajouter un code permettant de modifier le poids des modèles dans le testeur de stratégie. m_pattern_0(90) remplacer les variables d'entrée
Je ne suis pas très doué pour la POO, j'obtiens des erreurs" fonctionmembre non définie" ou le code ne fonctionne tout simplement pas.
Question similaire sans réponse ici https://www.mql5.com/ru/forum/13484
p.s. : Avec CiCustom je peux changer les poids pour les modèles, mais avec les indicateurs standards qui ont des classes standards (comme CSignalEnvelopes etc.) où sont les méthodes pour fixer les valeurs pour chaque modèle, mais elles ne sont pas encore disponibles dans l'assistant ?
Ou peut-être y a-t-il une réponse pour cela quelque part ?
Quelque chose sera chargé à partir du site MetaQuotes et j'obtiens l'image suivante :
Top : Base de données 2049/12358 enregistrements.
L'avant-dernier date du 17.10.2014, le dernier du 14.07.1993.
Où sont ceux qui manquent ?