Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 790

 
Forexman77 :

Soru kaldırılmamış. Yani, önce.

Maksimum bulunur, ardından üzerine bir çizgi çizilir. Bu maksimum çizgi ile mevcut minimum arasındaki mesafe kontrol edilir. "Rmax" değerini aşarsa, maksimumun bulunduğu çubuğa bir ok yerleştirilir. Ok yerleştirildi, ancak orada değil. Netlik sağlamak için, farkı gösteren ve verileri tarayıcı penceresinde görünen BufferLow[i] arabelleğini ekledim.

Bu her zaman böyledir. Kışın kar yağmaz) Kendim yaptım.

Herhangi biri böyle bir fikirle eziyet ettiyse, işte kod:

 #property copyright "Kamil Gazizullin"
#property link        "forexman77@yandex.ru"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Magenta
#property indicator_color2 Aqua
#property indicator_color3 SlateBlue
#property indicator_color4 SlateBlue
#property indicator_color5 clrNONE
//--- input parameters
extern int        Period_= 10 ;
extern double diapazon  = 0.003 ;
//--- buffers
double Max[];
double Min[];
double MaxIndex[];
double MinIndex[];
double rAZNOST[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 5 );
   SetIndexBuffer ( 0 ,MaxIndex);
   SetIndexBuffer ( 1 ,MinIndex);
   SetIndexStyle( 0 , DRAW_ARROW );
   SetIndexArrow( 0 , 116 );
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW );
   SetIndexArrow( 1 , 116 );
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexBuffer ( 2 ,Max);
   SetIndexBuffer ( 3 ,Min);
   SetIndexBuffer ( 4 ,rAZNOST);
   IndicatorDigits( Digits + 1 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars=IndicatorCounted(),limit, i,k,r,p,t,f;
     double minimum,maximum,Dmax,Dmin;
   if (counted_bars> 0 )
      counted_bars--;  
   limit= Bars -counted_bars;
   for (i= 0 ;i<limit;i++)
   {
      maximum=High[iHighest( NULL , 0 ,MODE_HIGH,Period_,i)];
      minimum=Low[iLowest( NULL , 0 ,MODE_LOW,Period_,i)];
      Max[i]=maximum;
      Min[i]=minimum;
   }
   for (i= 0 ;i<limit;i++)
   {
      k=iHighest( NULL , 0 ,MODE_HIGH,Period_,i);
      t=iLowest( NULL , 0 ,MODE_LOW,Period_,i);
      Dmax=Max[i]-Low[i];
      Dmin=High[i]-Min[i];
       if (Dmax > diapazon){p=k; for (r=p;r>=k;r--)MaxIndex[k]=Max[k];}
       if (Dmin > diapazon){p=t; for (f=p;f>=t;f--)MinIndex[t]=Min[t];}
       if (MaxIndex[i]==Max[i+ 1 ])MaxIndex[i]= 0 ;
       if (MinIndex[i]==Min[i+ 1 ])MinIndex[i]= 0 ;
      rAZNOST[i]=Max[i]-Min[i];
   }
   return ( 0 );
  }
 
Awwl :

Yerleşik Heiken Ashi, açık bir kusur gibi görünüyor (Acaba 745'te sadece ben miyim?), ancak nasıl çalıştığı netleşti. Ve WmiFor'un nasıl çalıştığı belli değil!

Heiken Ashi kodunda, 4 histogram çubuğundan bir şamdan çizilir:

Onlar. arabellek sayısı arttıkça (0'dan 3'e), eskilerin üzerine yeni şeritler çizilir. Ve sıra:

DüşükYüksek - YüksekDüşük - Aç - Kapat.

Ve mumların olması gerektiği gibi, gövdeli ve kuyruklu görünmesi için sıra şöyle olmalıdır:

max(Aç,Kapat)//kalın renkli çizgi// - min(Aç,Kapat)//kalın beyaz çizgi// - Yüksek//ince renkli çizgi// - Düşük//ince beyaz çizgi//.

Göstergeyi derliyoruz, çizelgeye koyuyoruz ve tüm sorunları görüyoruz (şekle bakın).

Ancak Heiken Ashi'de olduğu gibi böyle bir yöntemin bir dezavantajı vardır - her "mum" un altında, aşağıdaki her şeyi kapsayan arka plan renginde beyaz bir tüy elde edilir. Ve WmiFor mükemmel! Belgelenmemiş özellikler ?

İlk resim Heiken Ashi (ayrı bir pencereye yerleştirilmiş), ikinci resim WmiFor, arka plan netlik için açık yeşil yapılmıştır.

Yumuşak ve yuvarlak karşılaştırma? Heiken'i harita penceresi için tasarlanmışsa ve tam olarak gölgeli mumlar ve orada bir gövde gibi çizilmişse neden ayrı bir pencereye koyalım? Ve eskilerin üzerine yeni çubuklar çizilmez, eğer arabellek değeri değişirse, aynı çubuğun boyutu değişir ve üstüne yenisi çizilmez.

MT4'te mum şeklinde bir çizim yöntemi yoktur, bu nedenle sadece bir histogram mümkündür ve tampon değerlerini nasıl hesapladığınız kendi işinizdir. Bu arada WmiFor da bir histogramla çiziyor, hadi onu ayrı bir pencereye koyalım ve kusurlarına hayret edelim)))

Ayrı bir penceredeki mumları gölgeli mumlara benzetmek için, Hızlandırıcı gibi 0'a göre çizilmeleri gerekir. Veya nesnelerle çizin, nasıl yapılır, örneğin All_Stars'a bakın

 

Hepinize iyi günler!

Beyin şişmiş; Cevabı belgelerde bulamadım, ama belki birileri karşılaştı. Danışmandaki bir satır (pozitif işlemlerin yüzdesi):

Print(OderPlushCount,"/",OderTotal,"=",DoubleToStr((OderPlushCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);

Günlüğe çıktılar (örneğin):

3/6=0.00=0 0 40

Ayrıca, çözüm 1'den ise:

3/3=1.00=1 0 40

Değişken BestOd= OderPluseCount/OderTotal çift tip, gerisi int.

Yani, 1'den küçük bir değerle karşılaşıldığında, derleyici bunu otomatik olarak 0'a çevirir ... Sabitlerden gelen son iki ifade genellikle şaşırtıcı sonuçlar verir - görünüşe göre aynı şey, ama hayır)))

Farklı ikameler denedim - 1'den büyük olan her şey doğru kesirli kısma sahiptir.

 
Igor_ :

Hepinize iyi günler!

Beyin şişmiş; Cevabı belgelerde bulamadım, ama belki birileri karşılaştı. Danışmandaki bir satır (pozitif işlemlerin yüzdesi):

Print(OderPlushCount,"/",OderTotal,"=",DoubleToStr((OderPlushCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);

Günlüğe çıktılar (örneğin):

3/6=0.00=0 0 40

Ayrıca, çözüm 1'den ise:

3/3=1.00=1 0 40

Değişken BestOd= OderPluseCount/OderTotal çift tip, gerisi int.

Yani, 1'den küçük bir değerle karşılaşıldığında, derleyici bunu otomatik olarak 0'a çevirir ... Sabitlerden gelen son iki ifade genellikle şaşırtıcı sonuçlar verir - görünüşe göre aynı şey, ama hayır)))

Farklı ikameler denedim - 1'den büyük olan her şeyin doğru bir kesirli kısmı var.

Bunu dene

DoubleToStr( (çift) (OderPluseCount/OderToplam),2)

 
AlexeyVik :

Bunu dene

DoubleToStr( (çift) (OderPluseCount/OderToplam),2)

yardımcı olmuyor Ama teşekkürler)
 
Igor_ :
yardımcı olmuyor Ama teşekkürler)
DoubleToStr( (çift) (OderPluseCount/(OderToplam*1.0))),2)
 
Vinin :
DoubleToStr( (çift) (OderPluseCount/(OderToplam*1.0))),2)

İşte böyle çalışıyor, teşekkürler. Şamanizm gibi görünüyor)))

Dürüst olmak gerekirse, görüntü konusunda değil , BestOd'un doğru hesaplanması konusunda endişeliyim. Ben de düzenlemek zorunda kaldım.

Böyle mi yaptı:

BestOd=(OderPluseCount/(OderToplam*1.0));

Bunun için herhangi bir açıklama var mı? Sonuçta, baskı için olmasaydı, böyle bir hatayı yakalamak çok zor olurdu. Hangi durumlarda dışarı çıkabilir?

 
Igor_ :

Bu şekilde çalışıyor, teşekkürler. Şamanizm gibi görünüyor)))

Dürüst olmak gerekirse, görüntü konusunda değil , BestOd'un doğru hesaplanması konusunda endişeliyim. Ben de düzenlemek zorunda kaldım.

Böyle mi yaptı:

BestOd=(OderPluseCount/(OderToplam*1.0));

Bunun için herhangi bir açıklama var mı? Sonuçta, baskı için olmasaydı, böyle bir hatayı yakalamak çok zor olurdu. Hangi durumlarda dışarı çıkabilir?

Tamsayı değerlerine sahip herhangi bir işlem için sonuç bir tamsayı olacaktır.
 

Cevabı kendim referans kitabının " Tip Döküm " bölümünde buldum.

Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме: 

Ancak çift tip, bu şemadaki en eski tiptir. Ve her iki int vardı. Bu nedenle sonuç tam sayıdır. Daha yüksek türde bir sabit (double, float) tanıtarak, tüm int'leri ona dönüştürdü.

Bir yüzyıl yaşa - bir yüzyıl öğren ve belgelere bak)))

 
Merhaba! Bir sorum var.
Açık pozisyonları yineleyen ve değiştiren bir Uzman Danışmanda olduğu gibi, bir sonraki geçiş sırasında değiştirilmiş olan emirleri yeniden değiştirmediğinden emin olun. Nasıl "meshedilmiş" olmalılar?
Aklıma hiçbir şey gelmiyor.
Çok minnettar kalırım.