Aynı türden N tane dış değişken verilmiştir. Kodu karıştırmadan bunlardan maksimum değer nasıl seçilir - MathMax maksimum iki değer döndürür ve varsa, diyelim ki 20 ?
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
win_idx - doğru mu?
win_ind doğru.
ObjectCreate("maks",OBJ_HLINE,win_idx,0,üst); istenilen pencerede çizer,
ObjectSet("maks",OBJPROP_COLOR,Sarı); doğru renkle boya
ObjectSet("maks",OBJPROP_WIDTH,0); doğru çizgiyi çizer
ancak en üstteki parametreyi tanımlamaz
double top=WindowPriceMax(win_idx);
ve topBuffer[] boş.
kod
#özellik göstergesi_separate_window
#özellik göstergesi_tamponları 3
#özellik göstergesi_color1 Kireç
#özellik göstergesi_renk2 Kırmızı
//--- arabellekler
çift ExtMapBuffer1[];
çift ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // başlatma durumunu hatırlayacak bir değişken ekleyin.
// false - henüz başlatma yok
// doğru - oldu
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
//---- göstergeler
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
göstergeDigits(5);
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge sıfırlama işlevi |
//+------------------------------------------- --------------------+
int tanım()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge yineleme işlevi |
//+------------------------------------------- --------------------+
int başlangıç()
{
int counted_bars=IndicatorCounted(),
sınır;
if(counted_bars>0)
counted_bars--;
limit=bars-counted_bars;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==yanlış)
{
GöstergeShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// göstergemizin alt pencere numarasını bulun
if(win_idx<0)
{
// alt pencere numarası -1 ise, bir hata oluştu
Print("Pencere bulunamadı");
dönüş(0);
}
double top=WindowPriceMax(win_idx);
//geçerli grafiğin belirtilen alt penceresinin dikey ölçeğinin maksimum değerini bulun
ObjectCreate("maks",OBJ_HLINE,win_idx,0,üst);
// gösterge alt penceremizde yatay bir çizgi çizin
ObjectSet("maks",OBJPROP_COLOR,Sarı);
ObjectSet("maks",OBJPROP_WIDTH,0);
WindowRedraw();
// çizgiyi görmek için pencereyi yeniden çiz
initFinished=true;
// çizim bitti
}
topBuffer[i]=üst;
}
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
win_ind doğru.
ObjectCreate("maks",OBJ_HLINE,win_idx,0,üst); istenilen pencerede çizer,
ObjectSet("maks",OBJPROP_COLOR,Sarı); doğru renkle boya
ObjectSet("maks",OBJPROP_WIDTH,0); doğru çizgiyi çizer
ancak en üstteki parametreyi tanımlamaz
double top=WindowPriceMax(win_idx);
ve topBuffer[] boş.
kod
#özellik göstergesi_separate_window
#özellik göstergesi_tamponları 3
#özellik göstergesi_color1 Kireç
#özellik göstergesi_renk2 Kırmızı
//--- arabellekler
çift ExtMapBuffer1[];
çift ExtMapBuffer2[];
double topBuffer[];
bool initFinished=false; // başlatma durumunu hatırlayacak bir değişken ekleyin.
// false - henüz başlatma yok
// doğru - oldu
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
//---- göstergeler
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(2,DRAW_NONE);
SetIndexBuffer(2,topBuffer);
göstergeDigits(5);
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge sıfırlama işlevi |
//+------------------------------------------- --------------------+
int tanım()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| özel gösterge yineleme işlevi |
//+------------------------------------------- --------------------+
int başlangıç()
{
int counted_bars=IndicatorCounted(),
sınır;
if(counted_bars>0)
counted_bars--;
limit=bars-counted_bars;
//----
for(int i=0;i<limit;i++)
{
ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
if(initFinished==yanlış)
{
GöstergeShortName("MACD_max-min");
int win_idx=WindowFind("MACD_max-min");
// göstergemizin alt pencere numarasını bulun
if(win_idx<0)
{
// alt pencere numarası -1 ise, bir hata oluştu
Print("Pencere bulunamadı");
dönüş(0);
}
double top=WindowPriceMax(win_idx);
//geçerli grafiğin belirtilen alt penceresinin dikey ölçeğinin maksimum değerini bulun
ObjectCreate("maks",OBJ_HLINE,win_idx,0,üst);
// gösterge alt penceremizde yatay bir çizgi çizin
ObjectSet("maks",OBJPROP_COLOR,Sarı);
ObjectSet("maks",OBJPROP_WIDTH,0);
WindowRedraw();
// çizgiyi görmek için pencereyi yeniden çiz
initFinished=true;
// çizim bitti
}
topBuffer[i]=üst;
}
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
müdahale ettiğim için özür dilerim
topBuffer[i] döngü ve çizim için şunu deneyin:
Merhaba !
pzhl'yi doğru yolda itin:
Aynı türden N tane dış değişken verilmiştir. Kodu karıştırmadan bunlardan maksimum değer nasıl seçilir - MathMax maksimum iki değer döndürür ve varsa, diyelim ki 20 ?
Veya bu verilerden nasıl bir dizi oluşturulur, o zaman ArrayMaximum ne uygulanır ?
extern int A = 10;
extern int .......;
extern int N = 1253;
şimdiden teşekkürler !
https://docs.mql4.com/en/array/ArrayMaximum
int ArrayMaximum(çift dizi[], int sayı=BÜTÜN_ARRAY, int başlangıç=0)Maksimum değere sahip öğeyi arayın. İşlev, dizideki maksimum öğenin konumunu döndürür.
Seçenekler:
dizi[] - Aranacak sayısal dizi.
count - Aranacak öğe sayısı.
start - Aranacak başlangıç dizini.
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(sayı_dizi);
Print("Maks değer = ", num_array[maxValueIdx]);
Ama, formda
int Max [N] = {A,.....,N};
dizi oluşturulmaz.
Burada: A,......N - aynı türden değişkenler verilir. Değişken sayısı = N
Harici değişkenlerden (komut dosyası) bir dize dizisi oluşturmaya bir örnek:
Harici değişkenlerden (komut dosyası) bir dize dizisi oluşturmaya bir örnek:
Teşekkür ederim !
Çalıştı, ancak bir değişiklikle: yerine
int init(){sym[1]=sym1;............
böyle yap
int init(){sym[0]=sym1;.......
ve sonra tüm unsurlar dikkate alınır.
müdahale ettiğim için özür dilerim
topBuffer[i] döngü ve çizim için şunu deneyin: