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

 
EVGENII SHELIPOV # :

Güzel gün !!!

Lütfen belirli bir düşüş seviyesine ulaşıldığında Uzman Danışman ızgarasındaki minimum ve maksimum siparişleri kapatmak için bir kod yazmama yardım edin

Minimum ve maksimum siparişlerin karını hesaplamak için iki fonksiyon yazdı

Bu siparişlerin toplamını hesaplayan bir fonksiyon yazdı. Burada sorun yok gibi görünüyor.

Soru sadece bu iki emrin nasıl kapatılacağı, işte ClosseAll() bulduğum fonksiyon.

Soru, tüm siparişleri kapatan OrderTicket() işlevi yerine nasıl

tablodaki yalnızca minimum ve maksimum siparişler için biletleri tanımlayan max_ticket ve min_ticket değişkenlerini vidalayın

Veya bu soruna SİZİN bir çözümünüz var mı?

 void ClosseAll()
{
   int slip = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
      if (OrderClose(max_ticket , OrderLots(), Bid, slip)&&OrderClose(min_ticket , OrderLots(), Bid, slip))
             Print ( "OK" );
       else
             Print ( "Не удалось закрыть ордер! " , GetLastError ());
     }
  }
}

ve düzelt

 if (OrderTicket() > max_ticket) max_ticket = OrderTicket();
 
makssub # :

Kusura bakmayın yine çarpık yazıyorum. Tekrar deneyeceğim)

Açık siparişlerin bir ızgarası var. Mevcut fiyata en yakın emrin açılış fiyatını (OrderOpenPrice) bulmam gerekiyor. Izgarayı oluşturmaya devam etmek için, aksi takdirde neredeyse kaotik bir şekilde inşa edilirler.

Numaralandırmanın nasıl yazılacağını anlıyorum, ancak doğru çalışması için dilde doğru ifade edemiyorum (bir köpek gibi, her şeyi anlıyorum))

Örnekler veya örneklere bir bağlantı varsa, lütfen yazın. MQL4

bir döngüde:

 if ( MathAbs (OrderOpenPrice()-Bid)<previous_value)
   {
   previous_value= MathAbs (OrderOpenPrice()-Bid);
   nearest_order=OrderTicket();
   }

döngüden önce, önceki_değer=DBL_MAX'ı en yakın_sıra=0'ı başlat

 
PapaYozh # :

Ve bu arada, bir nesne yaratıldığında çağrısının dolaylı olarak gerçekleşmesi dışında nasıl farklıdır?

ve ayrıca, yapıcıda çağrıldığında, bellek henüz tahsis edilmemiştir, bu derlenmez:

 class A
{
public :
   int                val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public :
   A                 a;
                     B():a(),a.val( 10 ) {} //
};

ancak yapıcının gövdesinde sorun yok:

 class A
{
public :
   int                val;
                     A() {}
};
//+------------------------------------------------------------------ +
class B
{
public :
   A                 a;
                     B():a() {a.val= 10 ;}
};



temel sınıf kurucuları hakkında - açıkça çağrılabilirler :

 class A
{
public :
   int                val;
                     A( const int v): val(v) {}
                     A() {}
};
//+------------------------------------------------------------------ +
class B: public A
{
public :
                     B(): A( 100 ) {}
};
 
MakarFX # :

ve düzelt

Kayma gelince, zaten başlangıçta bir EA'm var

MakarFX # :

ve düzelt

MakarFX # :

ve düzelt

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init() 
{
   Spread = MarketInfo( Symbol (), MODE_SPREAD ) * Point ;
   MinLot = MarketInfo( Symbol (),MODE_MINLOT);
   return ( 0 );
}

Kapanış sonuçlarına göre, bu yerleşim düzenidir, yalnızca maksimum siparişler kapatılır


 
Taras Slobodyanik # :

bir döngüde:

döngüden önce, önceki_değer=DBL_MAX'ı en yakın_sıra=0'ı başlat

MakarFX # :

ve düzelt

MakarFX # :

ve düzelt

Günlükteki hatalarla


 
İyi günler, MirachLtd-Real diye bir şey duyan var mı?

 
EVGENII SHELIPOV # :

Kayma gelince, zaten başlangıçta bir EA'm var

Bu kayma bu fonksiyon içindir... AL ya da SAT üzerine gitmemek için.

 //--- global parameters
int max_ticket = 0 ;
int min_ticket = INT_MAX ;
//+----------------------------------------------------------------------------+
void ClosseAll()
{
   int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;
   for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
  {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderClose(max_ticket , OrderLots(), Bid, slipp)&&OrderClose(min_ticket , OrderLots(), Bid, slipp))
             Print ( "OK" );
       else
             Print ( "Не удалось закрыть ордер! " , GetLastError ());
     }
  }
}
//+----------------------------------------------------------------------------+
//| Расчет профита максимального ордера в сетке                                |
//+----------------------------------------------------------------------------+
double GetProfitMaxOrder()
{
   double max_ticket_profit = 0 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() > max_ticket) 
                     {
                     max_ticket = OrderTicket();
                     max_ticket_profit =  OrderProfit();
                     }
                  }
               }
            }
         }
      }
   return ( max_ticket_profit);
}
//+----------------------------------------------------------------------------+
//| Расчет профита минимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
double GetProfitMinOrder()
{
   double min_ticket_profit = 0 ;
      {
       for ( int cnt = OrdersTotal () - 1 ; cnt >= 0 ; cnt--) 
         {
         if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
            {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic) 
               {
               if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                  {
                   if (OrderTicket() < min_ticket)
                     {
                     min_ticket = OrderTicket();
                     min_ticket_profit = OrderProfit(); 
                     }
                  }
               }
            }
         }
      }
   return (min_ticket_profit);
 
bir sınıf nesnesi yaratmanın en iyi yolu nedir: sınıf tanımından sonra mı yoksa yerel olarak mı, örneğin OnTick()'te? İkinci seçenek muhtemelen son derece ekonomik değildir: CPU üzerindeki yük, RAM.
 
MakarFX # :

Bu kayma bu fonksiyon içindir... AL ya da SAT üzerine gitmemek için.

 int slipp = MarketInfo( _Symbol , MODE_SPREAD )* 2 ;

Burada her şey doğru, bir nokta ile çarpmaya gerek yok

tür dönüştürme nedeniyle olası veri kaybı NEVALASHKA.mq4 376 on üç

derleme uyarısı alıyorum


 
EVGENII SHELIPOV # :

Burada her şey doğru, bir nokta ile çarpmaya gerek yok

tür dönüştürme nedeniyle olası veri kaybı NEVALASHKA.mq4 376 on üç

derleme uyarısı alıyorum


MODE_SPREAD ile çarpmaya gerek yok - Puan cinsinden yayılma

Kontrol edebilirsin

   Print (MarketInfo( _Symbol , MODE_SPREAD ), " / " ,MarketInfo( _Symbol , MODE_SPREAD )* Point );

ve bunu yap

 int slipp = ( int ) MarketInfo( _Symbol , MODE_SPREAD )* 2 ;