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

 

Tünaydın! Lütfen ArrayMo işlevini anlamama yardım edin (f-I, yoğunluk eğrisinin maksimumunu döndürür).

 double ArrayMo ( double & x [] , int d = 4 ) {
   double e , s = 0 ;
   double m [][ 2 ] ;             // временный массив:
                             //  столбец 1 - количество значений
                             //  столбец 2 - значения
   int      i , k = ArraySize ( x ) ;
   int      n ;                   // номер строки временного массива m
   int      r ;                   // количество строк во временном массиве m

   if ( k > 0 ) {
     for ( i = 0 ; i < k ; i ++ ) {
       e = NormalizeDouble ( x [ i ] , d ) ;
       n = ArraySearchDouble ( m , e ) ;
       if ( n < 0 ) {
         r = ArrayRange ( m , 0 ) ;
         ArrayResize ( m , r + 1 ) ;
         m [ r ][ 0 ] ++;
         m [ r ][ 1 ] = e ;
       } else m [ n ][ 0 ] ++;
     }
     ArraySort ( m , WHOLE_ARRAY , 0 , MODE_DESCEND ) ;
     s = m [ 0 ][ 1 ] ;
   } else Print ( " ArrayMo(): Массив пуст! " ) ;

   return ( s ) ;
}

Aşağıdaki sorular ortaya çıktı:

1. Geçici bir dizi oluşturmanın amacı nedir?

 m [][ 2 ]

2. Geçici dizinin değerlerinin nelerden alınacağı net değildir ve bu nedenle bu dizinin nasıl aranacağı da net değildir:

 n = ArraySearchDouble ( m , e )

3. Ve sonra, genel olarak, gerçek benim için derinden gizli))))) Değer olmadığından emin olduktan sonra, "hangi değerler olduğu belli değil" dizisinin boyutunu belirlemeye başlıyoruz.

Bu hikayede bir ışık ışını için çok minnettar olurum))))

 
Chanterelle , ArraySearchDouble işlevinin koduna ne dersiniz? Onsuz, programın ne yaptığını anlamak çok daha zor olacaktır)
 

Merhaba! İşte takip eden durdurma işlevi, doğru olup olmadığını kontrol edin. Ve sonra kodum önemli ölçüde değişecek, değişmeye başladığımda hatalarla uğraşmak zor olacak

 void TrailStop( int ticket, int TStop)                           //ф-ция трейлинг стопа, TStop-расстояние в пп
   {
     if (TStop> 0 )
      {
       OrderSelect (ticket, SELECT_BY_TICKET);
       if ( OrderType ()==OP_BUY)
         {
           if (Bid - OrderOpenPrice ()> Point *TStop)
            {
             if ( OrderStopLoss ()<Bid- Point *TStop)
               {
                 OrderModify ( OrderTicket (), OrderOpenPrice (), 
                Bid- Point *TStop, OrderTakeProfit (), 0 , Blue );
                 return ;
               }
             else { }
            }
             else { }
         }
       else if ( OrderType ()==OP_SELL)
         {
           if ( OrderOpenPrice () - Ask> Point *TStop)
            {
             if ( OrderStopLoss ()>Ask + TStop* Point )
               {
                 OrderModify ( OrderTicket (), OrderOpenPrice (), 
                Ask+ Point *TStop, OrderTakeProfit (), 0 , Blue );
                 return ;
               }
             else { }
            }
           else { }
         }
       else { }
      }
     else { }
    }
 
gogent :

Merhaba! İşte takip eden durdurma işlevi, doğru olup olmadığını kontrol edin. Ve sonra kodum önemli ölçüde değişecek, değişmeye başladığımda hatalarla uğraşmak zor olacak

Stoplevel'i dikkate almayın, bu nedenle ECN/NDD'niz yoksa " hatalı duraklar " hatası alabilirsiniz.

Ve genellikle OrderModify'dan sonra, her ihtimale karşı tüm hataları işlemek daha iyidir.

 
alsu :
Chanterelle , ArraySearchDouble işlevinin koduna ne dersiniz? Onsuz, programın ne yaptığını anlamak çok daha zor olacaktır)


Bunların hepsi KimIV'ün işlevleri, onları anlamaya çalışıyorum. İşte kod:


Bu işlev, bir dizinin bir öğesini çift değerle arar ve bulunan öğenin dizinini veya -1 değerini döndürür. İşlev yalnızca bir öğe bulur ve sonuç pozitifse aramayı sonlandırır.

  • m - Öğenin aranacağı dizi.
  • e - m dizisinde bulunacak çift değer.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 01.09.2005                                                     |
//|  Описание : Выполняет поиск элемента массива по значению                   |
//|             и возвращает индекс найденного элемента или -1.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    m - массив элементов                                                    |
//|    e - значение элемента                                                   |
//+----------------------------------------------------------------------------+
int ArraySearchDouble ( double & m [] , double e ) {
   for ( int i = 0 ; i < ArraySize ( m ) ; i ++ ) {
     if ( m [ i ] == e ) return ( i ) ;
   }
   return ( - 1 ) ;
}
 
Pro, bana neyi yanlış yaptığımı söyle? Yeni bir çubuk göründüğünde pencerenin gösterge ile yeniden çizilmesi gerekir. if (Çubuklar != Ön Çubuklar) WindowRedraw();
hiçbir şey vermez. PreBars, bir önceki tik üzerindeki çubukların sayısına eşittir. Belki yanlış yere veya yanlış işleve ekliyorum?
 
kon12 :
Pro, bana neyi yanlış yaptığımı söyle? Yeni bir çubuk göründüğünde pencerenin gösterge ile yeniden çizilmesi gerekir. if (Çubuklar != Ön Çubuklar) WindowRedraw();
hiçbir şey vermez. Belki oraya yerleştirmiyorum ya da bir sorun var mı?

Bir şeyi yeniden çizmek için önce üzerine çizmelisin. ne ve nasıl çiziyorsun
 
sergeev :

Bir şeyi yeniden çizmek için önce üzerine çizmelisin. ne ve nasıl çiziyorsun


Her şey mükemmel bir şekilde çizilmiş, gösterge bir zikzak üzerine kurulu, ancak yeni çubukların ortaya çıkmasıyla tüm eğrinin yeniden çizilmesi gerekiyor ve yalnızca yeni çubuktaki göstergenin değerini ekliyor...

int() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

 
kon12 :


Her şey mükemmel bir şekilde çizilmiş, gösterge bir zikzak üzerine kurulu, ancak yeni çubukların ortaya çıkmasıyla tüm eğrinin yeniden çizilmesi gerekiyor ve yalnızca yeni çubuktaki göstergenin değerini ekliyor...

int() {
SetIndexBuffer(0,ZZ);
SetIndexStyle(0,DRAW_SECTION);
SetIndexEmptyValue(0,0.0);

WindowRedraw(), grafik nesnelerini yeniden çizer. Tamponlarla alakası yok.
 
Zhunko :
WindowRedraw(), grafik nesnelerini yeniden çizer. Tamponlarla alakası yok.

Anlaşıldı ... Yeniden çizmenin başka bir yolu varsa?