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

 
dzhini :

Bana, TEST CİHAZININ, mevcut zaman dilimindeki daha düşük zaman diliminin bar sayısını belirleme koşulunu reçete etmesinin nasıl mümkün olduğunu söyleyin.

Örneğin: H1 test cihazında başlatılır, daha sonra mevcut TF üzerindeki n'inci mumun başlangıç zamanı belirlenir, bir sonraki adım aynı anda, ancak daha düşük bir zaman diliminde başlayan mumun sayısını belirlemektir. . iBarShift sürekli 0 yazar. Çubuk hesaplamasından sorumlu blok aşağıdadır:

Bunu yapamazsın. Test cihazında açılış fiyatlarında bu baykuşta kullanılan minimum TF-me üzerinde baykuş çalıştırmanız gerekmektedir. Bir dakikalığına açılmasına izin vermek daha iyidir. Ayrıca, TF reçete etmek en iyisidir - AÇIKÇA!
 
dzhini :
Yuri, biraz daha yüksek olan sorum hakkında bana bir şey söyleyebilir misin?


Kontrol edilecek komut dosyası

 //+------------------------------------------------------------------+
//|                                             VininI_CheckTime.mq4 |
//|                                            Copyright 2012, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Vinin"
#property link       "vinin@mail.ru"



//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   int TimeFrame[]={ PERIOD_MN1 , PERIOD_W1 , PERIOD_D1 , PERIOD_H4 , PERIOD_H1 , PERIOD_M30 , PERIOD_M15 , PERIOD_M5 , PERIOD_M1 };
   int i, pos;
   for (i= 0 ;i< ArraySize (TimeFrame);i++) {
       if ( Period ()<TimeFrame[i]) continue ;
      pos=i;
       break ;
   }
   for (i=pos+ 1 ;i< ArraySize (TimeFrame);i++) {
       int tmp= iBarShift ( NULL , TimeFrame[i], Time[ 0 ], true);
       if ( iTime ( NULL , TimeFrame[i], tmp)<Time[ 0 ])tmp--;
       Print ( "TimeFrame: " ,  TimeFrame[i], " TimeOpen: " , TimeToStr ( iTime ( NULL , TimeFrame[i], tmp), TIME_MINUTES), " Bar: " , tmp);
      
   
   
   }
   
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

Sonuç

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 1 TimeOpen: 00:00 Bar: 1057

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 5 TimeOpen: 00:00 Bar: 212

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 15 TimeOpen: 00:00 Bar: 70

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 30 TimeOpen: 00:00 Bar: 35

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 60 TimeOpen: 00:00 Bar: 17

2012.07.17 20:42:45 VininI_CheckTime EURUSD,Günlük: TimeFrame: 240 TimeOpen: 00:00 Bar: 4


 

Lütfen bana söyle:

Dinamikleri değiştirirken rengini değiştiren çok zamanlı bir MA yapmak istiyorum. Diğer TF'lerden ortalama fiyatın görüntüsünü yaptım, ancak rengi değiştirerek sorunu nasıl çözeceğimi hala çözemiyorum.

 //+------------------------------------------------------------------+
//|                                                      MA-MTFC.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
//+------------------------------------------------------------------+
extern int MA_TF= 1440 ;
extern int MA_Period= 89 ;
extern int MA_Shift= 0 ;
extern int MA_Method= 2 ;
extern int MA_AP= 0 ;
//+------------------------------------------------------------------+
double Buffer_Yellow[];
double Buffer_Lime[];
double Buffer_Red[];

string Symb;
double MA;

int init()
  {
   Symb= Symbol ();
   //---
   if (MA_TF != 1 )
     if (MA_TF != 5 )
     if (MA_TF != 15 )
       if (MA_TF != 30 )
       if (MA_TF != 60 )
         if (MA_TF != 240 )
         if (MA_TF != 1440 )
           if (MA_TF != 10080 )
           if (MA_TF != 43200 )
             if (MA_TF != 0 )
             return ;
   //---
   SetIndexBuffer ( 0 ,Buffer_Yellow);
   SetIndexBuffer ( 1 ,Buffer_Lime);
   SetIndexBuffer ( 2 ,Buffer_Red);
   //---
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexStyle ( 1 , DRAW_LINE );
   SetIndexStyle ( 2 , DRAW_LINE );
   //---
   return ( 0 );
  }

int deinit()
  {

   return ( 0 );
  }

int start()
  {
   double MA;
   int counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;
   if (limit> 1 ) 
      limit= Bars - 1 ;
      
   for ( int i=limit- 1 ;i>= 0 ;i--)
    {
       int pos= iBarShift ( NULL , MA_TF, Time[i]);
      MA= iMA (Symb,MA_TF,MA_Period,MA_Shift,MA_Method,MA_AP,pos);
      
      Buffer_Yellow[i]=MA;
      Buffer_Lime[i]=MA;
      Buffer_Red[i]=MA;
      
       if (Buffer_Yellow[i]>Buffer_Yellow[i+ 1 ])
       {
         Buffer_Red[i]= EMPTY_VALUE ;
       }
       else if (Buffer_Yellow[i]<Buffer_Yellow[i+ 1 ])
       {
         Buffer_Lime[i]= EMPTY_VALUE ;
       }
       else
       {
        Buffer_Red[i]= EMPTY_VALUE ;
        Buffer_Lime[i]= EMPTY_VALUE ; 
       }
      
    }

   return ( 0 );
  }
 
Roman. :
Bunu yapamazsın. Test cihazında, bu baykuşta kullanılan minimum TF-me'yi açılış fiyatlarında bir baykuş başlatmanız gerekir. Bir dakikalığına açılmasına izin vermek daha iyidir. Ayrıca, TF reçete etmek en iyisidir - AÇIKÇA!
Roman, bunu, danışman Çin'e posta treni ile gitmek gibi olana kadar göstergenin test cihazında görüntülenebilmesi için yapmaya çalışıyorum. Analiz için gösterge daha düşük TF'ler kullanır.
 
FAQ :
Kodun tamamını gösterip " SRC " düğmesini kullanarak yapıştırırsanız daha iyi olur.

tamam, kodu bu gönderiye eklemeye çalışacağım.

Aslında sonunda ne elde etmek istediğimi biliyorum - uzun süredir ticaret yapıyorum, ancak programlamaya ancak tam olarak neyi programlamak istediğimi anladıktan sonra başladım.

Şimdi hedefim, her üç hareketli ortalamanın üzerinde kapanan her çubukta yeşil bir ok ve üçünün altında kapanan her kapalı çubukta ve yalnızca grafiğe eklendikten sonra kapatılan çubuklar için kırmızı bir ok elde etmektir. Mevcut çubuk beni ilgilendirmiyor.

Bu okların, gösterge ona takılıyken grafikte olmasını ve ardından kaldırılmasını istiyorum.

Şimdi sadece netlik için hareketli ortalamalar çiziyorum ve sonra onları danışmandan çıkaracağım.

Şimdi olan şu ki, hareketli ortalamalar var, bazı oklar var, ancak bunlar ya görünüyor ya da kayboluyor ve yanlış çubuklarda görünüyor. Anlamadığım şey bu.

Sanırım 106-111 satırlarında j veya j+1 ile ve bunları hangi arabellek öğesine ekleyeceğimi karıştırdım.


tavsiye verirseniz teşekkür ederim.


Bazı nedenlerden dolayı SRC düğmesi çalışmıyor. Dosyayı her zamanki gibi eklemeye çalışacağım mq4

Dosyalar:
t11.mq4  5 kb
 
Vinin :


Kontrol edilecek komut dosyası

Hedeflerime göre kodunuzu değiştirmeye ve kontrol etmeye karar verdim (H1'de çalıştırdım).

   for (i= 0 ;i< 10 ;i++) {
       int tmp= iBarShift ( NULL , PERIOD_M15 , Time[i], true);
       if ( iTime ( NULL , PERIOD_M15 , tmp)<Time[i])tmp--;
       Alert ( " TimeOpen: " , TimeToStr ( iTime ( NULL , PERIOD_M15 , tmp), TIME_MINUTES), " Bar: " , tmp);  
   }

ve olan buydu

 
dzhini :

Hedeflerime göre kodunuzu değiştirmeye ve kontrol etmeye karar verdim (H1'de çalıştırdım).

ve olan buydu


Açılış fiyatları için test cihazını kontrol edin. Yani Roman nasıl yapılacağını zaten yazdı.

 
onlar. test cihazını daha düşük bir zaman diliminde çalıştırıyoruz ve daha eski zaman dilimi için göstergedeki mantığın geri kalanını yeniden mi oluşturuyoruz?
 
ilunga :

Son çubuğun kapanış fiyatı Kapat[1]

Çok teşekkürler! Yani danışman tiklerle işlem yapıyor, ancak aralıklarla (şamdanlar) ticarete dönüştürülebilir mi? Bununla tamamen kafam karıştı.
 

Bu konuya iyi günler! Biliyorsunuz, gösterge derleniyor, ama hiçbir şey çizmiyor ve gerçekten neyin yanlış olduğunu, ne düşüneceğimi, bir hatayı nasıl arayacağımı bilmiyorum. Genel olarak, kod çalıştı, minimum değişiklikle bir fonksiyon ekledim, hiçbir şey yapmıyor!

Belki sorun anonslarda bir yerde yeniden çekimle başladığım içindir, belki de genel olarak beynimi yavaşlatıp bir şeyleri karıştırıyorum.. İşte böyle oldu!

 //+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
#import "user32.dll"
   int    PostMessageA( int   hWnd, int   Msg, int   wParam, string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0 ;

#property indicator_chart_window
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T= 4 ,K= 200 ;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P; extern int RO= 49 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;

   for ( int i=limit;i>= 0 ;i--) {
//----
 for ( int J= 0 ;J<=RO;J++){
//----

   // for(int i=Bars; i>=0;i--)
   i= Bars ;
      бар_вершина= iHighest ( NULL ,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble ( бар_вершина/ 2 , 0 ), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble (бар_вершина* 1.5 , 0 ), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
         
   if (начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
  
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija2=linija2-naklon;
    
    НижняячертаBuffer2[i]=linija2;
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i= 0 ;i< 100 ;i++){  СинняячертаBuffer3[i]= Open[i];}
           for (i= 330 ;i< 500 ;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка 4 ; int бар_точка 4 ;   бар_точка 4 = iHighest ( NULL ,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка 4 =High[ бар_точка 4 ];  
   
   if (вершина>точка 4 ){naklon=(начало-точка 4 )/(бар_начало-бар_точка 4 );  
   double linija1=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[ 0 ];
   if ( vulf==Ask&&vulf==Bid)vulf= 1 ;
   else { for (vulf=vulf+ Point * 10 ; vulf==НижняячертаBuffer2[ 0 ];vulf=vulf- Point ){
           if ( vulf==Ask&&vulf==Bid){vulf= 1 ;}} 
       for (vulf=vulf- Point * 10 ; vulf==НижняячертаBuffer2[ 0 ];vulf=vulf+ Point ){
           if ( vulf==Ask&&vulf==Bid)vulf= 1 ;} 
              
           
           
           }
           
           
   if (vulf== 1 ){ Comment ( "  Есть вульв!!! "   , "  timeframe " , timeframe); return ( 0 );  }
     if (vulf!= 1 &&pereklutsatel== 1 ) {    
   
     if (delimiter< 3 ){delimiter++; Comment (delimiter); return ( 0 );}
   delimiter= 0 ;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

void fChangePeriod(){ int ii,hwd = WindowHandle ( Symbol (), Period ());
   switch ( Period ()){
       case PERIOD_W1     : ii = 33134 ; break ; //PERIOD_D1;
       case PERIOD_D1     : ii = 33136 ; break ; //PERIOD_H4;
       case PERIOD_H4     : ii = 33135 ; break ; //PERIOD_H1;
       case PERIOD_H1     : ii = 33140 ; break ; //PERIOD_M30;
       case PERIOD_M30    : ii = 33139 ; break ; //PERIOD_M15;
       case PERIOD_M15    : ii = 33138 ; break ; //PERIOD_M5;
       case PERIOD_M5     : ii = 33137 ; break ; //PERIOD_M1;
       case PERIOD_M1     : ii = 33141 ; break ; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0 );
   return ;
}