MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 8
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
mql4 kullanarak böyle bir algoritmayı uygulamak için büyük bir istek var:
Farklı brokerlerden iki MT4 terminali vardır. Birinin (piyasadaki gibi) hiçbir şekilde başka bir terminale sürüklenemeyen "özel" bir göstergesi vardır.
İşte burada! "Özel" bir göstergenin arabelleklerinden okumalar almak ve bunları terminalinizdeki göstergenize uygulamak bir şekilde mümkün mü?
Kaynaklar bir şekilde başarısız olur.
Seçenek numarası 1 = Mikhalych ile bir hesap açın (doğru mu?)
Seçenek numarası 2 = gösterge verilerini bir dosyaya kaydedecek bir gösterge yazın ve kaydedin, ardından bu dosyayı başka bir terminaldeki başka bir gösterge ile okuyun ve onu kullanarak satırlar oluşturun.
Lütfen yardım edin - Göstergeyi daha hafif hale getirmeye çalışıyorum - RSI'dan bir remake, ancak gösterge değerlerinin neden farklı olduğunu anlayamıyorum?
//| SVA_02.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int RSIPeriod= 14 ;
extern int Levl= 50 ;
extern int TF= 0 ;
//---- buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers ( 1 );
SetIndexBuffer ( 0 ,MABuffer);
//---- indicator line
SetIndexStyle ( 0 , DRAW_LINE );
//----
//---- name for DataWindow and indicator subwindow label
// short_name="RSI("+IntegerToString(RSIPeriod)+")";
short_name= "RSI(" +RSIPeriod+ ")" ;
IndicatorShortName (short_name);
SetIndexLabel ( 0 ,short_name);
return ( 0 );
}
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars= IndicatorCounted ();
double rel,negative,positive,sma,x,y,Pos,Neg;
//----
if ( Bars <=RSIPeriod) return ( 0 );
if (TF!= 0 )
{
string name= WindowExpertName ();
for (i= 0 ; i< Bars -counted_bars+ 1 ; i++)
{
int barIndex= iBarShift ( NULL ,TF, Time [i], false );
MABuffer[i]= iCustom ( Symbol (),TF,name,RSIPeriod,Levl, 0 , 0 ,barIndex);
}
return ( 0 );
}
i= Bars -RSIPeriod- 1 ;
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
double sumn= 0.0 ,sump= 0.0 ;
if (i== Bars -RSIPeriod- 1 )
{
int k= Bars - 2 ;
//---- initial accumulation
while (k>=i)
{
rel= Close [k]- Close [k+ 1 ];
if (rel> 0 ) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel= Close [i]- Close [i+ 1 ];
if (rel> 0 ) sump=rel;
else sumn=-rel;
positive=(Pos*(RSIPeriod- 1 )+sump)/RSIPeriod;
negative=(Neg*(RSIPeriod- 1 )+sumn)/RSIPeriod;
}
Pos=positive;
Neg=negative;
i--;
}
i= Bars -RSIPeriod- 1 ;
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
x=positive;
y=negative;
if (x> 0 )sma= Close [i+ 1 ]+x;
else sma= Close [i+ 1 ]-y;
MABuffer[i]=sma;
i--;
}
//----
return ( 0 );
}
//+------------------------------------------------------------------+
ve
//| SVA_03.mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow
//---- input parameters
extern int RSIPeriod= 14 ;
extern int Levl= 50 ;
extern int TF= 0 ;
//---- buffers
double MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers ( 1 );
SetIndexBuffer ( 0 ,MABuffer);
//---- indicator line
SetIndexStyle ( 0 , DRAW_LINE );
//----
//---- name for DataWindow and indicator subwindow label
// short_name="RSI("+IntegerToString(RSIPeriod)+")";
short_name= "RSI(" +RSIPeriod+ ")" ;
IndicatorShortName (short_name);
SetIndexLabel ( 0 ,short_name);
return ( 0 );
}
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars= IndicatorCounted ();
double rel,negative,positive,sma,x,y,Pos,Neg;
//----
if ( Bars <=RSIPeriod) return ( 0 );
if (TF!= 0 )
{
string name= WindowExpertName ();
for (i= 0 ; i< Bars -counted_bars+ 1 ; i++)
{
int barIndex= iBarShift ( NULL ,TF, Time [i], false );
MABuffer[i]= iCustom ( Symbol (),TF,name,RSIPeriod,Levl, 0 , 0 ,barIndex);
}
return ( 0 );
}
i= Bars -RSIPeriod- 1 ;
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
double sumn= 0.0 ,sump= 0.0 ;
if (i== Bars -RSIPeriod- 1 )
{
int k= Bars - 2 ;
//---- initial accumulation
while (k>=i)
{
rel= Close [k]- Close [k+ 1 ];
if (rel> 0 ) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel= Close [i]- Close [i+ 1 ];
if (rel> 0 ) sump=rel;
else sumn=-rel;
positive=(Pos*(RSIPeriod- 1 )+sump)/RSIPeriod;
negative=(Neg*(RSIPeriod- 1 )+sumn)/RSIPeriod;
}
x=positive;
y=negative;
Pos=positive;
Neg=negative;
if (x> 0 )sma= Close [i+ 1 ]+x;
else sma= Close [i+ 1 ]-y;
MABuffer[i]=sma;
i--;
}
//----
return ( 0 );
}
//+------------------------------------------------------------------+
Lütfen yardım edin - Göstergeyi daha hafif hale getirmeye çalışıyorum - RSI'dan bir remake, ancak gösterge değerlerinin neden farklı olduğunu anlayamıyorum?
...
ve
...
Lütfen yardım edin - Göstergeyi daha hafif hale getirmeye çalışıyorum - RSI'dan bir remake, ancak gösterge değerlerinin neden farklı olduğunu anlayamıyorum?
Ne yapmaya çalıştığınız, neyi yanlış yaptığınız ve sonunda ne elde etmek istediğiniz hiç de net değil.
Başlangıçta, RSI kısmını hesaplarken fazladan tamponlardan kurtulmaya çalışıyorum, fazladan tamponları teorik olarak kaldırmak şuydu:
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
double sumn= 0.0 ,sump= 0.0 ;
if (i== Bars -RSIPeriod- 1 )
{
int k= Bars - 2 ;
//---- initial accumulation
while (k>=i)
{
rel= Close [k]- Close [k+ 1 ];
if (rel> 0 ) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel= Close [i]- Close [i+ 1 ];
if (rel> 0 ) sump=rel;
else sumn=-rel;
positive=(PosBuffer[i+ 1 ]*(RSIPeriod- 1 )+sump)/RSIPeriod;
negative=(NegBuffer[i+ 1 ]*(RSIPeriod- 1 )+sumn)/RSIPeriod;
}
PosBuffer[i]=positive;
NegBuffer[i]=negative;
i--;
}
PosBuffer[i] ve NegBuffer[i] aslında bir çubuktan daha derinde kullanılmayan, ancak belleği tüketen pozitif ve negatif geçmiş değerleridir:
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
double sumn= 0.0 ,sump= 0.0 ;
if (i== Bars -RSIPeriod- 1 )
{
int k= Bars - 2 ;
//---- initial accumulation
while (k>=i)
{
rel= Close [k]- Close [k+ 1 ];
if (rel> 0 ) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel= Close [i]- Close [i+ 1 ];
if (rel> 0 ) sump=rel;
else sumn=-rel;
positive=(Pos*(RSIPeriod- 1 )+sump)/RSIPeriod;
negative=(Neg*(RSIPeriod- 1 )+sumn)/RSIPeriod;
}
Pos=positive;
Neg=negative;
i--;
}
Ardından, aynı döngüde daha fazla SVA_02 hesaplaması yapan göstergem için kısmı kestim (kodun sorunlu kısmı sağlandı).
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
x=positive;
y=negative;
if (x> 0 )sma= Close [i+ 1 ]+x;
else sma= Close [i+ 1 ]-y;
MABuffer[i]=sma;
i--;
}
Ve sonra döngü aynı olduğu için hesaplamayı ilk döngüye koyabileceğinizi düşündüm - SVA_03 çıktı
if (counted_bars>=RSIPeriod) i= Bars -counted_bars- 1 ;
while (i>= 0 )
{
double sumn= 0.0 ,sump= 0.0 ;
if (i== Bars -RSIPeriod- 1 )
{
int k= Bars - 2 ;
//---- initial accumulation
while (k>=i)
{
rel= Close [k]- Close [k+ 1 ];
if (rel> 0 ) sump+=rel;
else sumn-=rel;
k--;
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
}
else
{
//---- smoothed moving average
rel= Close [i]- Close [i+ 1 ];
if (rel> 0 ) sump=rel;
else sumn=-rel;
positive=(Pos*(RSIPeriod- 1 )+sump)/RSIPeriod;
negative=(Neg*(RSIPeriod- 1 )+sumn)/RSIPeriod;
}
x=positive;
y=negative;
Pos=positive;
Neg=negative;
if (x> 0 )sma= Close [i+ 1 ]+x;
else sma= Close [i+ 1 ]-y;
MABuffer[i]=sma;
i--;
}
//----
return ( 0 );
}
Son adımda, MABuffer[i] sonuçlarının SVA_02 ve SVA_03'te farklı olduğu ortaya çıkıyor - hatanın ne olduğunu mantıksal olarak anlayamıyorum.
03'te, çubuk için pozitif ve negatif hesaplandı ve bunları hemen ortalamayı hesaplamak için kullandı. 02'de, ortalamanın hesaplanması ayrı bir döngüde, pozitif ve negatif olarak ne? Bir şey var ama hesaplanan çubuk için değil.
Evet, öyle, ama asıl fark nedir? Döngüler aynı - lütfen mantıksal hatanın ne olduğunu anlamama yardım edin.
Bir şeyi nasıl açıklayabilirsin? Zaten burada açıklanmıştır. Bu açıklamanın neresi yanlış? Al böyle bir yaşam tarzı - bir aptalı sürmek ve bir aptal gibi biçmek mi? Bundan sonra bir şeyi nasıl açıklarsın? Kafasına balyoz mu? Peki, kaskını çıkar.
Evet, çünkü " Bir şey var ama hesaplanan çubuk için değil. " ifadesi garip geliyor çünkü döngü önceki pozitif ve negatif döngüden bir değer içeriyor.
Bazı son çubuklar için son döngüden, içinde bir şey kalır ve bunu her çubuk için uygularsınız. Doğru versiyonda, değişkenlerde hiçbir şey kalmaz, ancak her çubuk için hesaplanır ve hemen ortalamayı hesaplamak için kullanılır.
anlamaya çalışıyorum. Onlar. sizce doğru seçenek SVA_03 değil mi?