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

 
Soru ortaya çıktı. Açık pencerelerin sayısı ve tanımlayıcıları nasıl bulunur. Yalnızca ilk, geçerli ve sonraki pencerenin kimliğini alırken bulundu. Ve toplamı alamayacağımızı doğru anlıyorum, ancak yalnızca ilk, sonraki ve sonraki pencerenin olmadığını nasıl anlayacağız.
 
Valeriy Yastremskiy # :
Soru ortaya çıktı. Açık pencerelerin sayısı ve tanımlayıcıları nasıl bulunur. Yalnızca ilk, geçerli ve sonraki pencerenin kimliğini alırken bulundu. Ve toplamı alamayacağımızı doğru anlıyorum, ancak yalnızca ilk, sonraki ve sonraki pencerenin olmadığını nasıl anlayacağız.
     long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol)
         break ;
      currChart= ChartNext (currChart);
       if (currChart==- 1 ) break ;
      i++;
    }
    symb= ChartSymbol (currChart);
 
Vitaly Muzichenko # :

Tüm açık pozisyonlar için pencerelerin açık olduğunu kabul etmek mümkün değildir. Bu nedenle algoritma, istenen sembole sahip bir pencere aramasını içermeli ve orada değilse, pencereyi açıp durumu çizmelidir. Onlar. seviyeleri, ardından hangi SL değişikliğinin meydana geldiğini bulun ve seviyenin rengini kaldırın veya değiştirin.

 
Valeriy Yastremskiy # :

Tüm açık pozisyonlar için pencerelerin açık olduğunu kabul etmek mümkün değildir. Bu nedenle algoritma, istenen sembole sahip bir pencere aramasını içermeli ve orada değilse, pencereyi açıp durumu çizmelidir. Onlar. seviyeleri, ardından hangi SL değişikliğinin meydana geldiğini bulun ve seviyenin rengini kaldırın veya değiştirin.

Bayrak koyun, açık pencere varsa çizin, açık pencere yoksa atlayın. Açık/kapalı değilse açıp çekmenin bir anlamı yok

     long currChart= ChartFirst ();
     int i= 0 ;
    flag= false ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol) {
        flag= true ;
         break ;
      }
      currChart= ChartNext (currChart);
       if (currChart==- 1 ) break ;
      i++;
    }
     if (flag) {
    symb= ChartSymbol (currChart);
    ...
 
Vitaly Muzichenko # :

Bayrak koyun, açık pencere varsa çizin, açık pencere yoksa atlayın. Açık/kapalı değilse açıp çekmenin bir anlamı yok

Yeni aç veya açma, sembol açık değilse bu müşteriye bağlıdır. Benim için açılışla birlikte bu, müşterinin durumlarının daha eksiksiz bir açıklaması. Aramadan, aradığınız sembolün pencere kimliğine ihtiyacınız var. Ardından , istediğiniz pencereyi çizin.

int FcurrChartSimbol(symbol){   
long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
       if ( ChartSymbol (currChart)==symbol)
       return (currChart);
      currChart= ChartNext (currChart);i++;
       if (currChart==- 1 ) return (- 1 );
      
    }}

Zy düzeltildi. Bu aynı işlevdir)))

 
Valeriy Yastremskiy # :

Yeni aç veya açma, sembol açık değilse bu müşteriye bağlıdır. Benim için açılışla birlikte bu, müşterinin durumlarının daha eksiksiz bir açıklaması. Aramadan, aradığınız sembolün pencere kimliğine ihtiyacınız var. Ardından , istediğiniz pencereyi çizin.


Zy düzeltildi. Bu aynı işlevdir)))

Optimal olarak, genel olarak görünür bir diziyi açık grafiklerle doldurun ve ardından diziyle çalışın

 int FcurrChartSimbol(symbol) {   
   long currChart= ChartFirst ();
     int i= 0 ;
     while (i< CHARTS_MAX ) {
      i++;
      mass[i- 1 ]=currChart;
      currChart= ChartNext (currChart);
       if (currChart==- 1 )
         break ;
    }
   return (i); // количество графиков
}

Ardından, örneğin pozisyon sayısı değiştiğinde, doldurmayı güncellemek için bir olayda çalıştırın.

 int OT=OrderTotal();
if (OT != pOT) {
 FcurrChartSimbol(symbol);
 pOT=OT;
}

Bu yükü azaltacak, döngüyü gereksiz yere sürmek gerekli olmayacak

 
Vitaly Muzichenko # :

Optimal olarak, genel olarak görünür bir diziyi açık grafiklerle doldurun ve ardından diziyle çalışın

Ardından, örneğin pozisyon sayısı değiştiğinde, doldurmayı güncellemek için bir olayda çalıştırın.

Bu yükü azaltacak, döngüyü gereksiz yere sürmek gerekli olmayacak

Belki bir şey anlamadım ama grafiğin açıklığını belirlemek için neden SYMBOL_SELECT ve SYMBOL_VISIBLE kullanmadığınızı anlamıyorum

Siparişleri incele, kontrol et

     if (! SymbolInfoInteger (Order_Symbol, SYMBOL_SELECT ) || ! SymbolInfoInteger (Order_Symbol, SYMBOL_VISIBLE ))
       SymbolSelect (Order_Symbol, true );
 
Alexey Viktorov # :

Belki bir şey anlamadım ama grafiğin açıklığını belirlemek için neden SYMBOL_SELECT ve SYMBOL_VISIBLE kullanmadığınızı anlamıyorum

Siparişleri incele, kontrol et

Pekala, bu farklı bir hikayeden ve Market Watch ile ilişkili, açık grafiklerle değil. Ya da değil?

Not Açık bir pozisyon varsa, Piyasa İzlemedeki sembol her durumda görünür olacaktır.
 
Vitaly Muzichenko # :

Pekala, bu farklı bir hikayeden ve Market Watch ile ilişkili, açık grafiklerle değil. Ya da değil?

Not Açık bir pozisyon varsa, Piyasa İzlemedeki sembol her durumda görünür olacaktır.

SYMBOL_SELECT evet, ancak SYMBOL_VISIBLE gerekli değildir.

Ve evet, katılıyorum, bu mutlaka açık bir program değil.

 
Vitaly Muzichenko # :

Optimal olarak, genel olarak görünür bir diziyi açık grafiklerle doldurun ve ardından diziyle çalışın

Ardından, örneğin pozisyon sayısı değiştiğinde, doldurmayı güncellemek için bir olayda çalıştırın.

Bu yükü azaltacak, döngüyü gereksiz yere sürmek gerekli olmayacak

Mantığını biraz anlamadım. Pozisyon açma, SL modifikasyonu, pozisyon kapatma olayları birkaç sembolde izlenir. Konum açma - verilen sembole sahip pencerenin açık olup olmadığını araştırın (pencere kimliğini arıyoruz), açıksa seviyeleri çizin ve ardından SL trolünü izleyin. Açık değilse, istenen sembol ve zaman çerçevesine sahip bir pencere açın ve seviyeleri çizin veya açmayın. Modifikasyon olayı, istenen sembolün penceresini buluyoruz, seviyeler zaten çizilmiş ve seviyenin rengini değiştiriyor veya sonraki seviyeyi silip çiziyoruz.

Genel olarak, müşterinin etkisini dışlamak için, işin başında, pozisyonları ve pencereleri analiz etmek ve açık pozisyonların olduğu ve pencerelerin açık olmadığı semboller üzerinde açık pencereleri açmak gerekir.