MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1519

 
Sizi tekrar rahatsız ettiğim için özür dilerim ama bir sorum var. MT4 için bir Renk Düzeyi göstergesi vardır, sette 4 bağlantı noktası olan TrendCreate trend çizgisinden oluşturulan çizgi bölümleri vardır - tarih ve fiyat ve bir seviye olarak daha fazla sürüklerseniz, yapmanız gerekir. Shift'i basılı tutun. TrendCreate özelliğini HLineCreate'deki gibi değiştirmek mümkün mü, yani. böylece segment bir seviyeden gibi mi, yoksa belki de HLineCreate'in bir segmentini yapma fırsatı var mı? Yani segment bir trend çizgisi değil, bir seviye gibi davranıyor.
 
DYM :
Tekrar rahatsız ettiğim için özür dilerim ama bir sorum var. MT4 için bir Renk Düzeyi göstergesi vardır, sette 4 bağlantı noktası olan TrendCreate trend çizgisinden oluşturulan çizgi bölümleri vardır - tarih ve fiyat ve bir seviye olarak daha fazla sürüklerseniz, yapmanız gerekir. Shift'i basılı tutun. TrendCreate özelliğini HLineCreate'deki gibi değiştirmek mümkün mü, yani. böylece segment bir seviyeden gibi mi, yoksa belki de HLineCreate'in bir segmentini yapma fırsatı var mı? Yani segment bir trend çizgisi değil, bir seviye gibi davranıyor.

Soru net değil...

Neden Shift tuşunu basılı tutun? Çizgiler istediğiniz gibi hareket eder. Merkez noktasının ötesine geçerseniz eğim değişmez.

göstergedeki çizginin uzunluğunu değiştirmek istiyorsanız, sarı ile vurgulananları koda ekleyin

 extern    int                x_coor         =   10 ;                   // Coordinate X
extern    int                y_coor         =   20 ;                   // Coordinate Y

extern    int                x_size         =   155 ;                 // длина объектов
 
WAAAAaaaaaaaaa. Sorunu çözmeye yardımcı olun. Neyin yanlış olduğunu anlayamıyorum. Test cihazında bile test edilmedi. Orada ne eksik? Neden ok üzerinde değil de her mum üzerinde yapılır? zaten deliriyorum
Dosyalar:
123.mq4  10 kb
 
MakarFX :

Soru net değil...

Neden Shift tuşunu basılı tutun? Çizgiler istediğiniz gibi hareket eder. Merkez noktasının ötesine geçerseniz eğim değişmez.

göstergedeki çizginin uzunluğunu değiştirmek istiyorsanız, sarı ile vurgulananları koda ekleyin

Bir gif yaptım, ilk satır trend çizgisinin özelliklerine sahip, ikincisi seviyenin özelliklerine sahip (peki, bana öyle geliyor). İkinci satırın özelliklerini - nasıl bir çizgi segmenti yapabileceğinizi anlamak istiyorum.

Dosyalar:
line.gif  2022 kb
 
DYM :

Bir gif yaptım, ilk satır trend çizgisinin özelliklerine sahip, ikincisi seviyenin özelliklerine sahip (peki, bana öyle geliyor). İkinci satırın özelliklerini - nasıl bir çizgi segmenti yapabileceğinizi anlamak istiyorum.

 double a= ObjectGetDouble ( ChartID ,name,OBJPROP_PRICE1);
double b= ObjectGetDouble ( ChartID ,name,OBJPROP_PRICE2);
if (b!=a) ObjectSetDouble ( ChartID ,name,OBJPROP_PRICE2,a);
 
MakarFX :

İgor teşekkürler, ancak MT4 düzgün çalışmıyor.


Bana neyin düzeltilmesi gerektiğini söyle

bunun gibi kod çalışması gerekir:

 #property copyright "IgorM"
#property link        " https://www.mql5.com/ru/users/igorm "
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1

// plot ZigZagZZ
#property indicator_label1    "ZigZagZZ"
#property indicator_type1    DRAW_SECTION
#property indicator_color1    clrDarkBlue
#property indicator_style1    STYLE_SOLID
#property indicator_width1    3
// input parameters
input int    Deviation= 10 ;
// indicator buffers
double          ZZBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
// indicator buffers mapping
   SetIndexBuffer ( 0 ,ZZBuffer, INDICATOR_DATA );
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
   SetIndexEmptyValue( 0 , 0.0 );
   //PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int         rates_total,
                 const int         prev_calculated,
                 const datetime    &time[],
                 const double      &open[],
                 const double      &high[],
                 const double      &low[],
                 const double      &close[],
                 const long        &tick_volume[],
                 const long        &volume[],
                 const int         &spread[])
  {
   static bool UP;
   static double max,min;
   static int LastExt=rates_total - 1 ;
   static const double dev= NormalizeDouble (Deviation* _Point , _Digits );
   int limit=LastExt;
   if (prev_calculated== 0 )
     {
       ArrayInitialize (ZZBuffer, 0.0 );
      limit = LastExt = rates_total - 1 ;
       if (low[ 0 ]<high[ 1 ]) { min=low[limit];  max=high[limit - 1 ];   UP= true ;  }
       else                { max=high[limit]; min  = low[limit - 1 ]; UP= false ; }
     }
   for ( int i=limit; i>= 0 ; i--)
     {
      ZZBuffer[i]= 0.0 ;
       if (UP)
        {
         if (low[i]-min<= 0.0 ) { min=low[i]; ZZBuffer[LastExt]= 0.0 ; LastExt=i; ZZBuffer[i]=min; }
         else
           {
             if (high[i]-min-dev> 0.0 ) { max=high[i]; LastExt=i; ZZBuffer[i]=max; UP= false ; }
           }
        }
       else
        {
         if (high[i]-max>= 0.0 ) { max=high[i]; ZZBuffer[LastExt]= 0.0 ; LastExt=i; ZZBuffer[i]=max; }
         else
           {
             if (low[i]-max+dev< 0.0 ) { min=low[i]; LastExt=i; ZZBuffer[i]=min; UP= true ; }
           }
        }
     }
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu :

bunun gibi kod çalışması gerekir:

Çok teşekkürler! Her şey çalışıyor... şimdi mantığı anlamaya çalışacağım (bir zikzak inşa etmeyi anlamak benim için zor).
 
MakarFX :
Çok teşekkürler! Her şey çalışıyor... şimdi mantığı anlamaya çalışacağım (bir zikzak inşa etmeyi anlamak benim için zor).

kontrol etmedi, başlattı - çizer

mantık basittir - koşullardan birinin karşılandığı çubuk numarasını arayın ve hatırlayın - kodda bu

 static int LastExt

ve sonra bu çubuğu bir sonrakiyle karşılaştırın, 3Z'de bir kesinti varsa, bu çubuğu static int LastExt'te saklayın

 
Igor Makanu :

kontrol etmedi, başlattı - çizer

mantık basittir - koşullardan birinin karşılandığı çubuk numarasını arayın ve hatırlayın - kodda bu

ve sonra bu çubuğu bir sonrakiyle karşılaştırın, 3Z'de bir kesinti varsa, bu çubuğu static int LastExt'te saklayın

Şimdi her şey kafamda sıralandı) Teşekkürler Igor.

 
MakarFX :

Bir şey benim için çalışmıyor , bağlantı noktasının fiyat1 olduğunu anlıyorum ama bir koşul oluşturacak kadar aklım yok. Sürümüm çalışmıyor.

 extern ENUM_LINE_STYLE   line_st   =   STYLE_SOLID ;         // 9. Стиль линий
extern int               line_wd   =   2 ;                   // 10. Толщина линий
// Координаты
extern int x_coor = 7 ;     // Сдвиг по оси X
extern int y_coor = 10 ;     // Сдвиг по оси Y
//-- глобальные переменные
string line[ 6 ] = { "line_1" , "line_2" , "line_3" , "line_4" , "line_5" , "line_6" };

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
  
   datetime dt1     = 0 ;
   double    price1  = 0 ;
   datetime dt2     = 0 ;
   double    price2  = 0 ;
   int       window   = 0 ;
   int       x        = 0 ;
   int       y        = 0 ;

//+------------------------------------------------------------------+
   //--- Клик по 1 линии
   if (id== CHARTEVENT_OBJECT_CLICK )
     {
       string clickObject=sparam;
       if (clickObject==line[ 0 ])
        {
         string name= "line_" + IntegerToString ( MathRand ()+ 100 , 0 , ' ' );

         y= 210 ;
         ChartXYToTimePrice ( 0 ,x_coor+ 25 ,y,window,dt1,price1);
         ChartXYToTimePrice ( 0 ,x_coor+ 157 ,y,window,dt2,price2);

         TrendCreate( 0 ,name, 0 ,dt1,price1,dt2,price2,color2,line_st,line_wd, false , true , false , false , false , 0 );
         
           price1= ObjectGetDouble (id,name,OBJPROP_PRICE1);
           price2= ObjectGetDouble (id,name,OBJPROP_PRICE2);
             if (price2!=price1) 
           {
             ObjectSetDouble (id,name,OBJPROP_PRICE2,price1);
           }

        }
     }
}
//+------------------------------------------------------------------+