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

 
gyfto :

Ya da sadeleştirelim

Burada Δ, kastedilen farktır, yani. Kapat[i], Açık[i]'dir ve ^ üs işaretidir. const - verilen ifadede bir sabit, yani i_sizeOfSequentialCorrectionBar * pt, standart matematik gösterimi, hiçbir şey icat etmedi. 2*bVar-1, ±1'e benzer, burada bVar herhangi bir bool değişkenidir. Ve 2*bVar-1 ifadesi 0 ve 1 değil, -1 ve +1 değerlerini alır. ≥ MQL4 >='dir, ayrıca standart bir matematiksel gösterimdir. adım - adım, yani cnt++'da adım 1'dir ve cnt=0'da adım -cnt'dir. Gösterimden başka ne açık değildi?

gyfto , açıklama için teşekkürler. Ama bir an var. Orada, her durumda, ifadenin çıkış işaretindeki bir değişiklik sorunu çözmez. Sonuçta, sıfırlamanın gerçekleştiği anda açılış ve kapanış fiyatlarının "takas edilmesi" gerekir. Onlar. burada anladığım kadarıyla özel evrensellik elde edilemez. Bu tam olarak düşündüğüm şeydi.

Vadim , kısa bir süre önce bir fonksiyon döngüsü içine koymanın kod yürütmesini hız açısından büyüklük sırasına göre yavaşlattığını yazdı. Bunun yalnızca, işlevin değerlerini döngünün her yinelemesinde veya genel olarak herhangi biri için hesapladığı durum için geçerli olup olmadığını merak ediyorum. Örneğin, Expert Advisor'ı henüz eklememişken, gyfto'nun basitleştirmeye çalıştığı işlevi şu şekilde yeniden yazdım:

 //+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType( int directionMA)
{
   int cntUp,                                                                             // Счётчик идущих друг за другом свечей с..
       cntDn;                                                                                 // .. требуемыми признаками
       
   for ( int i=i_AnyBarsToHistory; i>= 1 ; i--)
   {
       if (directionMA == CROSS_UP)
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntDn++;                                                                     // .. прибавим 1 к счётчику

         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0 ;                                                                   // .. счётчик обнуляем

         if (cntDn == i_sequentBarsСount)                                                   // Если cnt баров в подряд медвежьи..
             return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                         // .. Выходим из функции
      }

       if (directionMA == CROSS_DN)
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntUp++;                                                                     // .. прибавим 1 к счётчику

         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0 ;                                                                   // .. счётчик обнуляем
     
         if (cntUp == i_sequentBarsСount)                                                   // Если cnt баров в подряд бычьи..
             return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                         // .. Выходим из функции
      }
   }
}

sayaçlar cntUp ve   cntDn'yi farklı yaptım, çünkü hesaplanan çubuklar döngüsünde bir hesaplama varsa, DirectionMA hemen bir değere ve ardından başka bir değere sahip olabilir. Ve sayaç bir değeri toplayabilir, diğerini toplamaya devam edebilir. Ve eğer sadece bir değişken varsa, o zaman bir niteliğin çubuklarının sayısı başka bir niteliğin çubuklarının sayacına eklenecektir.

  Burada tavsiyeye ihtiyacın var, belki bir şekilde farklı beste yapmak daha iyidir?

Mesele şu ki, uzman büyük olmasa da. Arabalar ve bu fonksiyon var. Ve uzun bir baykuş yerine bir baykuş satıyor ve bunun tersi de oluyor. Bunun nasıl olabileceğini anlamaya çalışıyorum. Belki burada bir tür söve vardır?

 

Merhaba, mql4 ile tanışmaya başladım, kârsız siparişleri kilitleyen bir script yazdım. Bir problemin üstesinden gelemiyorum: komut dosyası -10 kaybı olan tüm emirleri kilitler, ancak fiyat -10'un altında olduğu sürece onları kilitlemeye devam eder. Kilitleme bir kez nasıl yapılır? Onlar. emir -10 zarara ulaştı, script bloke etti ve daha sonra kayıp artmaya devam etse bile bu emre dokunmuyor.

harici çift StopLoss=150;

dış çift Kar=-10;

//+------------------------------------------- --------------------+

//----
geçersiz başlangıç()
{
çifte kar=Kar;
çift Lot=0;
for(int i=0;i<OrdersTotal();i++)
{
if(! OrderSelect (i,SELECT_BY_POS))
devam etmek;

if(OrderType()==OP_BUY && OrderProfit()<Kar*Puan)
Lot+=SiparişLots();
if(OrderType()==OP_SELL && OrderProfit()<Kar*Puan)
Çoklar-=SiparişLots();


}
if(lot>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Puan,0,NULL,Kırmızı);
eğer(çok<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Mavi);
//----
dönüş(0);
}

 

Tünaydın.

Lütfen koda bakın, işlemin ortalama süresini hesaplamak istiyorum ( bekleyen emirlerle alım satım)

 //+------------------------------------------------------------------+
//| Расчет среднего времени сделки            |
//+------------------------------------------------------------------+
double Sredneevremyasdelky(){
datetime Tsd= 0 ; // общее время сделок
datetime Tsvsd= 0 ; // среднее время сделки 
int n= 0 ;
int orders=HistoryTotal();   // history orders total

         for (   int i=orders- 1 ;i>= 0 ;i--)
                  {
                 if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== false ) 
                   { 
                         Print ( "Ошибка в истории!" ); 
                         break ;
                   }
                 if (OrderSymbol()!= Symbol () || OrderType()>OP_SELL) 
                   continue ;
                  n++;
                 Tsd=Tsd+(OrderCloseTime()-OrderOpenTime());
                   }
            if (n>0) Tsvsd=Tsd/n/ 60 ;


            return (Tsvsd);
         }

emrin tetiklendiği andan kapanışa kadar.

 
Stells :

Tünaydın.

Lütfen koda bakın, işlemin ortalama süresini hesaplamak istiyorum (bekleyen emirlerle alım satım)

emrin tetiklendiği andan kapanışa kadar.


Ve neden bir döngüdeki ortalama süreyi hesaplıyorsunuz? Ekstra işlemler. Belki daha sonra, döngüden sonra daha iyi. Evet ve hesaplama dönemini ayarlamak güzel olurdu
 
Vinin :

Ve neden bir döngüdeki ortalama süreyi hesaplıyorsunuz? Ekstra işlemler. Belki daha sonra, döngüden sonra daha iyi. Evet ve hesaplama dönemini ayarlamak güzel olurdu
Döngüden kaldırıldı. Hesap dönemi nasıl olur?
 
Stells :
Döngüden kaldırıldı. Hesap dönemi nasıl?

Örneğin dış değişkenler
 

Bunu anladım, bir şekilde randevu almam lazım

bu ne işlevi

 
Stells :

Bunu anladım, bir şekilde tarih yapmam lazım

bu ne işlevi


Dış varsa neden karmaşık
 

hoz gibi   Özgür olacağım, gideceğim, öyle olsun.

Optimizasyon hakkında bir sorum var. EMA algoritmasını anlama. Bildiğiniz gibi aslında zaman koyan bir özyineleme var. Orijinal koda göre:

...

https://www.mql5.com/ru/forum/144691 adresine taşındı

 
gyfto :

hoz gibi   Özgür olacağım, gideceğim, öyle olsun.

Optimizasyon hakkında bir sorum var. EMA algoritmasını anlama. Bildiğiniz gibi aslında zaman koyan bir özyineleme var. Orijinal koda göre:

EMA'nın oluşturduğu ağırlıklarla başa çıkmak için matcad'i özellikle aldım:

Bu arada, şimdi bana neden EMA kullanan göstergelerin (ki bu, üstelden ziyade güç yasası olarak adlandırılması daha doğru olur) 14'e eşit bir nokta kullandığını anladım. son ağırlık o kadar yüksek ki, bir sonraki ağırlık öncekinden daha önemliyse, güç işlevini sarabilirseniz? Özyinelemenin sonundaki son ağırlıklar bir formülle türetilebiliyorsa, özyinelemeyi neden kullandığımı bile sormuyorum (bkz. F(n,x) ve y(n,x)).


Muhtemelen kendi konunuzu açmalısınız. Neden "Yeni başlayanlar için bir şubeye" ihtiyacınız var?