Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 979

 
Vadim_2015 :

Sevgili, ne elde etmek istediğimi maksimumda açıklamaya çalışacağım ... ..ya da başaracağım ..ya da herkesin kafasını tamamen karıştıracağım!

...

Sohbete devam ediyoruz... Anladığım kadarıyla görev aşağıdakilere indirgenebilir. Basitleştirmek için, sadece dün, H1 dönemini çalışacağız.

İlk olarak, Open'ın üzerinde Close olan (dünün grafiğinin sol tarafından bakıldığında) en erken mumu arar, yani. ilk yükseliş mumunu arıyor. Böyle bir mum bulunursa, ondan başlayarak (bu dahil) verilen günün en geç saatine kadar, en yüksek Yüksek olan bir mum bulmanız gerekir. Örneğin, ilk boğa mumunun açılış saati 10:00 ise, ondan 23:00 mumuna kadar, en yüksek Yüksek olan bir mum arıyoruz. Böyle?

 
paladin80 :

Sohbete devam ediyoruz... Anladığım kadarıyla görev aşağıdakilere indirgenebilir. Basitleştirmek için, sadece dün, H1 dönemini çalışacağız.

İlk olarak, Open'ın üzerinde Close olan (dünün grafiğinin sol tarafından bakıldığında) en erken mumu arar, yani. ilk yükseliş mumunu arıyor. Böyle bir mum bulunursa, ondan başlayarak (bu dahil) verilen günün en geç saatine kadar, en yüksek Yüksek olan bir mum bulmanız gerekir. Örneğin, ilk boğa mumunun açılış saati 10:00 ise, ondan 23:00 mumuna kadar, en yüksek Yüksek olan bir mum arıyoruz. Böyle?

OOO, Tanrı'ya şükürler olsun... Beni anladılar! EVET! EVET! EVET! Bu tam olarak başarmaya çalıştığım şey. Biliyorsan nasıl yapacağımı söyler misin?
 
Vadim_2015 :
OOO, Tanrı'ya şükürler olsun... Beni anladılar! EVET! EVET! EVET! Bu tam olarak başarmaya çalıştığım şey. Biliyorsan nasıl yapacağımı söyler misin?
Anlıyorum, düşünmeye çalışacağım ama bu güncel olaylara bağlı. Gelecekte sorular ortaya çıkarsa, programcıların daha iyi anlayabilmesi için onları yaklaşık olarak aynı şekilde biçimlendirin.
 
Vadim_2015 :
LLC, Tanrı'ya şükürler olsun... beni anladılar! EVET! EVET! EVET! Bu tam olarak başarmaya çalıştığım şey. Biliyorsan nasıl yapacağımı söyler misin?

Bu dünün mumuysa, o zaman iHigest()'in sonu ve iBarShift()'ten alınan sonraki günün (yani bugünün) 00: 00'ının başlangıcı olacaktır.

Örnek algoritma:

1. Bugün dünün saatlik çubukları arasında ilk yükseliş çubuğunu arıyoruz. EndBar'ın indeksi olsun

2. İlk saatlik barı bugün belirleyin. Yoksa sıfır olacak...

3. iHighest()'te sondan bir önceki parametre olan endBar'ı (veya endBar +1 belirtilecek) ayarladık ve son parametre 1'dir. Gerekli aralıkta en yüksek Yüksek olan çubuğun indeksini alırız.

4. İstenen sonuç Yüksek[iYüksek(uygun parametrelerle)] // Veya değeri önceki paragrafta atanan ilgili değişken.

 
Vadim_2015 :
LLC, Tanrı'ya şükürler olsun... beni anladılar! EVET! EVET! EVET! Bu tam olarak başarmaya çalıştığım şey. Biliyorsan nasıl yapacağımı söyler misin?
 void OnStart ()
  {
 double   longValue;
 datetime t1,t2;    
 int b1,b2,h; 
 
 int bStart = iBarOfDayReal(); //бар, с которого уходим в историю
           Print ( "" ,bStart);                 
   for ( int i=bStart;i<bStart+ 1000 ;i++)
      {
       longValue = Close[i+ 1 ]-Open[i+ 3 ];
       
//--- само условие
         
       if (longValue> 0 ) 
       {
      t1= iTime( NULL , 0 ,i); //
      t2= iTime( NULL , PERIOD_D1 ,iBarShift( NULL , PERIOD_D1 ,t1, false )- 1 ); //00.00.00 время 
      
     // Print("",TimeToStr(t1,TIME_DATE|TIME_SECONDS)); 
     // int("",TimeToStr(t2,TIME_DATE|TIME_SECONDS))Pr;
     
      b1= iBarShift( NULL , 0 ,t1, false );
      b2= iBarShift( NULL , 0 ,t2, false ); 
      
      h=iHighest( NULL , 0 ,MODE_HIGH,b1-b2+ 1 ,b2); //нашли максимум
      
      SetArrow( 159 , clrCoral , "h" +( string )Time[h],Time[h],High[h]); //рисуем пипичку
     
       }
   }
  }
//+------------------------------------------------------------------+
void SetArrow( int cd, color cl,
               string nm= "" , datetime t1= 0 , double p1= 0 , int sz= 0 ) {
   if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
   if (t1<= 0 ) t1=Time[ 0 ];
   if (p1<= 0 ) p1=Bid;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_ARROW , 0 , 0 , 0 );
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE , cd);
  ObjectSet(nm, OBJPROP_COLOR     , cl);
  ObjectSet(nm, OBJPROP_WIDTH     , sz);
}
//-------------------------------------------------------------------+
int iBarOfDayReal( string sy= "" , int tf= 0 , datetime dt= 0 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (tf<= 0 ) tf= Period ();
   if (dt<= 0 ) dt= TimeCurrent ();
   if (tf> PERIOD_D1 ) {
     Print ( "iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1" );
     return ( 0 );
  }

   int cd=TimeDay(dt);                       // текущий день месяца
   int nb=iBarShift(sy, tf, dt, False);       // номер текущего бара
   int bd= 0 ;                                 // номер бара от начала суток

   while (TimeDay(iTime(sy, tf, nb))==cd) {
    nb++;
    bd++;
  }

   return (bd);
}
   
  
//+------------------------------------------------------------------+
SENARYO! deneriz.
 
r772ra :
SENARYO! deneriz.

r772ra Çok teşekkür ederim!!! Senaryo gerekeni yapıyor!, elbette, son kod bloğunda her şey benim için net değil, ama sorun değil, çözeceğim. Ana şey çalışıyor. Bunu göstergeye aktarmaya çalışacağım.

paladin80 :

Gelecekte sorular ortaya çıkarsa, programcıların daha iyi anlayabilmesi için onları yaklaşık olarak aynı şekilde biçimlendirin.

Tabii, öğreneceğim!

Herkese çok teşekkürler!

 
Vadim_2015 :

r772ra Çok teşekkür ederim!!! Senaryo gerekeni yapıyor!, elbette, son kod bloğunda her şey benim için net değil, ama sorun değil, çözeceğim. Ana şey çalışıyor. Bunu göstergeye aktarmaya çalışacağım.

Tabii, öğreneceğim!

Herkese çok teşekkürler!

Spesifik olarak, net olmayan nedir?
 
r772ra :
Spesifik olarak, net olmayan nedir?

Yanılıyorsam açıklayın, betik kodunun ikinci yarısını anladığım için _" void SetArrow( int cd, color cl, " bu, kodun kullanıcıdaki " _ OnInit()" işlevine atıfta bulunan kısmıdır. göstergesi ve script_" kodunun ilk yarısı geçersiz OnStart () " , göstergedeki "_OnCalculate" işlevine atıfta bulunur? Yani, kabaca konuşursak, komut dosyasında önce 1) hesaplama, 2) yalnızca başlatma vardır. Göstergede, bunun tersi doğrudur.

 
Vadim_2015 :

Yanılıyorsam açıklayın, betik kodunun ikinci yarısını anladığım için _" void SetArrow( int cd, color cl, " bu, kodun kullanıcıdaki " _ OnInit()" işlevine atıfta bulunan kısmıdır. göstergesi ve script_" kodunun ilk yarısı geçersiz OnStart () " , göstergedeki "_OnCalculate" işlevine atıfta bulunur? Yani, kabaca konuşursak, komut dosyasında önce 1) hesaplama, 2) yalnızca başlatma vardır. Göstergede, bunun tersi doğrudur.

Diğer işlevlerin dışında olan özel bir işlev.

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Установка значка на графике, объект OBJ_ARROW.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    cd - код значка                                                         |
//|    cl - цвет значка                                                        |
//|    nm - наименование               ("" - время открытия текущего бара)     |
//|    t1 - время открытия бара        (0  - текущий бар)                      |
//|    p1 - ценовой уровень            (0  - Bid)                              |
//|    sz - размер значка              (0  - по умолчанию)                     |
//+----------------------------------------------------------------------------+
void SetArrow( int cd, color cl,
               string nm= "" , datetime t1= 0 , double p1= 0 , int sz= 0 ) {
   if (nm== "" ) nm=DoubleToStr(Time[ 0 ], 0 );
   if (t1<= 0 ) t1=Time[ 0 ];
   if (p1<= 0 ) p1=Bid;
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_ARROW , 0 , 0 , 0 );
  ObjectSet(nm, OBJPROP_TIME1    , t1);
  ObjectSet(nm, OBJPROP_PRICE1   , p1);
  ObjectSet(nm, OBJPROP_ARROWCODE , cd);
  ObjectSet(nm, OBJPROP_COLOR     , cl);
  ObjectSet(nm, OBJPROP_WIDTH     , sz);
}

Başka bir işlevden bir işlevi çağırmak

SetArrow( 159 , clrCoral , "h" +( string )Time[h],Time[h],High[h]); //рисуем пипичку

Bence göstergede buna ihtiyacınız yok, tampon çizimden sorumlu

yani

          longBarsBuffer[i]=High[h]+ 5 * Point (); - то что необходимо получить. 
       else 
          longBarsBuffer[i]= 0.0 ; 

daha uzak

İşlev

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 26.02.2008                                                     |
//|  Описание : Возвращает реальный номер бара от начала суток.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (          0 - текущий таймфрейм)       |
//|    dt - дата и время открытия бара (          0 - текущее время)           |
//+----------------------------------------------------------------------------+
int iBarOfDayReal( string sy= "" , int tf= 0 , datetime dt= 0 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (tf<= 0 ) tf= Period ();
   if (dt<= 0 ) dt= TimeCurrent ();
   if (tf> PERIOD_D1 ) {
     Print ( "iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1" );
     return ( 0 );
  }

   int cd=TimeDay(dt);                       // текущий день месяца
   int nb=iBarShift(sy, tf, dt, False);       // номер текущего бара
   int bd= 0 ;                                 // номер бара от начала суток

   while (TimeDay(iTime(sy, tf, nb))==cd) {
    nb++;
    bd++;
  }

   return (bd);
}

Ve Çağrı yap

günün başlangıcından itibaren çubuk sayısını buluruz (günümüz yeniden hesaplanmaz) ve o çubuk tarihe geçer.

 int bStart = iBarOfDayReal(); //бар, с которого уходим в историю
 
Katkı))) fonksiyonları buradan alınmıştır.