Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 29

 
yaaarik777 :

Herkese iyi günler! Lütfen sipariş silme işlemini danışmana nasıl koyacağımı söyleyin.

Durum şu:

farklı yönlere bekleyen 2 emir veririz, biri tetiklenir, diğeri silinir ve artık verilmez.

Yardımın için çok minnettar olacağım.

Teşekkür ederim.

Örneğin:

//-------------------------------------------------------------------+
//   удаляет отложенные ордера по type                               +
//+------------------------------------------------------------------+

void DeleteOrders( int type)
{
   int cnt = OrdersTotal ();
   for ( int i=cnt- 1 ; i>= 0 ; i--) {
         if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
         //По желанию
         if ( OrderSymbol () != Symbol ()) continue ;
         //По желанию
         if ( OrderMagicNumber () != mn) continue ;
        
         if ( OrderType () != type) continue ;
        
         if (type == OP_BUYSTOP || type == OP_SELLSTOP )
            {
             bool Del_1 = OrderDelete ( OrderTicket ());
               if (!Del_1)
                   Print ( "Ошибка удаления ордера. Код ошибки=" , GetLastError ());
               else
                   Print ( "Ордер успешно удален." );
            }
         if (type == OP_BUYLIMIT || type == OP_SELLLIMIT )
            {
             bool Del_2 = OrderDelete ( OrderTicket ());  
               if (!Del_2)
                   Print ( "Ошибка удаления ордера. Код ошибки=" , GetLastError ());
               else
                   Print ( "Ордер успешно удален." );
            }
  }
}
//+------------------------------------------------------------------+
 

Pekala, ondan önce, bir pozisyonun ortaya çıktığını belirleyelim ve fazladan bir sipariş vermenin zamanı geldi.

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 16.06.2008                                                     |
//|  Описание : Удаление ордеров, противоположных позиции                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders( string sy= "" , int op=- 1 , int mn=- 1 ) {
   bool eb, es;

   switch (op) {
     case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break ;
     case OP_SELL : es=ExistPositions(sy, OP_SELL , mn); break ;
     default :      eb=ExistPositions(sy, OP_BUY , mn);
                  es=ExistPositions(sy, OP_SELL , mn); break ;
  }

   if (eb) {
    DeleteOrders(sy, OP_SELLLIMIT , mn);
    DeleteOrders(sy, OP_SELLSTOP , mn);
  }
   if (es) {
    DeleteOrders(sy, OP_BUYLIMIT , mn);
    DeleteOrders(sy, OP_BUYSTOP , mn);
  }
}
 
Vladimir Zubov :

Örneğin:

//-------------------------------------------------------------------+
//   удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type     +
//+------------------------------------------------------------------+

void DeleteOrders( int type)
{
   int cnt = OrdersTotal ();
   for ( int i=cnt- 1 ; i>= 0 ; i--) {
         if (! OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) continue ;
         //По желанию
         if ( OrderSymbol () != Symbol ()) continue ;
         //По желанию
         if ( OrderMagicNumber () != mn) continue ;
        
         if ( OrderType () != type) continue ;
        
         if (type == OP_BUYSTOP || type == OP_SELLSTOP )
            {
             bool Del_1 = OrderDelete ( OrderTicket ());
               if (!Del_1)
                   Print ( "Ошибка удаления ордера. Код ошибки=" , GetLastError ());
               else
                   Print ( "Ордер успешно удален." );
            }
         if (type == OP_BUYLIMIT || type == OP_SELLLIMIT )
            {
             bool Del_2 = OrderDelete ( OrderTicket ());  
               if (!Del_2)
                   Print ( "Ошибка удаления ордера. Код ошибки=" , GetLastError ());
               else
                   Print ( "Ордер успешно удален." );
            }
  }
}
//+------------------------------------------------------------------+

Tür ayrımı nedir? Ne veriyor? Böyle yazılırsa performansta bir fark olur mu?

if (type > 1 && type < 6 )
   {
     bool Del_1 = OrderDelete ( OrderTicket ());
     if (!Del_1)
     Print ( "Ошибка удаления ордера. Код ошибки=" , GetLastError ());
     else
     Print ( "Ордер успешно удален." );
   }
 
iPhone'daki MT4 ve MT5'teki çubuklar neden farklı? Barların açılış ve kapanış saatleri aynı olmasına rağmen. Bu açıkça araya giriyor çünkü hat dün MT4'te saat 14:00'te kırılmadı.
Dosyalar:
image.png  82 kb
image.png  81 kb
 
Tünaydın! lütfen söyle bana, android için mt4 636 sürümünü indirdim ama broker listesini göremiyorum. Terminal sürümü artık desteklenmiyor mu?((Destekleniyorsa, çalışan sürümü nereden indirebilirim?)
 
MetaGSss :
iPhone'daki MT4 ve MT5'teki çubuklar neden farklı? Barların açılış ve kapanış saatleri aynı olmasına rağmen. Bu açıkça araya giriyor çünkü hat dün MT4'te saat 14:00'te kırılmadı.
Fiyatın nereye gideceğini önceden bilmenizi istiyorlar.
 
MetaGSss :
iPhone'daki MT4 ve MT5'teki çubuklar neden farklı? Barların açılış ve kapanış saatleri aynı olmasına rağmen. Bu açıkça araya giriyor çünkü hat dün MT4'te saat 14:00'te kırılmadı.
tabii ki aşırı insanlar için yayıldı)))
 
MetaGSss :
iPhone'daki MT4 ve MT5'teki çubuklar neden farklı? Barların açılış ve kapanış saatleri aynı olmasına rağmen. Bu açıkça araya giriyor çünkü hat dün MT4'te saat 14:00'te kırılmadı.
karakterler de biraz farklıdır)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки " Print ( "..." в таком виде:  

bool PlaySound(

string ödeme // dosya adı

);

... yoksa o da bir şekilde dönüştürülmüş mü?

duyuru bool PlaySound( program başlığında - set dosyasında sesi açıp kapatma olanağına sahip olacaksınız extern bool Play = TRUE;

sonra, Baskı ne yazdıracak? Ve hangi koşulda?

Bu eylemin anlamı nedir? Bir siparişi kapatırken bir ses çalın ve bir yorum yazın (TP veya SL ile)?






Ayrıntılı ve anlaşılır cevap için A1exPit'e teşekkürler... "Eylemin anlamı", "TakeProfit ve Stoploss tarafından verilen kapanış emirleri" olaylarını seslendirmektir = her birinin kendi sesi vardır...
 

Selamlar. Buralara sordum ama henüz cevap bulamadım. Söyle bana, lütfen, neden böyle bir kayıtla

if (x!=maxpr1){x=maxpr1; OrderDelete(biletD);}

if (z!=minpr1){z=minpr1; OrderDelete(ticketUP);}

sürekli hata veriyor

: OrderDelete işlevi için geçersiz bilet

: Sipariş Silme hatası 4051

kılavuza göre o

Geçersiz fonksiyon parametre değeri

parametreler aynı gibi görünse de.

Her ne kadar koşulu kaldırırsanız ve yalnızca bırakırsanız

OrderDelete(biletD);

OrderDelete(ticketUP);

bu başarıyla siler (ancak bir şartla bu gereklidir). Neyi yanlış yapıyorum? İşte tam olarak:

https://www.mql5.com/en/forum/160683/page31#comment_3911573

EA, son X çubuğu için minimum ve maksimum hesaplar ve bunlara siparişler verir. Ayrıca, maksimum düşüş veya minimum artış olduğunda, ilgili siparişi silmeniz ve yeni verileri kullanarak açmanız gerekir.

Çalışmaya yeni başladım ve silme seçeneği, değişiklik değil, işlevin uygulamasını incelemek içindi, neden işe yaramadığı sorusu ortaya çıktı.