Lütfen iki parçanın kesişme noktasının koordinatlarını bulmak için algoritmayı çevirmeme yardım et
Makaleden:
Her şey çok basit! x1, y1 ve x2, y2 - ilk bölümün köşelerinin koordinatları; x3, y3 ve x4, y4 - ikinci bölümün köşelerinin koordinatları;
kesişimi bulmak için çizgilerin denklemlerini oluştururuz: ilk denklem: (x-x1)/(x2-x1)=(y-y1)/(y2-y1); ikinci denklem (x-x3)/(x4-x3)=(y-y3)/(y4-y3); bu denklemler iki noktadan geçen düz bir çizgi tanımlar, ihtiyacımız olan da bu. Bu denklemlerden aşağıdaki formülleri kullanarak x ve y'yi buluruz: 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); doğrularımız kesiştiği için, bulmamız gereken (x, y) koordinatlarıyla ortak bir kesişme noktalarına sahiptirler. kavşağın segmentlerimize ait olması için onu sınırlamamız gerekiyor, yani. koşulu kontrol edin: Eğer (((x1<=x)ve(x2>=x)ve(x3<=x)ve(x4 >=x))veya((y1<=y)ve(y2>=y)ve(y3<= y) ve(y4>=y))) o zaman bu segmentlerin bir kesişme noktası vardır ve eğer değilse, o zaman kesişme noktası yoktur. Eğim katsayılarını kullanarak bu segmentlerin paralelliğini de kontrol etmelisiniz: k1:=(x2-x1)/(y2-y1); k2:=(x4-x3)/(y4-y3); burada k1 ve k2, segmentlerin ОХ ekseninin pozitif yönüne eğim açısının teğetleridir, eğer k1=k2 ise, segmentler paraleldir ve bu nedenle kesişme noktaları yoktur.
Lütfen iki parçanın kesişme noktasının koordinatlarını bulmak için algoritmayı çevirmeme yardım et
Makaleden:
Her şey çok basit! x1, y1 ve x2, y2 - ilk bölümün köşelerinin koordinatları; x3, y3 ve x4, y4 - ikinci bölümün köşelerinin koordinatları;
kesişimi bulmak için çizgilerin denklemlerini oluştururuz: ilk denklem: (x-x1)/(x2-x1)=(y-y1)/(y2-y1); ikinci denklem (x-x3)/(x4-x3)=(y-y3)/(y4-y3); bu denklemler iki noktadan geçen düz bir çizgi tanımlar, ihtiyacımız olan da bu. Bu denklemlerden, aşağıdaki formülleri kullanarak x ve y'yi buluruz: 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); doğrularımız kesiştiği için, bulmamız gereken (x, y) koordinatlarıyla ortak bir kesişme noktalarına sahiptirler. kavşağın segmentlerimize ait olması için onu sınırlamamız gerekiyor, yani. koşulu kontrol edin: Eğer (((x1<=x)ve(x2>=x)ve(x3<=x)ve(x4 >=x))veya((y1<=y)ve(y2>=y)ve(y3<= y) ve(y4>=y))) o zaman bu segmentlerin bir kesişme noktası vardır ve eğer değilse, o zaman kesişme noktası yoktur. Eğim katsayılarını kullanarak bu segmentlerin paralelliğini de kontrol etmelisiniz: k1:=(x2-x1)/(y2-y1); k2:=(x4-x3)/(y4-y3); burada k1 ve k2, segmentlerin ОХ ekseninin pozitif yönüne eğim açısının teğetleridir, eğer k1=k2 ise, segmentler paraleldir ve bu nedenle kesişme noktaları yoktur.
Ya da belki arşivlerdeki biri zaten hazırdır?
Acı verecek kadar karmaşık bir şey... Çizgilerin kesişiminin tanımını yazdım, biri 2 yüksek, diğeri 2 alçak, bir sonraki çubuktan daha uzak olsun ya da olmasın. Teğeti kullanarak yazdım, puan cinsinden fiyat farkının çizginin çizildiği en yüksek noktalar arasındaki çubuk sayısına oranı. Buna göre, ikinci çizginin açısının tanjantı, düşük. Ve sonra, tanjantı kullanarak bir sonraki çubuktaki noktaların sayısını buldum, yani. bir bacağın değeri değiştirilmiş ters formül (çubuk sayısı). Bu çizgilerin işaretli noktasındaki fiyatın değeri elde edilir. Ve buna göre, yükseklerdeki düz çizginin fiyatının değeri daha azsa, o zaman bir kesişme vardı.
Leo59 : Soruma gösterdiğiniz ilgi için Alexey ve Artyom'a çok teşekkür ederim!
Burada şöyle yazdım ..., bir şey düşünüldü ve çizildi, ancak her kavşakta değil. Bir şey doğru yazılmamış. Ne var, anlamıyorum.
Bu aralar programlamadan hiç bir şey anlayamıyorum sevgili eşimin bugün reçel günü var. 18 yaşında 384 aylık.
Ancak!!! Çizgilerin çubukların DIŞINDA veya ARASINDA geçebileceğini ve fiyatın (Y koordinatı) yalnızca çubuktan alınabileceğini unutmayın. Veya öncesi veya sonrası, ancak kesişme noktası her zaman belirlenemez. Bunun nadir olduğunu söyleyebilirim. Yukarıdakileri göz önünde bulundurarak, kodunuzu bunu göz önünde bulundurarak inceleyin, işe yarayabilir.
TanFX : Lütfen bana danışmana neyin eklenmesi gerektiğini (hangi komutlar kümesini) söyleyin, böylece yeniden hesaplanırken, açık pozisyonlarda zaten ayarlanmış olan karları otomatik olarak düzeltir. Veya tüm durakları belirtilen sonuncuya göre düzelten bir komut dosyası olabilir mi?
Генератор торговых стратегий Мастера MQL5 значительно упрощает проверку торговых идей. В статье рассказывается о том, как написать и подключить в Мастер MQL5 свой собственный модуль управления открытыми позициями, устанавливающий уровень Stop Loss в безубыток при движении цены в благоприятном направлении, что позволяет защитить прибыль и уменьшить потери. Рассматривается структура и формат описания созданного класса для Мастера MQL5.
Lütfen strateji test cihazında değiştirebilmeniz için kodu nasıl ekleyeceğimi söyleyin - model kalıplarının ağırlıklarını seçin. m_pattern_0(90) girdiyi değişkenlerle değiştir
OOP ile pek iyi değilim, hatalar ya " üyeişlevitanımlanmadı " ya da kod çalışmıyor
ps: CiCustom ile modeller için ağırlıkları değiştirmek mümkün görünüyor, ancak standart sınıflara ( CSignalEnvelopes , vb.) ? Ya da belki bunun cevabı zaten bir yerde önerilmiştir?
MT4'te (Alpari-Demo) bir dosyaya varsayılandan (2048 mum) daha uzun bir alıntı arşivi kaydetmek istiyorum. Ne olduğunu siliyorum, "İndir" e tıklıyorum. MetaQuotes web sitesinden bir şey yükleniyor, aşağıdaki resmi alıyorum: Üst: Veritabanı 2049/12358 girişleri. Mumlar: 17.10.2014 tarihinden sondan bir önceki, son - 14.07.1993. özlenenler nerede?
Lütfen iki parçanın kesişme noktasının koordinatlarını bulmak için algoritmayı çevirmeme yardım et
Makaleden:
Her şey çok basit!
x1, y1 ve x2, y2 - ilk bölümün köşelerinin koordinatları;
x3, y3 ve x4, y4 - ikinci bölümün köşelerinin koordinatları;
kesişimi bulmak için çizgilerin denklemlerini oluştururuz:
ilk denklem:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
ikinci denklem
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
bu denklemler iki noktadan geçen düz bir çizgi tanımlar, ihtiyacımız olan da bu.
Bu denklemlerden aşağıdaki formülleri kullanarak x ve y'yi buluruz:
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);
doğrularımız kesiştiği için, bulmamız gereken (x, y) koordinatlarıyla ortak bir kesişme noktalarına sahiptirler.
kavşağın segmentlerimize ait olması için onu sınırlamamız gerekiyor, yani. koşulu kontrol edin:
Eğer
(((x1<=x)ve(x2>=x)ve(x3<=x)ve(x4 >=x))veya((y1<=y)ve(y2>=y)ve(y3<= y) ve(y4>=y)))
o zaman bu segmentlerin bir kesişme noktası vardır ve eğer değilse, o zaman kesişme noktası yoktur.
Eğim katsayılarını kullanarak bu segmentlerin paralelliğini de kontrol etmelisiniz:
k1:=(x2-x1)/(y2-y1);
k2:=(x4-x3)/(y4-y3);
burada k1 ve k2, segmentlerin ОХ ekseninin pozitif yönüne eğim açısının teğetleridir, eğer k1=k2 ise, segmentler paraleldir ve bu nedenle kesişme noktaları yoktur.
Готовая функция. Код: 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; } }Ya da belki arşivlerdeki biri zaten hazırdır?Merhaba canım!
Lütfen iki parçanın kesişme noktasının koordinatlarını bulmak için algoritmayı çevirmeme yardım et
Makaleden:
Her şey çok basit!
Ya da belki arşivlerdeki biri zaten hazırdır?x1, y1 ve x2, y2 - ilk bölümün köşelerinin koordinatları;
x3, y3 ve x4, y4 - ikinci bölümün köşelerinin koordinatları;
kesişimi bulmak için çizgilerin denklemlerini oluştururuz:
ilk denklem:
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
ikinci denklem
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
bu denklemler iki noktadan geçen düz bir çizgi tanımlar, ihtiyacımız olan da bu.
Bu denklemlerden, aşağıdaki formülleri kullanarak x ve y'yi buluruz:
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);
doğrularımız kesiştiği için, bulmamız gereken (x, y) koordinatlarıyla ortak bir kesişme noktalarına sahiptirler.
kavşağın segmentlerimize ait olması için onu sınırlamamız gerekiyor, yani. koşulu kontrol edin:
Eğer
(((x1<=x)ve(x2>=x)ve(x3<=x)ve(x4 >=x))veya((y1<=y)ve(y2>=y)ve(y3<= y) ve(y4>=y)))
o zaman bu segmentlerin bir kesişme noktası vardır ve eğer değilse, o zaman kesişme noktası yoktur.
Eğim katsayılarını kullanarak bu segmentlerin paralelliğini de kontrol etmelisiniz:
k1:=(x2-x1)/(y2-y1);
k2:=(x4-x3)/(y4-y3);
burada k1 ve k2, segmentlerin ОХ ekseninin pozitif yönüne eğim açısının teğetleridir, eğer k1=k2 ise, segmentler paraleldir ve bu nedenle kesişme noktaları yoktur.
Acı verecek kadar karmaşık bir şey... Çizgilerin kesişiminin tanımını yazdım, biri 2 yüksek, diğeri 2 alçak, bir sonraki çubuktan daha uzak olsun ya da olmasın. Teğeti kullanarak yazdım, puan cinsinden fiyat farkının çizginin çizildiği en yüksek noktalar arasındaki çubuk sayısına oranı. Buna göre, ikinci çizginin açısının tanjantı, düşük. Ve sonra, tanjantı kullanarak bir sonraki çubuktaki noktaların sayısını buldum, yani. bir bacağın değeri değiştirilmiş ters formül (çubuk sayısı). Bu çizgilerin işaretli noktasındaki fiyatın değeri elde edilir. Ve buna göre, yükseklerdeki düz çizginin fiyatının değeri daha azsa, o zaman bir kesişme vardı.
Ama şu ana kadar bu göstergeyi bulamıyorum.
...
Ya da belki arşivlerdeki biri zaten hazırdır?
Kim bir fonksiyon yayınladı. Fonksiyon, doğrudan sağa doğru çizilen ışının noktasının fiyatını döndürür.
x1 - satırın ilk koordinatının çubuğu, y1 - satırın ilk koordinatının fiyatı. x2 - satırın ikinci koordinatının çubuğu, y2 - satırın ikinci koordinatının fiyatı, x - fiyatın iade edileceği çubuk.
İki çizginin her biri için fiyatları bulabilir ve kesişip kesişmediklerini görebilirsiniz..
Burada şöyle yazdım ..., bir şey düşünüldü ve çizildi, ancak her kavşakta değil. Bir şey doğru yazılmamış. Ne var, anlamıyorum.
Soruma gösterdiğiniz ilgi için Alexey ve Artyom'a çok teşekkür ederim!
Burada şöyle yazdım ..., bir şey düşünüldü ve çizildi, ancak her kavşakta değil. Bir şey doğru yazılmamış. Ne var, anlamıyorum.
Bu aralar programlamadan hiç bir şey anlayamıyorum sevgili eşimin bugün reçel günü var. 18 yaşında 384 aylık.
Ancak!!! Çizgilerin çubukların DIŞINDA veya ARASINDA geçebileceğini ve fiyatın (Y koordinatı) yalnızca çubuktan alınabileceğini unutmayın. Veya öncesi veya sonrası, ancak kesişme noktası her zaman belirlenemez. Bunun nadir olduğunu söyleyebilirim. Yukarıdakileri göz önünde bulundurarak, kodunuzu bunu göz önünde bulundurarak inceleyin, işe yarayabilir.
Alexey Viktorov 2015.12.12 17:33 # RU
18 yaşına girdi
Lütfen bana danışmana neyin eklenmesi gerektiğini (hangi komutlar kümesini) söyleyin, böylece yeniden hesaplanırken, açık pozisyonlarda zaten ayarlanmış olan karları otomatik olarak düzeltir. Veya tüm durakları belirtilen sonuncuya göre düzelten bir komut dosyası olabilir mi?
Lütfen strateji test cihazında değiştirebilmeniz için kodu nasıl ekleyeceğimi söyleyin - model kalıplarının ağırlıklarını seçin. m_pattern_0(90) girdiyi değişkenlerle değiştir
OOP ile pek iyi değilim, hatalar ya " üye işlevi tanımlanmadı " ya da kod çalışmıyor
Cevabı olmayan benzer bir soru burada https://www.mql5.com/ru/forum/13484
ps: CiCustom ile modeller için ağırlıkları değiştirmek mümkün görünüyor, ancak standart sınıflara ( CSignalEnvelopes , vb.) ?
Ya da belki bunun cevabı zaten bir yerde önerilmiştir?
MetaQuotes web sitesinden bir şey yükleniyor, aşağıdaki resmi alıyorum:
Üst: Veritabanı 2049/12358 girişleri.
Mumlar: 17.10.2014 tarihinden sondan bir önceki, son - 14.07.1993.
özlenenler nerede?