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

 
Activict :

Tünaydın. Böyle bir soru var.

Göstergeyi diğer uzmanların ve hindilerin kod parçalarından büyük zorluklarla kendim için yeniden yaptım. Kod büyük değil, her şey istediğim gibi yapılıyor.

Gerçek şu ki, kendi içinde hesaplamalar yapıyor ve grafikte yukarı veya aşağı ok gösteriyor.

Bana nasıl bir uzman yapabileceğinizi söyleyin, böylece grafikte bir ok göründüğünde, doğru yönde bir sipariş açılır.

Daha doğrusu, şu anda hangi okun aktif olduğunu bilmem gerekiyor, gerisini yapabileceğimi düşünüyorum.

Daha açık hale getirmek için bir kod parçası vereceğim, bu göstergedeki başlatma

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

herkese şimdiden teşekkürler

EA'da ihtiyacınız olan özel göstergenin değerlerini almak için yerleşik iCustom işlevini kullanın.



 double iCustom ( string symbol, int timeframe, string name, ..., int mode, int shift)

Örneğin, tam olarak oluşturulmuş son çubukta yukarı veya aşağı ok olup olmadığını öğrenmeniz gerekir:


 double Up= iCustom ( NULL , 0 , name /* название индикатора */ , /* настраиваемые параметры индикатора через запятую */ , 1 , 1 ); // стрелка вверх
double Dw= iCustom ( NULL , 0 , name /* название индикатора */ , /* настраиваемые параметры индикатора через запятую */ , 2 , 1 ); // стрелка вниз
 

Cevap için teşekkürler! Evet, oklar bazen kaybolur. Ok kaybolursa bu şekilde özel aracılığıyla "0" mı okunacak?

Ve ok yalnızca ortaya çıkan çubuğa çizilir, önceki çubukları yeniden çizmez, görünüm anında bir anlaşma açmanız gerekir ve buna göre ok kaybolursa kapatın

 
Program kodunu kullanarak danışmanı sunucuya normalden daha sık istek göndermeye zorlamak mümkün mü? Yani bir istek yerine iki tane var, ya da bunun için basitçe kabuğu tekrarlayabilirsiniz ... bir yerine üç istek varsa, o zaman iki kez tekrarlayın ... ?
 
Activict :

Evet, oklar bazen kaybolur. Ok kaybolursa bu şekilde özel aracılığıyla "0" mı okunacak?

Evet, olacak.

Aktivite :

Ve ok yalnızca ortaya çıkan çubuğa çizilir, önceki çubukları yeniden çizmez, görünüm anında bir anlaşma açmanız gerekir ve buna göre ok kaybolursa kapatın

Bu nedenle, tam olarak oluşturulmuş çubuklardan birinin üzerinde bir ok varsa, kaybolmaz. Geçerli çubukta ok birkaç kez görünebilir ve kaybolabilir.
 
Aktivite :

спасибо за ответ! Да стрелки иногда пропадают. Этот способ через кастом будет считывать "0" если стрелка пропадет?

iCustom ile gösterge kodunda "boş" olarak belirtilen değer dikkate alınır. Bu genellikle 0 veya EMPTY_VALUE olabilir.

Göstergelerde EMPTY_VALUE varsayılan olarak kabul edilir, ancak SetIndexEmptyValue init() içinde yazılırsa farklı olacaktır.

 
yellownight :
Program kodunu kullanarak danışmanı sunucuya normalden daha sık istek göndermeye zorlamak mümkün mü? Yani bir istek yerine iki tane var, ya da bunun için basitçe kabuğu tekrarlayabilirsiniz ... bir yerine üç istek varsa, o zaman iki kez tekrarlayın ... ?
Sana hiçbir şey vermeyecek. Sunucuyu isteklerle bombalayın ve hesabınızın bağlantısı tamamen kesilebilir. Bunun "isteklere aşırı hevesli" ve onları çok fazla "bombalayan" kişilere olduğunu biliyorum.
 

Basit bir gösterge yazdım. İşte kod:

 //+------------------------------------------------------------------+
//|                                            AngleByLineFromMA.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string  h1 = "основные параметры машки" ;
extern int     maTF = 0 ;
extern int     maPeriod = 50 ;
extern int     maShiftByPrice = 0 ;
extern int     maMethod = 0 ;
extern int     maPrice = 0 ;
extern int     shiftBarsBack1 = 2 ;                       // Первое значение shift
extern int     shiftBarsBack2 = 7 ;                       // Второе значение shift
extern string  h2 = "===============================" ;

string         h3 = "Другие переменные" ;
double         pointOfMaFirst,                           // Первая тока (начало отрисовки отрезка)
               pointOfMaLast,                            // Вторая тока отрезка (конец отрисовки отрезка)
               varsAngle[ 1000 ];                              // Буфер для хранения значение возвращаемых машкой

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//#property indicator_minimum -45
//#property indicator_maximum 45
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo( Symbol (),MODE_DIGITS));
   SetIndexBuffer ( 0 ,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle( 0 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ); 
   
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {
    ObjectsDeleteAll ();                                  // Очистим график от всего
    
// -------------- блок инициализации закончен ----------------------
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
    int i, countedBars = IndicatorCounted();
    int limit = Bars - countedBars;
    if (limit > 400 ) limit = 400 ;
        
    for (i = limit;i > 1 ;i--)
    {
      pointOfMaFirst = iMA ( Symbol (),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack1+i);   // Начальная точка прямой
      pointOfMaLast = iMA ( Symbol (),maTF,maPeriod,maShiftByPrice,maMethod,maPrice,shiftBarsBack2+i);     // Крайняя точка прямой
    
      varsAngle[i] = pointOfMaFirst - pointOfMaLast;
      Print ( "varsAngle[i] = " , varsAngle[i]);
    }

    return ( 0 );
  }
Sadece bir tamponu vardır. Çift tip gösterge değerleri.

Expert Advisor'da ise göstergenin değerini alıp ticarette filtre olarak uygulamaya karar verdim.

Burada, son oluşturulan çubukta verilen gösterge arabelleğinin işlevinde basit bir çağrı yazdım:

 //+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   
   return (slope);
}
Test cihazında eğim değeri yanlış döndürülür:
 2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02 . 26 16 : 57 : 26     2009.10 . 26 00 : 23  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647

Nedenmiş? Tip doğru belirtilmiş.Çağrı da doğru görünüyor. Gösterge iyi çalışıyor. İşte test cihazındaki ve mevcut olanın gerçek pazarındaki günlüğün günlüğü:

 2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0009
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.0011
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001
2013.02 . 26 16 : 57 : 05     AngleByLineFromMA simplest EURUSD,H1: varsAngle[i] = 0.001

Neden 2147483647 numarası her zaman gerekli olanın yerine döndürülüyor?

 
hoz :

Basit bir gösterge yazdım. İşte kod:

Sadece bir tamponu vardır. Çift tip gösterge değerleri.

Expert Advisor'da göstergenin değerini alıp ticarette filtre olarak uygulamaya karar verdim.

Burada, son oluşturulan çubukta verilen gösterge arabelleğinin işlevinde basit bir çağrı yazdım:

Test cihazında eğim değeri yanlış döndürülür:

Nedenmiş? Tip doğru belirtilmiş.Çağrı da doğru görünüyor. Gösterge iyi çalışıyor. İşte test cihazındaki ve mevcut olanın gerçek pazarındaki günlüğün günlüğü:

Neden 2147483647 numarası her zaman gerekli olanın yerine döndürülüyor?

Test cihazında, işin başlangıcında , göstergenin doğru hesaplanması için geçmişte yeterli çubuk yoktur.

 //+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if (iBars( NULL , i_TF)<maPeriod) { Print ( "Недостаточно баров в истории для корректного расчёта значений индикатора!" ); return (- 1.0 ); }
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   
   return (slope);
}
 
//+-------------------------------------------------------------------------------------+
//| Получаем направление фильтрующей МА                                                 |
//+-------------------------------------------------------------------------------------+
double GetSlopeOfMa()
{
   if (iBars( NULL , i_TF) < maPeriod)
   {
      Print ( "Недостаточно баров в истории для корректного расчёта значений индикатора!" );
      return ( 0 );
   }
   double slope = iCustom ( NULL , i_TF, "AngleByLineFromMA simplest" , 0 , 1 );
   Print ( "slope = " , slope);
   Print ( "iBars(NULL, i_TF) = " , iBars( NULL , i_TF));
   
   return (slope);
}

2007'den beri dukascopy ile tarih yüklüyorum... yeterli sayıda bar olmaması mümkün değil. MA dönemi sadece 50'dir.

Buraya satırınızı ekledim, return(0) düzeltildi .. ve grafikteki çubuk sayısının görüntüsünü ekledim:

İşte günlükte:

 2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: iBars(NULL, i_TF) = 15895
2013.02.26 17:53:26	2009.10.26 00:22  D_Aleks_first_pattern EURUSD,H1: slope = 2147483647


 
hoz :

2007'den beri dukascopy ile tarih yüklüyorum... yeterli sayıda bar olmaması mümkün değil. MA dönemi sadece 50'dir.

Burada satırınızı ekledim, mevcut dönüşü düzelttim(0) ..

İşte günlükte:


Göstergede sorun var gibi.

 if (limit > 400 ) limit = 400 ;