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

 
Yeni bir gösterge buldum, danışmana koymak istedim. ama gerçek şu ki, her mum için fırsatlar açıyor. Bana sadece ok işaretiyle nasıl açılacağını söyle
 //------------------------------------------------------------------
#property copyright "Hill"
#property link        "Romio.com"
//------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Orange
#property indicator_color2 DarkGray
#property indicator_color3 Orange
#property indicator_color4 LimeGreen
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_style4 STYLE_DOT
//

//
//
//
//
//

extern int     RsiLength  = 4 ;
extern int     RsiPrice   = PRICE_CLOSE ;
extern int     HalfLength = 5 ;
extern int     DevPeriod  = 100 ;
extern int     Sise       = 10 ;
extern double Deviations = 1.0 ;
extern bool    UseAlert   = true ;
extern bool    DrawArrows = true ;

color ColorDn = Crimson;
color ColorUp = DodgerBlue;
int      CodDn = 222 ;
int      CodUp = 221 ;

string    Font = "Verdana" ;

// ti init() if(ObjectFind("100s")<0)GetText(3,"100s","BuySell Pro",LawnGreen,5,5,7);


string PrefixArrow = "ArrowsHill" ;

double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];

double up[];
double dn[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   HalfLength= MathMax (HalfLength, 1 );
   SetIndexBuffer ( 0 ,buffer1);
   SetIndexBuffer ( 1 ,buffer2);
   SetIndexBuffer ( 2 ,buffer3);
   SetIndexBuffer ( 3 ,buffer4);

   SetIndexStyle( 4 , DRAW_ARROW , 0 , 2 ,Blue);
   SetIndexArrow( 4 , 233 );
   SetIndexBuffer ( 4 ,up);

   SetIndexStyle( 5 , DRAW_ARROW , 0 , 2 ,Red);
   SetIndexArrow( 5 , 234 );
   SetIndexBuffer ( 5 ,dn);


   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   DellObj(PrefixArrow);

   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int i,j,k,counted_bars=IndicatorCounted();
   if (counted_bars< 0 )
       return (- 1 );
   if (counted_bars> 0 )
      counted_bars--;
   int limit= MathMin ( Bars - 1 , Bars -counted_bars+HalfLength);

   static datetime timeLastAlert = NULL ;

   for (i=limit; i>= 0 ; i--)
      buffer1[i] = iRSI ( NULL , 0 ,RsiLength,RsiPrice,i);
   for (i=limit; i>= 0 ; i--)
     {
       double dev  = iStdDevOnArray(buffer1, 0 ,DevPeriod, 0 , MODE_SMA ,i);
       double sum  = (HalfLength+ 1 )*buffer1[i];
       double sumw = (HalfLength+ 1 );
       for (j= 1 , k=HalfLength; j<=HalfLength; j++, k--)
        {
         sum  += k*buffer1[i+j];
         sumw += k;
         if (j<=i)
           {
            sum  += k*buffer1[i-j];
            sumw += k;
           }
        }
      buffer2[i] = sum/sumw;
      buffer3[i] = buffer2[i]+dev*Deviations;
      buffer4[i] = buffer2[i]-dev*Deviations;

       if (buffer1[i] >= buffer3[i] /*&& buffer1[i+1] < buffer3[i+1]*/ )
        {
         dn[i] = buffer3[i];
         if (DrawArrows)
            ArrowDn(Time[i], High[i]);

         if (UseAlert && i == 0 && Time[ 0 ] != timeLastAlert)
           {
             Alert ( "Signal DOWN!" );
            timeLastAlert = Time[ 0 ];
           }
        }

       if (buffer1[i] <= buffer4[i] /*&& buffer1[i+1] > buffer4[i+1] */ )
        {
         up[i] = buffer4[i];
         if (DrawArrows)
            ArrowUp(Time[i], Low[i]);

         if (UseAlert && i == 0 && Time[ 0 ] != timeLastAlert)
           {
             Alert ( "Signal UP!" );
            timeLastAlert = Time[ 0 ];
           }
        }
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ArrowUp( datetime tim, double pr)
  {
   if ( ObjectFind (PrefixArrow+ "TextUp" +tim)==- 1 )
     {
       if ( ObjectCreate (PrefixArrow+ "TextUp" +tim, OBJ_TEXT , 0 ,tim,pr-GetDistSdvig()))
         ObjectSetText(PrefixArrow+ "TextUp" +tim,CharToStr(CodUp),Sise, "WingDings" ,ColorUp);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ArrowDn( datetime tim, double pr)
  {
   if ( ObjectFind (PrefixArrow+ "TextDn" +tim)==- 1 )
     {
       if ( ObjectCreate (PrefixArrow+ "TextDn" +tim, OBJ_TEXT , 0 ,tim,pr+GetDistSdvig()))
         ObjectSetText(PrefixArrow+ "TextDn" +tim,CharToStr(CodDn),Sise, "WingDings" ,ColorDn);
     }
  }
extern double TextSdvigMnoj = 2 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetDistSdvig()
  {
   return ( iATR ( NULL , 0 , 100 , 1 ) * TextSdvigMnoj);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DellObj( string dell)
  {
   string name;
   for ( int i = ObjectsTotal ()- 1 ; i >= 0 ; i--)
     {
      name = ObjectName (i);
       if ( StringFind (name, dell) != EMPTY)
         ObjectDelete (name);
     }
  }
//+------------------------------------------------------------------+
Dosyalar:
 
jarikn :
Yeni bir gösterge buldum, danışmana koymak istedim. ama gerçek şu ki, her mum için fırsatlar açıyor. Bana sadece ok işaretiyle nasıl açılacağını söyle

İlk olarak, gösterge hiç yeni değil, hatta çok eski . O kadar eski ki, arayüzleri 4-ki için bile modası geçmiş

ikinci olarak, yeniden çizilir. Tam olarak HalfLength'te (varsayılan 5 çubuk, parametrelerde ayarlanmıştır)

ve son olarak - bir danışman için anlaşmaların nasıl açılacağı danışmana% 90 bağlıdır, yani bir danışman kodu olmadan her şey işe yaramaz

 
Maxim Kuznetsov :

İlk olarak, gösterge hiç yeni değil, hatta çok eski . O kadar eski ki, arayüzleri 4-ki için bile modası geçmiş

ikinci olarak, yeniden çizilir. Tam olarak HalfLength'te (varsayılan 5 çubuk, parametrelerde ayarlanmıştır)

ve son olarak - bir danışman için anlaşmaların nasıl açılacağı danışmana% 90 bağlıdır, yani bir danışman kodu olmadan her şey işe yaramaz

TAMAM. anladım. Ve örneğin, farklı periyotlara sahip bu tür 2 gösterge alırsak ve aşağıdaki koşulu yazarsak * gösterge 1 yukarı ok gösteriyorsa ve gösterge 2 bir mum üzerinde yukarı ok gösteriyorsa, örneğin bir uyarı ve üzerinde bir ok yayınlayın. grafik *. Bunun nasıl yapılabileceğini önerebilir misiniz? Bir arabellek eklemem gerekiyor mu yoksa her ikisinin sinyallerini takip etmek için bir gösterge oluşturabilir miyim? Peki, zor değilse, nasıl yapılacağına dair bir örnek verin

 
jarikn :

TAMAM. anladım. Ve örneğin, farklı periyotlara sahip bu tür 2 gösterge alırsak ve aşağıdaki koşulu yazarsak * gösterge 1 yukarı ok gösteriyorsa ve gösterge 2 bir mum üzerinde yukarı ok gösteriyorsa, örneğin bir uyarı ve üzerinde bir ok yayınlayın. grafik *. Bunun nasıl yapılabileceğini önerebilir misiniz? Bir arabellek eklemem gerekiyor mu yoksa her ikisinin sinyallerini takip etmek için bir gösterge oluşturabilir miyim? Peki, zor değilse, nasıl yapılacağına dair bir örnek verin

Danışmana farklı dönemlere sahip iki iCustom eklersiniz ve (belki) mutlu olursunuz.
 
MakarFX :
Danışmana farklı dönemlere sahip iki iCustom eklersiniz ve (belki) mutlu olursunuz.

tamam deneyeceğim. Teşekkür ederim

 

Ve tekrar merhaba))) Ne tür bir gösterge olduğunu kim söyleyebilir?

<*.ex* dosyası kaldırıldı>

 

Sevgili, geçen puan sayısına göre bir ZigZag göstergesi yazmaya çalışıyorum.

Maalesef kendim yazacak kadar bilgim yok, başkasının göstergesini yeniden yapmaya karar verdim.

bu oldu

 #property link        " https://www.mql5.com "
#property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Label1
#property indicator_label1    "Label1"
#property indicator_type1    DRAW_SECTION
#property indicator_color1    clrCrimson
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- input parameters
input int       Points= 50 ;
//--- indicator buffers
int Trend= 1 ,InTrend;
datetime ttime;
double Last_High,Last_Low;
double Buffer01[],Buffer02[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   IndicatorBuffers( 2 );
   IndicatorDigits( Digits );
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,Buffer01);
   SetIndexBuffer ( 1 ,Buffer02);
   SetIndexEmptyValue( 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[])
  {
//---
   int limit=rates_total-prev_calculated- 2 ;
   if (limit< 2 ) return ( 0 );
   for ( int i=limit; i>= 0 ;i--)
     {
       if (time[i]!=ttime) {InTrend=InTrend+ 1 ; ttime=time[i];}
      Buffer01[i]= 0 ;
      Buffer02[i]= open[i]; 
       if (Buffer02[i+ 1 ]>Last_High && Trend== 1 )   InTrend= 1 ;
       if (Buffer02[i+ 1 ]<Last_Low  && Trend== 0 )   InTrend= 1 ;
       if (Buffer02[i+ 1 ]>Last_High) Last_High=Buffer02[i+ 1 ];
       if (Buffer02[i+ 1 ]<Last_Low ) Last_Low =Buffer02[i+ 1 ];
       //----
       if (Trend== 1 && Buffer02[i+ 1 ]<Last_High-Points* Point && InTrend> 1 )
        {
         Trend= 0 ;
         if (i+InTrend< ArraySize (Buffer01))
         Buffer01[i+InTrend]=Buffer02[i+InTrend];
         Last_High=Buffer02[i+ 1 ];
         Last_Low=Buffer02[i+ 1 ];
         InTrend= 1 ;
        }
       if (Trend== 0 && Buffer02[i+ 1 ]>Last_Low+Points* Point && InTrend> 1 )
        {
         Trend= 1 ;
         if (i+InTrend< ArraySize (Buffer01))
         Buffer01[i+InTrend]=Buffer02[i+InTrend];
         Last_Low=Buffer02[i+ 1 ];
         Last_High=Buffer02[i+ 1 ];
         InTrend= 1 ;
        }
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

Ve doğru çiziyor gibi görünüyor, ama geç oldu

Ekranda fiyat zaten 50 puanı geçti ancak gösterge çekmiyor.

Sorunu çözmeye yardım edin lütfen.

 
MakarFX :

Sorunu çözmeye yardım edin lütfen.

burada MT5 ZZ için noktalara yerleştirdim

https://www.mql5.com/ru/forum/318267#comment_12508440


ana hesaplama döngüsündeki numaralandırmayı değiştirirseniz MT4'te çalışmalıdır

 
Igor Makanu :

burada MT5 ZZ için noktalara yerleştirdim

https://www.mql5.com/ru/forum/318267#comment_12508440


ana hesaplama döngüsünde numaralandırmayı değiştirirseniz MT4'te çalışmalıdır

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


Bana neyin düzeltilmesi gerektiğini söyle

 
Böyle bir sorunla karşı karşıya kaldı. MT2 göstergesini MT4'e koydum. teoride, gösterge arabelleklerini okur ve bir ok göründüğünde, ikili opsiyonlarda işlemleri otomatik olarak açmalıdır. ama sorun şu ki, benim için her yeni mumda ve sadece yukarı fırsatlar açıyor. Sorunun ne olduğunu kim biliyor?
Dosyalar:
Screenshot_8.png  121 kb
123.mq4  5 kb