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

 

splxgf :

DHP :

Bu döngü nasıl "kolaylaştırılır"? Çok uzun süre sayılır.
   if ( iHigh ( NULL , 60 ,i)>LOWprice && LOWprice> iLow ( NULL , 60 ,i)) if (LOWprice> bid) CountH++ else CountL++;

Ve bunun gibi daha da iyisi:

   if ( iHigh ( NULL , 60 ,i)>LOWprice) if (LOWprice> iLow ( NULL , 60 ,i)) if (LOWprice> bid) CountH++ else CountL++;

Ayrıca bir Yüksek ve Düşük değerler dizisi oluşturma fikri de vardır. Belki bu işleri biraz hızlandırır?

 
abolk :


bir sipariş seçilir https://docs.mql4.com/en/trading/OrderSelect - bir döngüde sıralama veya bilete göre seçme

ardından Order*() işlevi ilgili order parametresine bakar

Elbette, aptalca sorular için üzgünüm ama:

OrderSelect işlevinde , seçim için veri kaynağı MODE_HISTORY kullanmaksa, yani. kapatılan ve silinen emirler arasından emir seçilir, en son kapatılan emir numarası nasıl bulunur? Programda nasıl numaralandırılırlar? Sondan ilke mi yoksa tam tersi mi?

 
Xaoss1990 :

Elbette, aptalca sorular için üzgünüm ama:

OrderSelect işlevinde , seçim için veri kaynağı MODE_HISTORY kullanmaksa, yani. kapatılan ve silinen emirler arasından emir seçilir, en son kapatılan emir numarası nasıl bulunur? Programda nasıl numaralandırılırlar? Sondan ilke mi yoksa tam tersi mi?


internette buna benzer çok soru var.

http://forum.alpari.ru/showthread.php?t=27708

 
Xaoss1990 :

Elbette, aptalca sorular için üzgünüm ama:

OrderSelect işlevinde , seçim için veri kaynağı MODE_HISTORY kullanmaksa, yani. kapatılan ve silinen emirler arasından emir seçilir, en son kapatılan emir numarası nasıl bulunur? Programda nasıl numaralandırılırlar? Sondan ilke mi yoksa tam tersi mi?


en son kapanmış olanı arama işlevi, maksimum kapanış süresine sahip bir emir arama işlevine benzer
 
LazarevDenis :


İnternette bunun gibi çok soru var.

http://forum.alpari.ru/showthread.php?t=27708

Ö! Bulundu, teşekkürler:

OrderSelect (HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

Her şey doğru, değil mi?

 
DhP :

Bu döngü nasıl "kolaylaştırılır"? Çok uzun süre sayılır.

Çağrı:

   INS = True;
   
   for ( int i= 1 ; i<= 6000 ; i++)
   {
       if (INS)
      {
         if (LOWprice > iHigh ( NULL , 60 ,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
             continue ;
         }
         if (LOWprice < iLow ( NULL , 60 ,i))
         {
            INS = False;
            UPP = False;
            LOW = True;
             continue ;
         }
      }
       else
      {
         if (UPP)
             if (LOWprice > iHigh ( NULL , 60 ,i))
               continue ;
             else
             if (LOWprice < iLow ( NULL , 60 ,i))
            {
               // INS = "False"
               UPP = False;
               LOW = True;
               continue ;
            }
         if (LOW)
             if (LOWprice < iLow ( NULL , 60 ,i))
               continue ;
             else
             if (LOWprice > iHigh ( NULL , 60 ,i))
            {
               // INS = "False"
               UPP = True;
               LOW = False;
               continue ;
            }
         
         INS = True;
      }
      
      if (LOWprice > Bid)
         CountH++;
       else
         CountL++;
   }

Mantık şudur: fiyat, içeriden çok tarihi barların dışındadır.

INS = "İçeride".

Kodun doğruluğunu bir kağıt parçası üzerinde kontrol ettim. Kodun hızını test etmedim. Ama booleanların güzel bir avantaj sağladığından eminim.

 
MaxZ :

Çağrı:

Mantık şudur: fiyat, içeriden çok tarihi barların dışındadır.

INS = "İçeride".

Not: Kodun doğruluğunu bir kağıt üzerinde kontrol ettim. Kodun hızını test etmedim. Ama booleanların güzel bir avantaj sağladığından eminim.


Evet.

aynı o kadar saptırmak gerekiyor ki bir kodun üç net satırının koda dönüşmesi, anlaşılması zor.

iLow , iHigh çeklerini bölme fikriniz varsa, hemen bölebilirsiniz:

           if (LOWprice> bid) if ( iHigh ( NULL , 60 ,i)>LOWprice ) if ( LOWprice> iLow ( NULL , 60 ,i))CountH++;  
           if (LOWprice<=bid) if ( iHigh ( NULL , 60 ,i)>LOWprice ) if ( LOWprice> iLow ( NULL , 60 ,i))CountL++;
ve hiçbir şey yapma
 
      int HourPrices[20000];     
      for ( int i= 1 ; i<= 6000 ; i++)
	for (double cPrice=iLow(NULL,60,i);cprice<=iHigh(NULL,60,i);cPrice+=Point)
	  HourPrices[cPrice/Point]+=1;

Böyle bir diziden direnç seviyeleri bulmak sorun değil. Bunu yaparken yeni çubuklar ekleyin ve eskileri kaldırın. Ve ondan bilgi seçimi, bir koşulla iki döngüdür veya ArrayMaximum hemen istenen değeri verecektir.

 
abolk :


Evet.

aynı o kadar saptırmak gerekiyor ki bir kodun üç net satırının koda dönüşmesi, anlaşılması zor.

iLow, iHigh kontrolünü bölme fikriniz varsa, hemen bölebilirsiniz:

ve hiçbir şey yapma

Yukarıda sunduğum benzer varyant (eğer 'ayı ayırmak için).

Ve sen benim fikrimi anlamaya çalışmadın bile (mantığı kısaca anlatmış olmama rağmen)... Fiyat yüksek olunca iki yerine bir kontrol yapıyoruz. Benzer şekilde, fiyatın düşük olduğu durum için. Ve fiyat tarihi çubukların içindeyken (ki bu oldukça nadirdir - mantık ve fikir bu!), iki kontrol yaparız (başka yolu yoktur).

Kontrol, barın içinde değil, dışında bir fiyatın varlığı içindir. Eskiden samanlıkta iğne aranırdı, başka iğne görmezsem aramam... İğnenin kendisi gerektiğinde kendini gösterir! :)))

 
MaxZ :

Yukarıda sunduğum benzer varyant (eğer 'ayı ayırmak için).

Ve sen benim fikrimi anlamaya çalışmadın bile (mantığı kısaca anlatmış olmama rağmen)... Fiyat yüksek olunca iki yerine bir kontrol yapıyoruz. Benzer şekilde, fiyatın düşük olduğu durum için. Ve fiyat tarihi çubukların içindeyken (ki bu oldukça nadirdir - mantık ve fikir bu!), iki kontrol yaparız (başka yolu yoktur).

         if (LOWprice > iHigh ( NULL , 60 ,i)) continue;
         if (UPPprice < iLow ( NULL , 60 ,i)) continue;
Versiyonunuz, yazarın versiyonuna eklenen bu iki satıra indirgenebilir ve şartlarda bazı değişikliklerle prensipte hızlandırılmalıdır.