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

 
Özel bir göstergeyi yeniden çizen bir komut bulamıyorum. eger birisi biliyorsa lutfen bana soylesin. şimdiden teşekkürler =)
 
tesla-pip :
Özel bir göstergeyi yeniden çizen bir komut bulamıyorum. eger birisi biliyorsa lutfen bana soylesin. şimdiden teşekkürler =)

Ben zaten buldum. hepinize teşekkür ederim =)
 

Tünaydın.

Bir formül bulmama yardım et.

SD=100 dolum adımı var;

fiyat 25 ise, bunun için yeniden doldurma seviyesi UD=100 olacaktır.

fiyat 102'ye eşitse, bunun için yeniden doldurma seviyesi UD=200 olacaktır.

fiyat 215 ise, yeniden doldurma seviyesi UD=300 olacaktır.

fiyat tekrar 135'e düştü, tamamlama seviyesi UD=200 olacak

 
TarasBY :

Ve bu sıra normaldir (bunlar terminalin ilkeleridir).

A göstergesinin parametrelerini değiştirirken gösterge B'nin okumalarını değiştirmesini istiyorsanız, göstergeler arasında bilgi alışverişi yapın (belki bir dosya, terminalin global değişkenleri, bilgisayar RAM'i): gösterge A başlatma sırasında başlatılmış parametrelerini iletir ve gösterge B periyodik olarak kontrol eder A göstergesinin parametrelerindeki olası değişiklikler için. Değişiklikler algılandığında, B göstergesinin de yeni parametrelerle yeniden başlatılması gerekir (zorunlu init() çalıştırması).

Cevabınız için teşekkür ederim ama kullanamam çünkü. Her şeyi anlamadım ve programlama konusunda pek güçlü değilim, göstergelerimin kodlarında gerekli değişiklikleri yapar mısınız?



İlk gösterge kodu A'dır.

İkinci kod gösterge B'dir.

 //---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Black
#property  indicator_color2  Green
#property  indicator_color3  Red
#property  indicator_width2   2
#property  indicator_width3   2
#property  indicator_level1 0.0

//---- input parameters
extern int FastPeriod = 5 ;
extern int LowPeriod  = 34 ;
//---- indicator buffers
double      ExtBuffer0[];
double      ExtBuffer1[];
double      ExtBuffer2[];



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   SetIndexStyle( 0 , DRAW_NONE );
   SetIndexStyle( 1 , DRAW_HISTOGRAM );
   SetIndexStyle( 2 , DRAW_HISTOGRAM );
   IndicatorDigits( Digits + 1 );
   SetIndexDrawBegin( 0 , 34 );
   SetIndexDrawBegin( 1 , 34 );
   SetIndexDrawBegin( 2 , 34 );
//---- 3 indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtBuffer0);
   SetIndexBuffer ( 1 ,ExtBuffer1);
   SetIndexBuffer ( 2 ,ExtBuffer2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName( "My_AO" );
   SetIndexLabel( 1 , NULL );
   SetIndexLabel( 2 , NULL );
//---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
      
  
   int     limit;
   int     counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
//---- macd
   for ( int i= 0 ; i<limit; i++)
      ExtBuffer0[i]= iMA ( NULL , 0 ,FastPeriod, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,LowPeriod, 0 , MODE_SMA , PRICE_MEDIAN ,i);
//---- dispatch values between 2 buffers
   bool up= true ;
   for (i=limit- 1 ; i>= 0 ; i--)
     {
      current=ExtBuffer0[i];
      prev=ExtBuffer0[i+ 1 ];
       if (current>prev) up= true ;
       if (current<prev) up= false ;
       if (!up)
        {
         ExtBuffer2[i]=current;
         ExtBuffer1[i]= 0.0 ;
        }
       else
        {
         ExtBuffer1[i]=current;
         ExtBuffer2[i]= 0.0 ;
        }
        
       
     }
//---- done
   return ( 0 );
  }
#property indicator_separate_window
#property indicator_minimum - 1.5
#property indicator_maximum 1.5
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property  indicator_width1   2
#property  indicator_width2   2
#property indicator_level1 0.0

//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle( 0 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexStyle( 1 , DRAW_HISTOGRAM );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {  
      
       
     double UP,DN;     
  
  
     int counted_bars=IndicatorCounted(),
       limit;  
       
     if (counted_bars> 0 )
      counted_bars--;
   
      limit= Bars -counted_bars;
//----
   for ( int i= 0 ;i<limit;i++)
       
      { 
        UP= iCustom ( NULL , 0 , "My_AO" , 1 ,i+ 1 );               
        DN= iCustom ( NULL , 0 , "My_AO" , 2 ,i+ 1 );    
             
        
       if (UP> 0 )       
         {ExtMapBuffer1[i+ 1 ]= 1 ;
          ExtMapBuffer2[i+ 1 ]= 0 ;
         }
         
       if (UP< 0 )       
         {ExtMapBuffer1[i+ 1 ]=- 1 ;
          ExtMapBuffer2[i+ 1 ]= 0 ;
         }  
         
                              
       if (DN> 0 )            
         {
          ExtMapBuffer1[i+ 1 ]= 0 ;
          ExtMapBuffer2[i+ 1 ]= 1 ;
         }
              
       if (DN< 0 )            
         {
          ExtMapBuffer1[i+ 1 ]= 0 ;
          ExtMapBuffer2[i+ 1 ]=- 1 ;
         }
               
                       
    
    }
//----
   return ( 0 );
 
   }
   
//+------------------------------------------------------------------+    
   

 

son soruyu çözdüm yeni soru var

Her çubuktaki yeniden doldurma seviyesini yeniden hesaplarım.

Son çubuktaki seviyeyi nasıl hatırlayabilirim?

ve bir anlaşma açmak için kullanın

 
MK07 :
Cevabınız için teşekkür ederim ama kullanamam çünkü. Her şeyi anlamadım ve programlama konusunda pek güçlü değilim, göstergelerimin kodlarında gerekli değişiklikleri yapar mısınız?

Bana "oynadığın" şeyi yapmamı teklif ediyorsun. Üzgünüm, ilgilenmiyorum.

Ve programlamayı öğreniyorsanız, bu sizin için ilginç bir görevdir.

 
Hepinize iyi günler. "CurrencyPowerMeter" türkiye ile ilgili bir sorun vardı, yani onu terminal penceresinde farklı bir konuma taşıyamıyorum. Yardım etme fırsatı varsa çok mutlu olurum.
 
Sormaya karar verdim, belki söylerim. Bir gösterge yazıyorum, göstergede bir kene zaman diliminde keneler işliyorum (bu, bağımsız olarak açılır, bu ). Tampon dizimde, HER tik işlenmez, ancak seçici olarak (her 60 saniyede bir onay işareti olduğunu varsayalım, ancak bu hiç gerekli değildir). Yerine
 int     counted_bars=IndicatorCounted();

Aşağıdaki yapıyı anlıyorum:

 extern int sec= 60 ; //объявляем количество секунд
int i; //будет индексом текущей "свечи" (тика)
int i_prev; //будет индексом предыдущей "свечи" (тика), отстоящего от теущего на sec секунд назад
double MyBuffer[]; //этот будет на чарте
double MyTemp[]; //этот только для подсчётов

int init(){
   IndicatorBuffers( 2 );
   SetIndexBuffer ( 0 ,MyBuffer)
   SetIndexBuffer ( 1 ,MyTemp)
   SetIndexDrawBegin( 0 , 14 );
   i= Bars - 1 ;
   while (Volume[i]-Volume[ Bars - 1 ]<sec) i--; //потому что в Volume[] на тиковом у нас время сервера точностью до секунды (а в Time[] - моделируемое для предоставления тиков на чарте)
   i_prev= Bars - 1 ; //отошли от первого исторического тика на чарте на заданное количество секунд, запомнили его, запомнили первый, уходим в start()
   return ( 0 );
}

int start(){
   double deltaHigh,deltaLow;
   int counted_bars=IndicatorCounted(); //честно говоря, не уверен, т.к. считаем мы не все "свечи" (тики)
   if (counted_bars>=i) i= Bars -counted_bars- 1 ; //аналогично
   while (i>= 0 ){ //цикл обработчика
      deltaHigh=High[i]-High[i_prev]; //к примеру
      deltaLow=Low[i_prev]-Low[i];
       //и дальше код обработчика (формируем предварительный массив MyTemp[]). В конце цикла:
      i_prev=i; //запоминаем теперь текущий индекс как индекс предыдущего тика
       while (Volume[i_prev]-Volume[i]<sec){ //и уходим вперёд на заданное количество секунд
         i--;
      }
   }
...

Şimdi bir soru. Saf bir M1 versiyonunda standart daha da

   if (counted_bars> 0 ) counted_bars--;
   int limit= Bars -counted_bars; //принтовал, при первом обращении limit=Bars-2, при последующих limit=2
   for (i= 0 ; i<=limit; i++){
      MyBuffer[i]=iMAOnArray(MyTemp, 0 , 14 , 0 , MODE_EMA , i);

Limit ve counted_bars nasıl değiştirilir? Anladığım kadarıyla,

 int counted_bars= ArraySize (MyTemp)-1; //сразу после цикла while

(çünkü 60 saniyedeki tik sayısı sabit değildir, yani sadece int counted_bars=IndicatorCounted()/_number_of_ticks_in_60_seconds_ yazmak işe yaramaz).

Yoksa her konuda yanılıyor muyum?

ps Olası bir sorudan önce cevap vereceğim: sec!=60'ın Forex'te geçerli olmadığını ve sec=60'ın anlamsız olduğunu biliyorum, ancak Forex'te işlem yapmıyorum.

 
MK07 :
Cevabınız için teşekkür ederim ama kullanamam çünkü. Her şeyi anlamadım ve programlama konusunda pek güçlü değilim, göstergelerimin kodlarında gerekli değişiklikleri yapar mısınız?
Afedersiniz, arabanız var mı? Varsa, bunu bir lüks olarak değil, sadece bir ihtiyaç olarak mı görüyorsunuz? Değilse, hayatın boyunca böyle bırakmayacaksın, değil mi? Artık böyle bir çağda, bir araba sahibi olmanız gerektiği gibi programlamayı da bilmeniz gerekiyor. Genel olarak, ben sadece bir kollektif çiftçiyim, ama en azından bir şekilde, ama bunu yapıyorum, benim için bahçedeki işten, örneğin çilingir işinden programlama, farklı değil, aynı işi kendi ellerimle (Ben köyde yaşıyor). Bulgarca, el arabası veya MQL4 benim için sadece bir araç. Belki şehir için farklı algılanır bilemiyorum. İşte kılavuzdaki global değişkenler, standart dosya işlevleri burada , bunlar daha hızlı, ancak WinAPI aracılığıyla. Dün cevap vermek istedim ama sustum.
 

Herkese iyi günler!

Dizileri kullanmayı öğreniyorum.

Bir dizim var, onu dizelerle başlattım, yani çift kütle [3567]={ 0.85374 , 0.85694 , 0.85974 ,.... };

Ve program diziyi okudu ve çalıştırdı.

Şimdi aynı diziyi bir sütunda başlattım

çift kütle[3567]

{

kütle[0] = 0.85374;
kütle[1] = 0.85694;
kütle[2] = 0.85974;
kütle[3] = 0.86174;
kütle[4] = 0.86474;
kütle[5] = 0.86494;
kütle[6] = 0.86504;

kütle[7] = 0.86524;

}

Derleyici hata vermiyor ama uyarı veriyor ve program ne diziyi ne de kodu bir bütün olarak çalıştırmıyor.

'{' - global kapsamdaki ifadeye izin verilmez C:\Program Files\Alpari NZ MT4(2)\experts\include\MASSIV.mqh (4, 2)

Dizi, daha önce olduğu gibi ( dizelerle başlatıldığında ve iyi çalıştığında), küresel düzeyde bildirilir.

 #include <MASSIV.mqh> 


 
int start()
{
 double Price=iOpen ( Symbol (), 0 , 0 );         
 double SL= NormalizeDouble (Price+ 3000 * Point , Digits );         
 double TP= NormalizeDouble (Price- 100 * Point , Digits );   

 double value =  Bid ; //параметру value функции ArrayBsearch присваивается значение  цены последнего тика
 double ld_Delta = 0.0010 ;
 int S = ArrayBsearch (  mass,  value, WHOLE_ARRAY ,   0 , MODE_ASCEND); //функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 

 int last_order_bar = 0 ;
int ot = OrdersTotal ();
...............................(остальной код опустил,но он  не изменился)

Günlükte sadece 2 giriş var.

2013.04.12 04:14:44 XXX testi başladı

2013.04.12 16:14:36 XXX EURUSD,H1: başarıyla yüklendi


SORU. PROGRAM NEDEN BİR SÜTUNDA BAŞLATILMIŞ BİR DİZİ OKUMUYOR.

Teşekkür ederim.