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

 
drknn :


1. Normal bir fonksiyonun tam olarak ne döndürmesi gerektiğine karar vermek için ana kodun neden böyle bir değere ihtiyacı olduğunu bilmem gerekiyor. Örneğin bir sinyal varken alış emri açma kararı vermeniz gerekiyorsa zaten açık olan alış emirlerinin sayısını döndürecek bir fonksiyon yazacağım. Kaç tane olduğuna bağlı olarak, kod, koda gömülü mantığı izleyerek bir karar verecektir. Terminalde hangi dönüş kodu işleme mantığının iç içe olduğunu bilmiyorum. Bugün semafor oluşturma ile ilgili bir makaleye bakıyordum ve bir dönüş koduna (-2) rastladım. Şaşırdım, burada bir soru sordum. Sadece ve her şey. ( https://www.mql5.com/en/articles/1412 - yazı burada).

2. Terminal, dönüş değerlerini yok sayar. Kesinlikle? Eğer öyleyse, o zaman yine meşru bir soru ortaya çıkıyor, neden bir danışman/gösterge/komut dosyası oluştururken, geliştirici tam olarak şablonun içine int koydu, çünkü oraya void koymak daha mantıklı olurdu - o zaman terminalin görmezden gelmesi gerekmeyecekti. herhangi bir şey - daha sonra 1 işlemci çevrim süresi kazanır mıyız? Belki de int init (), int deinit () ve int start () işlevlerinden dönüşte neyin döndürüleceği konusunda bir mantık vardır? Benim düşünceme göre, Roche bir yerde bunu birine zaten açıkladı - ne zaman sıfıra dönmeniz gerektiğini ve ne zaman (-1) gerektiğinin bir açıklaması olduğunu hatırlıyorum. Aradığım açıklama buydu. Maalesef bulamadım...

not

dönüş (-2) makalenin yazarı kendi amaçları için kullanır. Ancak, bazen start() işlevinin sıfırdan farklı bir dönüş koduyla bittiği de bir gerçektir. Ve bu sadece bir kişi tarafından yapılmaz. Benim anlamak istediğim mantık bu.

1. Hiçbir şey ekleyemiyorum. Ne istersen dön.

2. Terminal yok sayar, ancak bu şekilde oluşturulmuşsa kodunuz yok saymaz. Sistem çağrısı hem parametreleri hem de dönüş değerini yok sayar. Çok açık. Bu durumda nereye dönüyor?

Kişi yalnızca bir şablonun oluşturulması hakkında tahminde bulunabilir. Elbette, geliştiriciler varsayılan INT'den devam ettiler.

 
okvseok :

Bu satırları nasıl anlayabilirsiniz:

Böyle yazın ve günlüğe bakın:

 //---- return orders volume

if (buys> 0 ){
 Print ( "buys = " ,buys);
 return (buys);
}
else {
 Print ( "-sells = " ,-sells);
 return (-sells);// это эквивалентно команде return(sells*(-1));
}
 

Tavsiye ile yardım edin.

Global değişkenlerde tarihi olan birkaç gösterge kullanıyorum

 extern bool    shiftdata           = false ;
extern string ShiftHistory        = "02.06.2012 00:00" ;

tarihteki tarihi her değiştirdiğinizde, tüm göstergelerde değiştirmek istersiniz.

iCustom aracılığıyla kaydırma değerini int çubuklarına gönderen bir gösterge yazdım.

Ancak sorun şu ki, tarih değiştirilmeden iletilir, derlenen tarih (07/02/2012) ve manuel olarak değiştirildiğinde (06/02/2012) iletilmez !!!

NEDEN VE NE YAPILMALI????

 //+------------------------------------------------------------------+
//|                                                        iTime.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 1
extern string BLOK_______1        = "Работа с историей" ;
extern string ShiftHistory        = "02.07.2012 00:00" ;
extern string PERIOD              = "D1" ;
//---
double buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer ( 0 ,buffer);
   SetIndexStyle ( 0 , DRAW_ARROW , 0 , 0 );
   SetIndexEmptyValue ( 0 , 0.0 );
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
int   counted_bars= IndicatorCounted ();
if (counted_bars< 0 ) return (- 1 );
int i,period,limit,bs,barn;

if (PERIOD== "MN1" ) period= PERIOD_MN1 ;
else
if (PERIOD== "W1" )  period= PERIOD_W1 ;
else
if (PERIOD== "D1" )  period= PERIOD_D1 ;
else 
if (PERIOD== "H4" )  period= PERIOD_H4 ;
else
if (PERIOD== "H1" )  period= PERIOD_H1 ;
else
if (PERIOD== "M30" ) period= PERIOD_M30 ;
else
if (PERIOD== "M15" ) period= PERIOD_M15 ;
else
if (PERIOD== "M5" )  period= PERIOD_M5 ;
else
if (PERIOD== "M1" )  period= PERIOD_M1 ;
else
period= PERIOD_D1 ;

bs= iBarShift ( Symbol (),period, StrToTime (ShiftHistory));
barn= iBars ( Symbol (),period);
limit=barn- 100 ;

if (limit>bs)
for (i=barn- 1 ; i>= 0 ; i--)
{
if (i==bs) buffer[i]=bs;
} RefreshRates ();
return ( 0 );
}

İşte alıcı

 for ( int y=barn- 100 ; y>= 0 ; y--)
{
int bbb,st= iCustom ( Symbol (),PERIOD, "iTime" , 0 ,y);
if (st> 0 ) bbb=st;
}
 Comment (bbb);

Yorum vardiya 16 yazıyor. Ve 06/02/2012 tarihinde 48 olmalı

Lütfen tavsiye ile yardım edin!

 

lütfen bir EA'daki bir zikzakın son yüksek ve düşük (tepe noktalarının) nasıl belirleneceğine yardım edin

çift zz1;
int başlangıç()
{
zz1=iCustom(NULL,0,"ZigZag", 12, 5, 3, 0, 1);
MessageBox ("zz1="+zz1,"zz1");
dönüş(0);
}
sadece "0,00000" çıkıyor

 
spek :

lütfen bir EA'daki bir zikzakın son yüksek ve düşük (tepe noktalarının) nasıl belirleneceğine yardım edin

çift zz1;
int başlangıç()
{
zz1=iCustom(NULL,0,"ZigZag", 12, 5, 3, 0, 1);
MessageBox("zz1="+zz1,"zz1");
dönüş(0);
}
sadece "0,00000" çıkıyor

 double ZZ[ 10000 ]={ 0.0 };   //массив для значений ZigZag
double zz1[ 10000 ]={ 0.0 };

//-----
int init()
{

}
return ( 0 );
//---
int start()
{
int q=1;   //ПОПРАВИЛ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

for ( int i= 1 ; i<= 1000 ; i++)
{
zz1[i]= iCustom ( NULL , 0 , "ZigZag" , 12 , 5 , 3 , 0 , i);
if (zzl[i]> 0 ) { ZZ[q]=zzl[i];  q++; }
//MessageBox("zz1="+zz1,"zz1");
Comment (ZZ[ 1 ], "  " ,ZZ[ 2 ]);

return ( 0 );
}
 

Lütfen insanlara "mikahekin" göstergesinin görüntülenen ara belleği nasıl (veya daha doğrusu nerede) değiştirdiğini açıklayın, bir haftadır beynimi zorluyorum ama anlayamıyorum.

" Alert() " öğesini oraya sürüklemek istiyorum, böylece trendin ne zaman tersine döndüğünü söylesin.

 //+------------------------------------------------------------------+
//|                                                    mikahekin.mq4 |
//|                        Copyright 2004, MetaQuotes Software Corp. |
//|                                                http://www.sasara |
//|                              Modified by: Ronald Verwer/ROVERCOM |
//+------------------------------------------------------------------+
#property copyright "Copyright 2004, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

#property  indicator_chart_window
#property  indicator_buffers 4
#property  indicator_color1  Silver
#property  indicator_color2  Yellow
#property  indicator_color3  Red
#property  indicator_color4  Blue
#property  indicator_width1 3
#property  indicator_width2 3

//---- input parameters
extern int KPeriod= 3 ;
extern int DPeriod= 3 ;
extern int JPeriod= 7 ;

double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double HighesBuffer[];
double LowesBuffer[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
         IndicatorBuffers ( 6 );
   SetIndexStyle ( 0 , DRAW_HISTOGRAM , 0 , 3 );
   SetIndexStyle ( 1 , DRAW_HISTOGRAM , 0 , 3 );
   SetIndexStyle ( 2 , DRAW_ARROW , 0 , 1 );
   SetIndexStyle ( 3 , DRAW_ARROW , 0 , 1 );
//----
   SetIndexDrawBegin ( 0 , 10 );
   SetIndexDrawBegin ( 1 , 10 );
   SetIndexDrawBegin ( 2 , 10 );
   SetIndexDrawBegin ( 3 , 10 );
   SetIndexDrawBegin ( 4 , 10 );
   SetIndexDrawBegin ( 5 , 10 );
//---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ind_buffer1);
   SetIndexBuffer ( 1 ,ind_buffer2);
   SetIndexBuffer ( 2 ,ind_buffer3);
   SetIndexBuffer ( 3 ,ind_buffer4);
   SetIndexBuffer ( 4 , HighesBuffer);
   SetIndexBuffer ( 5 , LowesBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName ( "mikahekin" );
   SetIndexLabel ( 0 , "Open" );
   SetIndexLabel ( 1 , "Close" );
   SetIndexLabel ( 2 , "High" );
   SetIndexLabel ( 3 , "Low" );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int start()
  {
   int     i,k,j;
   int     counted_bars= IndicatorCounted ();
   double price;
   
//----
   if ( Bars <= 10 ) return ( 0 );
//---- initial zero
   if (counted_bars< 0 ) return (- 1 );
//---- minimums  counting
   i= Bars -KPeriod;
   if (counted_bars>KPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double min= 1000000 ;
      k=i+KPeriod- 1 ;
       while (k>=i)
        {
         price=Low[k];
         if (min>price) min=price;
         k--;
        }
      LowesBuffer[i]=min;
      i--;
     }
//---- maximums counting
   i= Bars -DPeriod;
   if (counted_bars>DPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double max=- 100000 ;
      j=i+DPeriod- 1 ;
       while (j>=i)
        {
         price=High[j];
         if (price>max) max=price;
         j--;
        }
      HighesBuffer[i]=max;
      i--;
     }
//---- mikahekin calcaulation
   i= Bars -JPeriod;
   if (counted_bars>JPeriod) i= Bars -counted_bars- 1 ;
   while (i>= 0 )
     {
       double sumlow= 0.0 ;
       double sumhigh= 0.0 ;
       double sumopen= 0.0 ;
       double sumclose= 0.0 ;
       double close= 0.0 ;
       double open= 0.0 ;
       double high= 0.0 ;
       double low= 0.0 ;

       for (k=(i+JPeriod- 1 );k>=i;k--)
         {
         sumclose+=Close[k];
         close=sumclose/JPeriod;
         sumlow+= LowesBuffer[k];
         low= sumlow/JPeriod;
         sumopen+=Open[k];
         open=sumopen/JPeriod;
         sumhigh+=HighesBuffer[k];
         high=sumhigh/JPeriod;
         }
         
      ind_buffer1[i]=open;
      ind_buffer2[i]=close;
      ind_buffer3[i]=high;
      ind_buffer4[i]=low;

      i--;
     }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
ZY mql4'te baleye göre biraz daha iyiyim ama...
 
Zhunko :

1. Hiçbir şey ekleyemiyorum. Ne istersen dön.

2. Terminal yok sayar, ancak bu şekilde oluşturulmuşsa kodunuz yok saymaz. Sistem çağrısı hem parametreleri hem de dönüş değerini yok sayar. Çok açık. Bu durumda nereye dönüyor?

Kişi yalnızca bir şablonun oluşturulması hakkında tahminde bulunabilir. Elbette, geliştiriciler varsayılan INT'den devam ettiler.


Bir onay işareti geldi, terminal EA'nın start() işlevini çağırıyor . Bu işlevin döndürdüğü değerin uçbirime kayıtsız olduğunu belirtirsiniz. Bu bir yerde belgelendi mi?
 
KoKoS :

Lütfen insanlara "mikahekin" göstergesinin görüntülenen ara belleği nasıl (veya daha doğrusu nerede) değiştirdiğini açıklayın, bir haftadır beynimi zorluyorum ama anlayamıyorum.

"Alert()" ifadesini oraya sürüklemek istiyorum, böylece trendin ne zaman tersine döndüğünü söylesin.

ZY mql4'te baleye göre biraz daha iyiyim ama...


Teller

 #property  indicator_color1  Silver
#property  indicator_color2  Yellow

ilk iki tamponun bir trend değişikliğinin göstergesi olduğunu söylüyorlar. Sonuçta, mumların üstünde kırmızı simgeler ve altta mavi simgeler var. Trendin kırılma indisi olarak yalnızca sarı-gri kombinasyonu çalışır. Onlar için sırasıyla:

 //---- indicator buffers mapping
   SetIndexBuffer ( 0 ,ind_buffer1); // для серого цвета
   SetIndexBuffer ( 1 ,ind_buffer2); // для жёлтого цвета
Orada, bu tamponların değerlerinde kazın.
 
Millet, bana tarihin iCustom üzerinden transferinden bahsedin. Geçerli derlenmiş değeri aktarır, değiştirilen değer arabellek aracılığıyla global düzeyde nasıl aktarılır? Tarihi değiştirdiğimde, önceki bilgi hala iletiliyor.
 extern bool    shiftdata           = false ;
extern string ShiftHistory        = "02.06.2012 00:00" ;

Göstergeyi biraz daha yükseğe gönderdim .....

Yoksa değişmez mi?????

Ustalar lütfen söyleyin.

 

Lütfen yardım edin, eğer herhangi biriniz yapabilirse, böyle bir durum için kodu yazın:

"TakeProfit tarafından emir kapatıldıysa, hareketli ortalamayı geçtikten sonra, fiyat hareketli ortalamayı ters yönde geçene kadar bu yönde daha fazla anlaşma açmayın."

Şimdiden teşekkür ederim!