Halo semua, saya # 8217; m menghadapi masalah dengan amaran yang boleh didengar untuk indior Squeeze. Saya dapati amaran untuk memerah BBS, amaran berfungsi # 8230; bukan dengan cara saya lebih suka. Isyarat sebenar adalah apabila titik berubah hijau pada penutup bar dan titik sebelumnya adalah merah. Sekarang isyarat bunyi pada setiap titik merah dan biasanya beberapa kali sejak titik semasa boleh berubah dari merah ke hijau berulang-ulang. Jadi, sekiranya saya dapat memaklumkannya dengan menutupnya, ia masih akan memberi amaran pada setiap titik merah, apabila isyarat untuk saya sebenarnya titik hijau sebelum titik merah. Entah bagaimana saya memerlukannya untuk memberi amaran apabila titik menutup hijau dan titik sebelumnya adalah merah. Adakah ini mungkin? Jika seseorang tahu bagaimana ini dapat dilaksanakan, saya amat menghargai apa-apa bantuan. Terima kasih terlebih dahulu.
Kod dimasukkan # 91; kiri # 93;/ -------------------------------------- ---------------------------- /| bbsqueeze.mq4 |/| Hak cipta © 2005, Nick Bilak, beluk # 91; AT # 93; gmail.com |/| ditingkatkan sedikit oleh CJ Rivas, carlos # 91; AT # 93; vealo.com |/ ----------------------------------------------- ------------------- #property copyright Copyright © 2005, Nick Bilak #property indior_separate_window #property indior_buffers 6 #property indior_color1 Blue #property indior_color2 Red #property indior_color3 DarkBlue #property indior_color4 Maroon #property indior_color5 Red #property indior_color6 Lime/---- parameter input 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;//buffer double upB # 91; # 93 ;; double upB2 # 91; # 93 ;; double loB # 91; # 93 ;; double loB2 # 91; # 93 ;; double upK # 91; # 93 ;; double loK # 91; # 93 ;; int i, j, slippage = 3; double breakpoint = 0.0; double ema = 0.0; int peakf = 0; int puncak = 0; int valleyf = 0; int valleys = 0, limit = 0; double ccis # 91; 61 # 93;, ccif # 91; 61 # 93 ;; delta double = 0; double ugol = 0;/ ----------------------------------------------- ------------------- /| Fungsi permulaan indir kustom |/ ----------------------------------------------- ------------------- 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);///kembali (0); }/ ---------------------------------------------- -------------------- /| Fungsi deinitialization indior custor |/ ----------------------------------------------- ------------------- int deinit () {//----/---- return (0); }/ ---------------------------------------------- -------------------- /| Fungsi lelaran indior kustom |/ ----------------------------------------------- ------------------- int start () {int counted_bars = IndiorCounted (); int shift, limit; double diff, d, dPrev, std, bbs; jika (counted_barslt; 0) pulangan (-1); jika (counted_barsgt; 0) counted_bars--; had = Bars-31; jika (counted_barsgt; = 31) had = Bars-counted_bars-1; untuk (shift = limit; shiftgt; = 0; shift--) {//d = iMomentum (NULL, 0, momPrd, PRICE_CLOSE, shift); d = LinearRegressionValue (bolPrd, shift); dPrev = LinearRegressionValue (bolPrd, shift 1); jika (dgt; 0) {if ((dPrevgt; 0) (dPrev gt; d)) {upB2 # 91; shift # 93; = d; upB # 91; peralihan # 93; = 0; } else {upB # 91; shift # 93; = d; upB2 # 91; shift # 93; = 0; }/upB # 91; peralihan # 93; = 0; loB # 91; peralihan # 93; = 0; loB2 # 91; shift # 93; = 0; } else {if ((dPrevlt; 0) (dPrev lt; d)) {loB2 # 91; shift # 93; = d; loB # 91; peralihan # 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; peralihan # 93; = d; } diff = iATR (NULL, 0, keltPrd, shift) * keltFactor; std = iStdDev (NULL, 0, bolPrd, MODE_SMA, 0, PRICE_CLOSE, shift); bbs = bolDev * stddiff; jika (bbslt; 1) {upK # 91; shift # 93; = 0; loK # 91; peralihan # 93; = EMPTY_VALUE; } else {loK # 91; shift # 93; = 0; upK # 91; peralihan # 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) if (NewBar ()) Alert (Symbol (),, Period (), BB Squeeze Started); } {if (bbsprevlt; 1 bbsgt; = 1 AlertSqueezeEnd == true) if (NewBar ()) Alert (Symbol (),, Period (), BB Squeeze Ended); } kembali (0); }/ ---------------------------------------------- -------------------- Double LinearRegressionValue (int Len, shift int) {double SumBars = 0; double SumSqrBars = 0; double SumY = 0; double Sum1 = 0; double Sum2 = 0; Lereng berganda = 0; SumBars = Len * (Len-1) * 0.5; SumSqrBars = (Len - 1) * Len * (2 * Len - 1)6; untuk (int x = 0; xlt; = Len-1; x ) {double HH = Rendah # 91; x shift # 93 ;; double LL = High # 91; x shift # 93 ;; untuk (int y = x; ylt; = (x Len) -1; y ) {HH = MathMax (HH,Tinggi # 91; y shift # 93;); LL = MathMin (LL, Rendah # 91; y shift # 93;); } Sum1 = x * (Tutup # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); SumY = (Tutup # 91; x shift # 93; - ((HH LL)2 iMA (NULL, 0, Len, 0, MODE_EMA, PRICE_CLOSE, x shift))2); } Sum2 = SumBars * SumY; double Num1 = Len * Sum1 - Sum2; double Num2 = SumBars * SumBars-Len * SumSqrBars; jika (Num2! = 0.0) {Lereng = Num1Num2; } else {Slope = 0; } double Intercept = (SumY - Slope * SumBars)Len; double LinearRegValue = Pintas Lereng * (Len - 1); kembali (LinearRegValue); } bool NewBar () {datetime statik dt = 0; jika (dt! = Masa # 91; 0 # 93;) {dt = Masa # 91; 0 # 93 ;; Tidur (100);/tunggu pulangan semak (benar); } kembali (palsu); } kembali (0); # 91;kiri # 93;