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

 

Herkese selam.

Lütfen yeni yapıdaki göstergenin başlangıcı hakkında yorum yapın. Döngüyü başlatmakla ilgileniyorum (nasıl doğru yapılır). Buraya BolingerBands kodunu ekledim. Sorunun olduğu yerler hakkında yorum yapın // bu ne anlama geliyor? ve neden ne?

Öğreticideki her şey öncekiyle aynıdır https://book.mql4.com/ru/samples/icustom

 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 i,pos;
//---
   if (rates_total<=InpBandsPeriod || InpBandsPeriod<= 0 )    //что это значит ?
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtMovingBuffer, false );                //что это значит ?
   ArraySetAsSeries (ExtUpperBuffer, false );                 //что это значит ?
   ArraySetAsSeries (ExtLowerBuffer, false );                 //что это значит ?
   ArraySetAsSeries (ExtStdDevBuffer, false );                //что это значит ?
   ArraySetAsSeries (close, false );
//--- initial zero
   if (prev_calculated< 1 )                                  //что это значит ?
     {
       for (i= 0 ; i<InpBandsPeriod; i++)                      //что это значит ?
        {
         ExtMovingBuffer[i]= EMPTY_VALUE ;                   //что это значит ?
         ExtUpperBuffer[i]= EMPTY_VALUE ;                    //что это значит ?
         ExtLowerBuffer[i]= EMPTY_VALUE ;                    //что это значит ?
        }
     }
//--- starting calculation
   if (prev_calculated> 1 )                                   //что это значит ?
      pos=prev_calculated- 1 ;                               //что это значит ?
   else                                                    //что это значит ?
      pos= 0 ;//что это значит ?
//--- main cycle
   for (i=pos; i<rates_total && ! IsStopped (); i++)          //что это значит ?
     {
       //--- 
      
       //код индикатора в цикле
      
       //---
     }
//---- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
 

Ve belgeleri okudun mu? Anlaşılmaz bir ifadeye geçin ve F1 sihirli tuşuna basın veya sitede okuyun.

https://docs.mql4.com/en/array/arraysetasseries

https://docs.mql4.com/en/basis/function/events#oncalculate

 

Merhaba. Yardım istiyorum, bu durumda sihirbazı çözemiyorum.

Benim sunduğum kodda ekrana çizilmek için buf 0'a ihtiyacım var ve buf 1 çizilmiyor ama dizilerin daha fazla işlenmesi ve başka bir tampona çıktı olarak alınması düşünülüyor (örneğin buf 2'de). Buf 1'i satıra gizlerim:

SetIndexBuffer (0,Buf0);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

SetIndexBuffer(1,Buf1);

SetIndexStyle(1,DRAW_NONE); // istiyorum saklamak Bugün nasılsın? astar

Ama göstergeyi ayarlarken, hesaplamalardaki farktan dolayı bir ofset alıyorum...

SORU: Buf 0'ın normal olarak çizilmesi için bu farkı bir şekilde ortadan kaldırmak mümkün müdür?
Dosyalar:
testbuf.mq4  2 kb
 
clubsmi :

Merhaba. Yardım istiyorum, bu durumda sihirbazı çözemiyorum.

Benim sunduğum kodda ekrana çizilmek için buf 0'a ihtiyacım var ve buf 1 çizilmiyor ama dizilerin daha fazla işlenmesi ve başka bir tampona çıktı olarak alınması düşünülüyor (örneğin buf 2'de). Buf 1'i satıra gizlerim:

SetIndexBuffer(0,Buf0);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

SetIndexBuffer(1,Buf1);

SetIndexStyle(1,DRAW_NONE); // istiyorum saklamak Bugün nasılsın? astar

Ama göstergeyi ayarlarken, hesaplamalardaki farktan dolayı bir ofset alıyorum...

SORU: Buf 0'ın normal olarak çizilmesi için bu farkı bir şekilde ortadan kaldırmak mümkün müdür?

INDICATOR_DATA ve INDICATOR_CALCULATIONS hakkında bilgi edinin

Ondan önce, #property Indicator_buffers ve IndicatorBuffers(10); 10 benim göstergemden, ME 509 yapısında olduğu gibi tampon sayısının sınırlı olmadığını göstermek için silmedim.

 
Sık sık F1'e basarım. ancak zayıf bir programcı için her şey her zaman net değildir. Örnek - ArraySetAsSeries -> AS_SERIES bayrağını belirtilen dinamik dizi nesnesine ayarlar, dizi öğeleri zaman serilerinde olduğu gibi indekslenecektir.

Seçenekler

sıralamak[]

[in][out] Ayarlanacak sayısal dizi.

bayrak

[içinde] Dizi indeksleme yönü.

Geri dönüş değeri

Başarı durumunda true, aksi takdirde false döndürür

Ancak for(i=0; i<InpBandsPeriod; i++) ve for(i= InpBandsPeriod ; i<0; i--) ile neyin ve nasıl olacağını ne verir. Doğru ve yanlış döngülere yansıtılıp yansıtılmayacağı. 5xx yapılarında durum böyle değildi. belki onsuz ArraySetAsSeries ama sonra varsayılan ne olacak . Ya da belki değil.

 

Teşekkürler AlexeyVik, anladım...

yapı 509 ile eski mql4 dilinin ne kadar süreceğini kimse söyleyebilir mi? Dili yeni yapıdan öğrenmek için acele etmem gerekiyor mu?

 
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal ();
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (ot<= OrderOpenTime ()) return ( True );
            }
          }
        }
      }
    }
  }
   return ( False );
}

Kim'in işlevi çalışmıyor...

 if (IsNewBar()== true )
{
if (ExistPositions( NULL ,- 1 , 44444 ,- 1 )== false )
           {
       
                  trade= true ;
                         
             if (trade!= false )
              {
                    
                        OpenPosition( Symbol (), OP_BUY , 0.1 , Ask -sl* Point , Ask +tp* Point , 44444 );

                        trade= false ;
                       }
                   
      }
  }            
       }   

aynı sihire sahip başka pozisyon kalmaması şartıyla bir pozisyon açılmalı ..... ve benim için her yeni barda açılıyorlar ......

 
Zver4991 :


Kim'in işlevi çalışmıyor...

aynı sihire sahip başka pozisyon kalmaması şartıyla bir pozisyon açılmalı ..... ve benim için her yeni barda açılıyorlar ......


şu ot - açılış saatine bakın (0 - herhangi bir açılış saati) ya siz?

 
gince :


şu ot - açılış saatine bakın (0 - herhangi bir açılış saati) ya siz?

Ve neden

trade= true ; if (trade!= false )  .......
                          

açık değilse aç

 
gince :


şu ot - açılış saatine bakın (0 - herhangi bir açılış saati) ya siz?


bu yüzden açılış zamanı ne olursa olsun, böyle bir büyüye sahip başka açık pozisyonlar olup olmadığını kontrol etmelidir ..... basit bir büyü limiti .... yani

if (ExistPositions( NULL ,- 1 , 44444 ,- 1 )== false )//bu büyü ile açık pozisyon yoksa, bir şeyler yapın......

....veya bir şeye ayak uyduramıyorum....benim için -1 çünkü pozisyonun ne zaman açıldığı umurumda değil .....sonuçta benim için sadece yenisinde açılacak bar ve kapalı olduğu durumda eski çünkü koşul, yalnızca böyle bir sihirbazla açık olanlar olmadığında bir poz açabileceğinizi söylüyor.

daha da basitse, o zaman bir pozisyon açın ve kapanana kadar bekleyin.... kapandığında tekrar açıyoruz ve kesinlikle her barda böyle bir büyü ile pozisyon açmamalıyız….çünkü yine o durumda böyle bir sihirbazla açık pozisyon olup olmadığını kontrol etmek için ayarlandı