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

 
MakarFX # :

Sizde açık değilse ikisini aynı anda açmanız şartıyla.

Ne olduğunu?

 double GetLotSize()
  {
   double Ls= 0 ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

bu şey mevcut parti büyüklüğünü sayar

bu parametre ayarlarda ayarlanır: LotControl

Sırasıyla: GetLotSize()>LotControl - vOrderOpenSell()'i tetiklemek için bSignalBuy() sinyaline ihtiyacım var.

evet duruma göre iki siparişin birden açıldığının farkındayım. Başlıkta yazdığım buydu. ama vOrderOpenBuy() nasıl açılmaz?

 
Mihail Matkovskij # :

Robot pazara bir yönde girmişse, aynı yönde tekrar pazara girmez. Yani giriş algoritmanız çalışıyor mu?

Bu koşul sağlanırsa, o zaman

Sonrasında

Ve ayrıca bir sat sinyali ile.

O halde ters istikamette girişin sebebi, durumun tetiklenmesidir.

Evet. ihtiyacım olan şey bu. ANCAK, aynı zamanda, bu koşula göre girişi ileri yönde durdurmanız/hariç tutmanız gerekir:

GetLotSize()>LotControl
 
Kedrov # :

Benimle takıldığın için teşekkürler Makar!

Ve işte ekran görüntüsü

Evet, çöp)

Şimdi her klasörde, sırayla, Uzmanlar klasörlerini _ Uzmanlar ve Göstergeler klasörlerini _ Göstergeler olarak yeniden adlandırın.

Bir klasörde yeniden adlandırıldı - yardımcı olmadıysa terminali başlattı - yeniden adlandırıldı ve bir sonraki klasöre gidin.

Not: Terminal ilk kez normalden biraz daha uzun süre açılacaktır.

 
законопослушный гражданин # :

bu şey mevcut parti büyüklüğünü sayar

bu parametre ayarlarda ayarlanır: LotControl

Sırasıyla: GetLotSize()>LotControl - vOrderOpenSell()'i tetiklemek için bSignalBuy() sinyaline ihtiyacım var.

evet duruma göre iki siparişin birden açıldığının farkındayım. Başlıkta yazdığım buydu. ama vOrderOpenBuy() nasıl açılmaz?

         if ((bSignalBuy() == true )&&(GetLotSize()>LotControl))
           vOrderOpenSell();
         else
         if (bSignalBuy() == true )
           vOrderOpenBuy();
         
 
законопослушный гражданин # :

Evet. ihtiyacım olan şey bu. ANCAK, aynı zamanda, bu koşula göre girişi ileri yönde durdurmanız/hariç tutmanız gerekir:

Bu durum beni rahatsız ediyor.

 // Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {

bu koşul altında

GetLotSize()=0
 
MakarFX # :

teşekkürler. düzeltildi Düşüneceğim.

 
MakarFX # :

Bu durum beni rahatsız ediyor.

bu koşul altında

haklısın gibi görünüyor.

Böyle:

 if ((bSignalBuy() == true )&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if (bSignalBuy() == true )
         vOrderOpenBuy();

duruma hiç tepki vermiyor (GetLotSize()>LotControl)

 
законопослушный гражданин # :

haklısın gibi görünüyor.

Böyle:

duruma hiç tepki vermiyor (GetLotSize()>LotControl)

GetLotSize() son kapatılandan alınmalıdır, sonra

 // Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {

(GetLotSize()>LotControl) çalışacak
 
MakarFX # :

GetLotSize() son kapatılandan alınmalıdır, sonra ne zaman

(GetLotSize()>LotControl) çalışacak

Tamam teşekkürler!

 
законопослушный гражданин # :

Evet. ihtiyacım olan şey bu. ANCAK, aynı zamanda, bu koşula göre girişi ileri yönde durdurmanız/hariç tutmanız gerekir:

 if (bSignalBuy()) {
   if (GetLotSize() > LotControl)
    vOrderOpenSell();
   else
    vOrderOpenBuy();
}
 double GetLotSize()
  {
   double Ls= 0 ;
   datetime last = 0 , openTime;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }