MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1730

 
anrei2002 # :

Alakasız oklar hemen kayboldu!!!

Anlayacağınızı zannetmiyorum, buna benzer bir sorunu olan bir müşterim vardı, bir sene bu anı ona anlatamadım, farklı bir gösterge vardı ama bir de gözetlemeyle. O da aptal biri değil gibi görünüyor ama anlaşılan kâr hırsı gerçekten mantığı ve düşünceyi kapatıyor.. Sonunda çok para sızdırdığında her şeyi anladı. Sol oklar görünür çünkü şimdiki zamanda gelecekten hiçbir çubuk yoktur, bu nedenle gösterge ne yapacağını bilmeden bu okları vurmadığı yerlere atar. Yeniden yüklerseniz, yalnızca sağ oklar kalır, ama tarihte .. Bu tür göstergelerden çok gördüm

 
MakarFX # :
Bana zaten ne yaptığını göster.
#özellik açıklaması "Stokastik Osilatör"
#mülkiyet katı

#özellik göstergesi_separate_window
#özellik göstergesi_minimum 0
#özellik göstergesi_maksimum 100
#özellik göstergesi_tamponları 2
#özellik göstergesi_color1 LightSeaGreen
#özellik göstergesi_renk2 Kırmızı
#özellik göstergesi_düzey1 20.0
#özellik göstergesi_düzey2 80.0
#özellik göstergesi_levelcolor clrSilver
#özellik göstergesi_levelstyle STYLE_DOT
//--- giriş parametreleri
giriş int InpKPeriod=5; // K dönem
giriş int InpDPeriod=3; // D Noktası
giriş int InpYavaşlama=3; // Yavaşlama

girdi dizisi PARA_Ref = "$USDX";
giriş dizisi PARA = "ETHUSD";


//--- arabellekler
çift ExtMainBuffer[];
çift ExtSignalBuffer[];
doubleExtHighesBuffer[];
çift ExtLowesBuffer[];

çiftcl[];
doublehi[];
çift lo[];



//---
int draw_begin1=0;
int draw_begin2=0;
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int OnInit(void)
{
string kısa_adı;
//--- Sayım için 2 ek tampon kullanılır.
Gösterge Tamponları(4);
SetIndexBuffer(2, ExtHighesBuffer);
SetIndexBuffer(3, ExtLowesBuffer);
//--- gösterge çizgileri
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0, ExtMainBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1, ExtSignalBuffer);
//--- DataWindow ve gösterge alt pencere etiketinin adı
short_name="Stochastic_Mult_1("+IntegerToString(InpKPeriod)+","+IntegerToString(InpDPperiod)+","+IntegerToString(InpSlowing)+")";
GöstergeShortName(short_name);
SetIndexLabel(0,short_name);
SetIndexLabel(1, "Sinyal");
//---
draw_begin1=InpKPperiod+InpYavaşlama;
draw_begin2=draw_begin1+InpDPperiod;
SetIndexDrawBegin(0,draw_begin1);
SetIndexDrawBegin(1,draw_begin2);
//--- başlatma tamamlandı
dönüş(INIT_SUCCESSED);
}
//+------------------------------------------- --------------------+
//| Stokastik osilatör |
//+------------------------------------------- --------------------+
int OnCalculate(const int oranları_toplam,
const int önceki_hesaplanmış,
const tarihsaat &saat[],
const double &aç[],
const çift &yüksek[],
const çift &düşük[],
const double &kapat[],
const uzun &tick_volume[],
const uzun &hacim[],
const int &spread[])
{
int i,k,pos,n;

//--- çubuk sayısını kontrol et
if(rates_total<=InpKPperiod+InpDPperiod+InpYavaşlıyor)
dönüş(0);
//--- 0'dan rate_total'a kadar sayma
ArraySetAsSeries(ExtMainBuffer,yanlış);
ArraySetAsSeries(ExtSignalBuffer,yanlış);
ArraySetAsSeries(ExtHighesBuffer,yanlış);
ArraySetAsSeries(ExtLowesBuffer,yanlış);
ArraySetAsSeries(düşük,yanlış);
ArraySetAsSeries(yüksek,yanlış);
ArraySetAsSeries(kapat,yanlış);

//---
pos=InpKPeriyod-1;
if(kon+1<önceki_hesaplanmış)
pos=prev_hesaplanmış-2;
başka
{
for(i=0; i<pos; i++)
{
ExtLowesBuffer[i]=0.0;
ExtHighesBuffer[i]=0.0;
}
}
//--- HighesBuffer[] ve ExtHighesBuffer[] hesaplayın
for(i=pos; i<rates_total && !IsStopped(); i++)
{
çift dmin=1000000.0;
çift dmax=-1000000.0;
for(k=i-InpKPeriod+1; k<=i; k++)
{
n = ik;
if(dmin>iLow(PARA,0,n)* iLow(PARA_Ref,0,n)) // orijinal: if(dmin>low[k])
dmin=iLow(PARA,0,n)* iLow(PARA_Ref,0,n); // orijinal: dmin=düşük[k];
if(dmax<iHigh(PARA,0,n)* iHigh(PARA_Ref,0,n)) // orijinal: if(dmax<yüksek[k])
dmax=iYüksek(PARA,0,n)* iYüksek(PARA_Ref,0,n); // orijinal: dmax=yüksek[k];

}
ExtLowesBuffer[i]=dmin;
ExtHighesBuffer[i]=dmax;
}
//--- %Kline
pos=InpKPperiod-1+InpYavaşlama-1;
if(kon+1<önceki_hesaplanmış)
pos=prev_hesaplanmış-2;
başka
{
for(i=0; i<pos; i++)
ExtMainBuffer[i]=0.0;
}
//--- ana döngü
for(i=pos; i<rates_total && !IsStopped(); i++)
{
doublesumlow=0.0;
çift toplamyüksek=0.0;
for(k=(i-InpYavaşlama+1); k<=i; k++)
{
n = ik;
toplam +=((iClose(PARA,0,n) * iClose(PARA_Ref,0,n))-ExtLowesBuffer[k]); // orijinal: toplam +=(kapat[k]-ExtLowesBuffer[k]);
sumhigh+=(ExtHighesBuffer[k]-ExtLowesBuffer[k]);
}
if(toplamyüksek==0.0)
ExtMainBuffer[i]=100.0;
başka
ExtMainBuffer[i]=toplam/toplamyüksek*100.0;
}
//--- sinyal
pos=InpDPeriyod-1;
if(kon+1<önceki_hesaplanmış)
pos=prev_hesaplanmış-2;
başka
{
for(i=0; i<pos; i++)
ExtSignalBuffer[i]=0.0;
}
for(i=pos; i<rates_total && !IsStopped(); i++)
{
çift toplam=0.0;
for(k=0; k<InpDPPeriod; k++)
sum+=ExtMainBuffer[ik];
ExtSignalBuffer[i]=sum/InpDPperiod;
}
//--- OnHesaplama tamamlandı. Yeni prev_calculated döndürün.
dönüş(oranlar_toplam);
}
//+------------------------------------------- --------------------+
 
mantığı kaybetmeden düzeltilebilir, ancak 8. çubuğa, hatta 9. çubuğa bir ok çizecektir (ancak yeniden çizmeden ve sol sinyaller olmadan). Böyle birine ihtiyacın olacak mı? Yani yeni ve en taze ok 9. barda olacak. Ve açılış gecikmesi de 9 bar olacak, buna ihtiyacınız var mı?
 
Nikolay Ivanov # :

Anlayacağınızı zannetmiyorum, buna benzer bir sorunu olan bir müşterim vardı, bir sene bu anı ona anlatamadım, farklı bir gösterge vardı ama bir de gözetlemeyle. O da aptal biri değil gibi görünüyor ama anlaşılan kâr hırsı gerçekten mantığı ve düşünceyi kapatıyor.. Sonunda çok para sızdırdığında her şeyi anladı. Sol oklar görünür çünkü şimdiki zamanda gelecekten hiçbir çubuk yoktur, bu nedenle gösterge ne yapacağını bilmeden bu okları vurmadığı yerlere atar. Yeniden yüklerseniz, yalnızca sağ oklar kalır, ama tarihte .. Bu tür göstergelerden çok gördüm

Ben bir programcı değilim, ancak oku yeni bir mum görünümüyle düzeltmenin neden imkansız olduğunu hala anlamıyorum?

Dünya yeniden çizilen göstergelerle dolu ve herkes için harika çalışıyor! Ok, verilen kesişme ile birlikte hareket eder ve fırlatma gerçekleşmez.

Hepsinin kodu aynı...

Dosyalar:
02.png  15 kb
 
asdkika1 # :

Ne yapmak istediğini yazsan iyi olur ... nokta nokta

 
anrei2002 # :

Ben bir programcı değilim, ancak oku yeni bir mum görünümüyle düzeltmenin neden imkansız olduğunu hala anlamıyorum?

Dünya yeniden çizilen göstergelerle dolu ve herkes için harika çalışıyor! Ok, verilen kesişme ile birlikte hareket eder ve fırlatma gerçekleşmez.

Hepsinin kodu aynı...

Genel yeniden çizim, sinyal çubuğunun kendisinin (üzerinde okun) bir sinyalin görünümü için hesaplamalara katılması ve 0 indeksine sahip olabilmesidir. SONRA geçerli çubuktur.. Her tikte yeniden çizilir ve buna göre, sinyal de yeniden çizilebilir..

Ama 0 bara ek olarak -1 -2 -3 -4 -5 -6 -7 kullanıyorsunuz.. eksi 8. bar nereden geliyor??? 0. çubuğu kullanmak bile zaten kötü bir biçimdir.. ve eksi endeksli çubuklar kesinlikle kabul edilemez..

Nasıl düzeltileceğini yukarıda yazdım.. Sinyalin sağında 8 çubuk olana kadar beklerseniz düzgün çalışacaktır, o zaman her şey yoluna girecek, okun her zaman 9 çubuk geç kalacağını düşünmez, buna ihtiyacın var mı?

 
MakarFX # :

Ne yapmak istediğini yazsan iyi olur ... nokta nokta

iki çiftin çarpımından Stokastik hesaplanması.
Az önce standart Stokastik göstergesini aldım ve değiştirdim
veri girişi (satırlar işaretlenmiştir).
OnCalculate hiç kullanılmadı - görünüşe göre köpek burada gömülü.
çalışmıyor - nedenini anlamıyorum.
Tüm göstergeyi kendim almak zorunda kalmayacağımı umuyordum.
yeniden şekillendir - sonuçta, her şey çok basit olmalı.
 
Nikolay Ivanov # :

Genel yeniden çizim, sinyal çubuğunun kendisinin (üzerinde okun) bir sinyalin görünümü için hesaplamalara katılması ve 0 indeksine sahip olabilmesidir. SONRA geçerli çubuktur.. Her tikte yeniden çizilir ve buna göre, sinyal de yeniden çizilebilir..

Ama 0 bara ek olarak -1 -2 -3 -4 -5 -6 -7 kullanıyorsunuz.. eksi 8. bar nereden geliyor??? 0. çubuğu kullanmak bile zaten kötü bir biçimdir.. ve eksi endeksli çubuklar kesinlikle kabul edilemez..

Nasıl düzeltileceğini yukarıda yazdım.. Sinyalin sağında 8 çubuk olana kadar beklerseniz düzgün çalışacaktır, o zaman her şey yoluna girecek, okun her zaman 9 çubuk geç kalacağını düşünmez, buna ihtiyacın var mı?

İşte bu tür başka bir göstergeye bir örnek!

Grafikteki oklara ek olarak, bodrumdaki çizgilerin kesiştiği yerde de daireler var.

Ve daireler, okların aksine, kesinlikle çizgilerin kesişme noktalarından sonra gider! Fazladan daire yok.

Oklar neden yanlış???

Dosyalar:
03.png  98 kb
EATA__Alert.mq4  20 kb
 
anrei2002 # :

İşte böyle bir başka göstergeye bir örnek!

Grafikteki oklara ek olarak, bodrumdaki çizgilerin kesiştiği yerde de daireler var.

Ve daireler, okların aksine, kesinlikle çizgilerin kesişme noktalarından sonra gider! Fazladan daire yok.

Oklar neden yanlış???

bu göstergeyi test cihazında çalıştırın ve görselleştirmedeki çizgileri ve daireleri hızlandırılmış bir hızda izleyin.

 
asdkika1 # :
iki çiftin çarpımından Stokastik hesaplanması.
Az önce standart Stokastik göstergesini aldım ve değiştirdim
veri girişi (satırlar işaretlenmiştir).
OnCalculate hiç kullanılmadı - görünüşe göre köpek burada gömülü.
çalışmıyor - nedenini anlamıyorum.
Tüm göstergeyi kendim almak zorunda kalmayacağımı umuyordum.
yeniden şekillendir - sonuçta, her şey çok basit olmalı.

Neyin çarpımı??? açık? kapat? Stoch?

Neden: