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

 
Maxim Kuznetsov # :

Bu bir tür şaka mı?

(;;) için siyah beyaz var

Eh, evet, sadece bir çıkış yolu sağlanır: Büyü, tarikatın büyüsüne eşit olmadığında.
 
Nerd Trader # :
Eh, evet, sadece bir çıkış yolu sağlanır: Büyü, tarikatın büyüsüne eşit olmadığında.

Bunu dene

 int GetMagic(Order &order)
{
   int magic = 0 ;
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
   for ( int i = OrdersTotal (); i > 0 ; i --)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
       if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
           if (magic == OrderMagicNumber()) magic+= 1 ;
           else magic= 0 ;
         }
      }
   }
   return (magic);
}
 
EVGENII SHELIPOV seçili siparişin takas değerini döndüren OrderSwap() işlevi olduğunu söyleyin.

Ya bir siparişler ızgarası varsa???

Sihirli bir emir ve bir finansal araç için emirler ağının tüm takaslarının toplamını hesaplamak için kimsenin bir işlevi yoktur.

Yardım için teşekkürler!!!

Neden onu istiyorsun?
 
MakarFX # :
Neden onu istiyorsun?

Uzun bir şebeke ömrü periyoduna sahip büyük bir emir şebekesini kapatırken, takas emirleri kârları tüketir ve sonucu büyük ölçüde bozar.

Bu fonksiyonun takaslardaki kaybı telafi etmesini istiyorum.

 
EVGENII SHELIPOV # :

Uzun bir şebeke ömrü periyoduna sahip büyük bir emir şebekesini kapatırken, takas emirleri kârları tüketir ve sonucu büyük ölçüde bozar.

Bu fonksiyonun takaslardaki kaybı telafi etmesini istiyorum.

Şebeke kârla mı yoksa başa baş fiyatla mı kapanıyor?
 
MakarFX # :

Bunu dene

 int GetMagic(Order &order)
{
   int magic = 0 ;
   if (order.cmd == OP_SELLSTOP || order.cmd == OP_BUYSTOP)
   for ( int i = OrdersTotal (); i > 0 ; i --)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
       if (OrderType()==OP_SELLSTOP || OrderType()==OP_BUYSTOP)
         {
           if (magic == OrderMagicNumber()) magic+= 1 ;
           else magic= 0 ;
         }
      }
   }
   return (magic);
}
Yaptı, if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) vardı ama sorun çözülmedi.
Ama tüm siparişler için pasaja ihtiyacım var. Sihrin kendisi, yaratılış anında yalnızca durdurma emirlerine göre ayarlanmıştır. OrderType() tarafından bir stop emrinin yaratıldığını anlamak mümkün değildir, çünkü henüz mevcut değildir, bunun için order.cmd'ye emir tipinin bir ön girişi sağlanır. Ve burada iki döngüye ihtiyacımız var: biri diğerinde yuvalanmıştır, böylece sihirli değişkenin bir yinelemesi OrdersTotal()'daki tüm siparişlerin büyüleriyle kontrol edilir. Hepsini uyguladım, sadece sonsuz bir döngü oluşuyor, nedenini bilmiyorum ...
 
MakarFX # :
Şebeke kârla mı yoksa başa baş fiyatla mı kapanıyor?

Evet, belirli bir düşüş seviyesinde, kar sıfırlanır ve kayıpsız takaslar nedeniyle çirkin bir kayıp meydana gelir.

 
Nerd Trader # :
İşe yaradı, bende if (order.cmd == OP_SELLSTOP || OP_BUYSTOP) vardı
Ama tüm emirlerde olmak için pasaja ihtiyacım var. Sihrin kendisi, yaratılış anında yalnızca durdurma emirlerine göre ayarlanmıştır. OrderType() tarafından bir stop emrinin yaratıldığını anlamak mümkün değildir, çünkü henüz mevcut değildir, bunun için order.cmd'ye emir tipinin bir ön girişi sağlanır. Ve burada iki döngüye ihtiyacımız var: biri diğerinde yuvalanmıştır, böylece sihirli değişkenin bir yinelemesi OrdersTotal()'daki tüm siparişlerin büyüleriyle kontrol edilir.
GetMagic'i nerede kullandığınızı gösterin(...)
 
void OpenOrder( int db = - 1 ){

   if (db == - 1 ){
     Print ( "'db' должен иметь корректное значение" );
     return ;
  }

  Order order;

   //Если бид в границах ДБ (его хай/лоу) то инициализируем ордер для селстопа или байстопа
   if (Bid > db_last.low && Bid < db_last.hight){
     if (db == BEAR) order.InitForSell(SELLSTOP);
     if (db == BULL) order.InitForBuy(BUYSTOP);
  }

 ...

   if (order.is_init == true )
  {
     int order_send = OrderSend ( Symbol (), order.cmd, 0.01 , order.open_price, 10 , 
    order.sl_price, order.tp_price, "" , GetMagic(order) , 0 , order.arrow_color);

     if (order_send == - 1 ){
       Print (order.error_text, " | " , GetLastError (), " db_last.third " ,db_last.third,
         " | db_last.size_open_to_low " ,db_last.size_open_to_low, " | order.sl_price: " ,
        order.sl_price, " | order.cmd " ,order.cmd);
       ResetLastError ();
       return ;
    }
  }
}

...

int GetMagic(Order &order)
{
  int magic = 0 ;
  //Если должен быть открыт стопордер и если есть уже открытые или отложенные 
   //ордера, то возможно некоторые с маджиком, это надо проверить и сгенерировать 
   //для нашего ордера уникальный маджик и отправить его на запись в массив
   if (order.cmd == OP_SELLSTOP || OP_BUYSTOP)
     if ( OrdersTotal () >= 1 )
       for (;;){
        magic++;
         for ( int i = OrdersTotal (); i > 0 ; i --)
           if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) != false )
             if (magic != OrderMagicNumber())
               return magic;
            
      }
     //Если нет открытых или отложенных ордеров то увеличиваем значение 
     //маджика, чтобы он равнялся единице и отправляем на запись в массив
     else if ( OrdersTotal () == 0 )
       return (magic + 1 );
   return magic;
}


Orada, tefsirde, sihirbazın diziye yazılmak üzere gönderildiği, bu yanıltıcı olmasın, sihirbaz geri dönerken, yazılır.
 
EVGENII SHELIPOV # :

Evet, belirli bir düşüş seviyesinde, kar sıfırlanır ve kayıpsız takaslar nedeniyle çirkin bir kayıp meydana gelir.

   double GetOrderSwap()
     {
       double order_swap = 0 ;
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
           {
             if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
              {
               if (OrderType() == OP_BUY)
                 {
                  order_swap += OrderSwap();
                 }
              }
           }
        }
       return (order_swap);
     }