Problemy z alarmem dźwiękowym
Pokaż wyniki od 1 do 5 z 5

Wątek: Problemy z alarmem dźwiękowym

  1. #1
    Cześć wszystkim, mam # 8217; mam kłopot z dźwiękowym alarmem dla Indywidualnego Squeeze. Znalazłem alert dla BBS wycisnąć indior, alarm działa # 8230, po prostu nie tak, jak wolałbym to. Rzeczywisty sygnał pojawia się, gdy kropka zmienia kolor na zielony przy końcu paska, a poprzednia kropka była czerwona. Teraz alarm rozbrzmiewa na każdej czerwonej kropce i zwykle wiele razy, ponieważ obecna kropka może zmieniać się z czerwonego na zielony w kółko. Więc nawet jeśli uda mi się go zaalarmować, zbliżając się do końca, wciąż będzie alarmował przy każdej czerwonej kropce, kiedy sygnał dla mnie jest właściwie zieloną kropką poprzedzającą czerwoną kropkę. W jakiś sposób potrzebuję go, aby ostrzec, gdy kropka zamyka się na zielono, a poprzednia kropka była czerwona. czy to możliwe? Jeśli ktoś wie, w jaki sposób można to zrealizować, bardzo doceniam każdą pomoc. Z góry dziękuję.




    Wstawiono kod # 91; w lewo # 93;/ -------------------------------------- ---------------------------- /| bbsqueeze.mq4 |/| Copyright © 2005, Nick Bilak, beluck # 91; AT # 93; gmail.com |/| ulepszony przez CJ Rivasa, carlos # 91; AT # 93; vealo.com |/ ----------------------------------------------- ------------------- #property copyright Copyright © 2005, Nick Bilak #property indior_separate_window #property indior_buffers 6 #property indior_color1 Niebieski #property indior_color2 Czerwony #property indior_color3 DarkBlue #property indior_color4 Maroon #property indior_color5 Czerwony #property indior_color6 Lime/---- parametry wejściowe extern int bolPrd = 20; extern double bolDev = 2,0; extern int keltPrd = 20; extern double keltFactor = 1,5; extern int momPrd = 12; extern bool AlertSqueezeStart = false; extern bool AlertSqueezeEnd = false;/---- bufory podwójne upB # 91; # 93 ;; double upB2 # 91; # 93 ;; double loB # 91; # 93 ;; double loB2 # 91; # 93 ;; podwójne upK # 91; # 93 ;; double loK # 91; # 93 ;; int i, j, slippage = 3; podwójny punkt przerwania = 0,0; podwójne ema = 0,0; int peakf = 0; int pik = 0; int dolinaf = 0; int doliny = 0, granica = 0; podwójne ccis # 91; 61 # 93;, ccif # 91; 61 # 93 ;; podwójna delta = 0; podwójne ugol = 0;/ ----------------------------------------------- ------------------- /| Niestandardowa funkcja inicjalizacji/ ----------------------------------------------- ------------------- int init () {//---- indiors SetIndexStyle (0, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer (0, upB); SetIndexEmptyValue (0, EMPTY_VALUE); SetIndexStyle (1, DRAW_HISTOGRAM, EMPTY, 3); SetIndexBuffer (1, loB); SetIndexEmptyValue (1, EMPTY_VALUE); SetIndexStyle (4, DRAW_ARROW, EMPTY, 2); SetIndexBuffer (4, upK); SetIndexEmptyValue (4, EMPTY_VALUE); SetIndexArrow (4,159); SetIndexStyle (5, DRAW_ARROW, EMPTY, 2); SetIndexBuffer (5, loK); SetIndexEmptyValue (5, EMPTY_VALUE); SetIndexArrow (5 159); SetIndexStyle (2, DRAW_HISTOGRAM, EMPTY, 3); SetIndexEmptyValue (2, EMPTY_VALUE); SetIndexBuffer (2, upB2); SetIndexStyle (3, DRAW_HISTOGRAM, EMPTY, 3);SetIndexEmptyValue (3, EMPTY_VALUE); SetIndexBuffer (3, loB2);/---- return (0); }/ ---------------------------------------------- -------------------- /| Funkcja deinicjalizacji Custor indior |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| Niestandardowa funkcja iteracji |/ ----------------------------------------------- ------------------- int start () {int counted_bars = IndiorCounted (); int shift, limit; double diff, d, dPrev, std, bbs; if (counted_barslt; 0) return (-1); if (counted_barsgt; 0) counted_bars--; limit = Bars-31; jeśli (counted_barsgt; = 31) limit = Bars-counted_bars-1; for (shift = limit; shiftgt; = 0; shift--) {//d = iMomentum (NULL, 0, momPrd, PRICE_CLOSE, shift); d = LinearRegressionValue (bolPrd, shift); dPrev = LinearRegressionValue (bolPrd, shift 1); if (dgt; 0) {if ((dPrevgt; 0) (dPrev gt; d)) {upB2 # 91; shift # 93; = d; upB # 91; shift # 93; = 0; } else {upB # 91; shift # 93; = d; upB2 # 91; shift # 93; = 0; }/upB # 91; shift # 93; = 0; loB # 91; shift # 93; = 0; loB2 # 91; shift # 93; = 0; } else {if ((dPrevlt; 0) (dPrev lt)) {loB2 # 91; shift # 93; = d; loB # 91; shift # 93; = 0; } else {loB # 91; shift # 93; = d; loB2 # 91; shift # 93; = 0; } upB # 91; shift # 93; = 0; upB2 # 91; shift # 93; = 0;/loB # 91; shift # 93; = d; } diff = iATR (NULL, 0, keltPrd, shift) * keltFactor; std = iStdDev (NULL, 0, bolPrd, MODE_SMA, 0, PRICE_CLOSE, shift); bbs = bolDev * stddiff; if (bbslt; 1) {upK # 91; shift # 93; = 0; loK # 91; shift # 93; = EMPTY_VALUE; } else {loK # 91; shift # 93; = 0; upK # 91; shift # 93; = EMPTY_VALUE; } double diffprev, stdprev, bbsprev; diffprev = iATR (NULL, 0, keltPrd, 1) * keltFactor; stdprev = iStdDev (NULL, 0, bolPrd, MODE_SMA, 0, PRICE_CLOSE, 1); bbsprev = bolDev * stdprevdiffprev; } {if (bbsprevgt; = 1 bbslt; 1 AlertSqueezeStart == true) jeśli (NewBar ()) Alert (Symbol (),, Okres (), BB Squeeze Started); } {if (bbsprevlt; 1 bbsgt; = 1 AlertSqueezeEnd == true) jeśli (NewBar ()) Alert (Symbol (),, Okres (), BB Squeeze Ended); } return (0); }/ ---------------------------------------------- -------------------- double LinearRegressionValue (int Len, int shift) {double SumBars = 0; double SumSqrBars = 0; podwójne SumY = 0; podwójna suma1 = 0; podwójna Sum2 = 0; podwójny nachylenie = 0; SumBars = Len * (Len-1) * 0,5; SumSqrBars = (Len - 1) * Len * (2 * Len - 1)6; dla (int x = 0; xlt; = Len-1; x ) {double HH = Low # 91; x shift # 93 ;; podwójne LL = High # 91; x shift # 93 ;; dla (int y = x; ylt; = (x Len) -1, y ) {HH = MathMax (HH,High # 91; y shift # 93;); LL = MathMin (LL, Low # 91; y shift # 93;); } Sum1 = x * (Zamknij # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); SumY = (Zamknij # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); } Sum2 = SumBars * SumY; podwójne Num1 = Len * Sum1 - Sum2; podwójne Num2 = SumBars * SumBars-Len * SumSqrBars; if (Num2! = 0.0) {Slope = Num1Num2; } else {Slope = 0; } double Intercept = (SumY - Slope * SumBars)Len; double LinearRegValue = Intercept Slope * (Len - 1); return (LinearRegValue); } bool NewBar () {statyczny datetime dt = 0; if (dt! = Czas # 91; 0 # 93;) {dt = Czas # 91; 0 # 93 ;; Sen (100);/poczekaj na powrót znaku (true); } return (false); } return (0); # 91;left # 93;

  2. #2
    Właśnie przeczytałem ostatni wpis i było to nieco mylące.
    Jeśli bar0 jest zielony, a bar1 jest zielony, a bar2 jest czerwony, to należy go ostrzec.
    Podążanie tą trasą to jedyny sposób uniknięcia wielu alertów, ponieważ sygnał zmienia się wielokrotnie podczas paska. W ten sposób nadal będzie alarmować wiele razy, ale pierwszy sygnał będzie poprawny i po tym mogę go wyłączyć. Zamknięcie pierwszej zielonej kropki jest sygnałem, informującym o tym, że zespoły Bollingera zamknęły się poza kanałami keltnera. Czy ktoś mógłby mi powiedzieć, czy logika jest właściwa dla tego ...? Nie jestem jeszcze najlepszym programistą, ale jeśli uda mi się zrozumieć logikę, która go kryje, będę mógł go zakodować. Przeszukałem różne fora i znalazłem to samo pytanie milion razy, więc zastanawiałem się, czy jest to możliwe. Każda pomoc jest bardzo doceniana.

  3. #3
    Ok, ile będzie mnie kosztować dodanie ostrzeżenia?

  4. #4
    1 Załącznik (y) Jest to oryginalny plik bez poprzedniego ostrzeżenia.
    https://www.forex-instant.com/attach...1679738217.mq4

  5. #5

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Używamy cookies
Używamy cookies, aby jak najlepiej dostosować witrynę do Twoich potrzeb. Kontynuowanie przeglądania tej strony, oznacza zgodę na używanie plików cookies. Aby uzyskać więcej informacji zapoznaj się z naszą Polityką Prywatności.