[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 133

 
win_idx - doğru mu?
 
alsu :
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);
}
//+------------------------------------------- --------------------+

 
MK07 :

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:

 int start()
  {
   int counted_bars= IndicatorCounted (),
       limit;  
       
     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==false)
           { 
             int win_idx= WindowFind ( "MACD_max-min" );
             // находим номер подокна нашего индикатора
      
             if (win_idx< 0 )
              {
               // если номер подокна равен -1, то возникла ошибка
                 Print ( "Окно не найдено" );
                 return ( 0 );
              }  
              
             double    top= WindowPriceMax (win_idx); 
               //находим максимальное значение вертикальной шкалы указанного подокна текущего графика
             topBuffer[i]=top;
             Comment ( "\n" , " top = " ,top); 

             ObjectCreate ( "max" , OBJ_HLINE ,win_idx, 0 , 0 );
             // рисуем горизонтальную линию в подокне нашего индикатора
             ObjectSet ( "max" , OBJPROP_PRICE1, top);  
             ObjectSet ( "max" , OBJPROP_COLOR , Yellow );
             ObjectSet ( "max" , OBJPROP_WIDTH , 0 );
 
             WindowRedraw ();      
             // перерисовываем окно, чтобы увидить линиию   
      
             initFinished=true;
             // рисование закончено  
        
           } 
        
            
                
        
      }  
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
//Пробуйте с учетом мнения alsu. 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
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);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}return(0);}
//+------------------------------------------------------------------+
 
iyi günler, lütfen bana yardım edin MetaFX'i yeni kurdum ve demodaki danışman her şey çalışıyor, ancak orijinalde sadece istemiyor
 

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 !

 
Roll :

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.
Misal:
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:

 extern string sym1= "GBPUSD" ;
extern string sym2= "GBPJPY" ;
extern string sym3= "EURUSD" ;
extern string sym4= "EURJPY" ;
extern string sym5= "AUDUSD" ;
extern string sym6= "AUDJPY" ;
extern string sym7= "NZDUSD" ;
extern string sym8= "USDCAD" ;

string sym[ 8 ];
//+------------------------------------------------------------------+
int init(){sym[ 1 ]=sym1;sym[ 2 ]=sym2;sym[ 3 ]=sym3;sym[ 4 ]=sym4;
   sym[ 5 ]=sym5;sym[ 6 ]=sym6;sym[ 7 ]=sym7;sym[ 8 ]=sym8; return ( 0 );}

int start(){ Alert ( "символ  " ,sym[ 1 ]); return ( 0 );}
 
Roll :

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.

 
r772ra :

müdahale ettiğim için özür dilerim

topBuffer[i] döngü ve çizim için şunu deneyin:

Seçeneğiniz çalışmıyor, ancak dikkatiniz, çalışmanız ve diğer insanların sorunlarını anladığınız için BÜYÜK TEŞEKKÜRLER.