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

 

Deneyimli programcıların yardımına ihtiyacınız var!

Herkese selam!

Çocuklar, yardımınıza ihtiyacımız var! Kendime bir danışman yazıyorum. Programlamada pek iyi değilim, o yüzden soruyorum. Genel olarak, piyasa emirlerine kilit koymak için bir test fonksiyonu yapıyorum. Tüm siparişler yapısal iki boyutlu bir diziye girilir. [0] dizisinin ilk indeksi (hücresi) baz (piyasa) emirleri, ikinci indeksi (hücre) [1] baz emirlerin kilitleridir. Bu nedenle, fonksiyon kilidin temel sıraya ayarlanıp ayarlanmadığını kontrol etmelidir ve - EVET ise, o zaman hiçbir şey yapmaz ve daha fazla çalışırız ve - HAYIR ise, ilgili kilidi ayarlamak için bir sinyal veririz. İşlevi yazdım, ancak bir şekilde çarpık çalışıyor. Yani örneğin bir Piyasa Al emri açılır, terminal bu emir tipinin AL değil SAT olduğunu gösterir ve bu nedenle bunun için bir kilit ayarlanması gerekir. Ve SATIŞ emirlerinde her şey düzgün çalışır. Hiçbir şey anlayamıyorum. Emirler dizilere doğru yazılmıştır. İlgili kontrolü yaptınız mı - her şey mükemmel. Dizideki tüm sipariş kriterleri doğru şekilde yansıtılır. Kodda bir hata bulmama yardım et veya bir şekilde işlevimi yeniden oluştur. fonksiyonu ekliyorum.

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool CheckOrders()                                                                               // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
  {                                                                                             // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
   int     TypeOrder;
   string Type          = "" ,
          OrderComm     = "" ;
   bool    OpenLockOrder = false ;                                                                 // Флаг на установку лок ордера      
  
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)                                                           // Выполняем перебор по рыночн. и отлож. ордерам
     {
       if (( OrderSelect (i, SELECT_BY_POS ) == true )                                                 // Если есть следующ.
      && ( OrderSymbol () == Symbol ()))                                                           // .. и наша вал.пара
        {
         OrderComm = OrderComment ();                                                             // Выбираем соответствующий комментарий ордера
         TypeOrder = OrderType ();                                                               // Выбираем соответствующий тип ордера                                                          
         for ( int n= 0 ; n<= 199 ; n++)                                                               // Выполняем прогон по массиву ордеров
            {  
             if ( StringFind (OrderComm, "BaseIndex #" + IntegerToString (n)+ "_" , 0 )>= 0 )                 // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
               {
                 if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_BUY )                       // Если находим и наш ордер в массиве является BUY
                  {
                   if (InfoOrderNew[ 1 ][n].TypeOrder == 1 || InfoOrderNew[ 1 ][n].TypeOrder == 5 )   // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
                     {
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 1 ) Type = "Sell" ;
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 5 ) Type = "SellStop" ;
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
                       break ;                                                                     // Если лок выставлен, то выходим из функции
                     }
                   else                                                                          // Если нет, то
                     {
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
                      OpenLockOrder = true ;                                                     // Даем сигнал на установку лока
                     }
                  }  
                 if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL )                       // Если наш ордер в массиве является SELL
                  {  
                   if (InfoOrderNew[ 1 ][n].TypeOrder == 0 || InfoOrderNew[ 1 ][n].TypeOrder == 4 )   // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
                     {
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 0 ) Type = "Buy" ;
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 4 ) Type = "BuyStop" ;
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
                       break ;                                                                     // Если лок выставлен, то выходим из функции
                     }
                   else                                                                          // Если нет, то
                    {
                     if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
                     OpenLockOrder = true ;                                                       // Даем сигнал на установку лока
                    }
                  }    
               }
            }
        }
     }
   return (OpenLockOrder);                                                                       // Передаем нашей функции полученное значение  
  }
 
Сергей :

Deneyimli programcıların yardımına ihtiyacınız var!

Herkese selam!

Çocuklar, yardımınıza ihtiyacımız var! Kendime bir danışman yazıyorum. Programlamada pek iyi değilim, o yüzden soruyorum. Genel olarak, piyasa emirlerine kilit koymak için bir test fonksiyonu yapıyorum. Tüm siparişler yapısal iki boyutlu bir diziye girilir. [0] dizisinin ilk indeksi (hücresi) baz (piyasa) emirleri, ikinci indeksi (hücre) [1] baz emirlerin kilitleridir. Bu nedenle, fonksiyon kilidin temel sıraya ayarlanıp ayarlanmadığını kontrol etmelidir ve - EVET ise, o zaman hiçbir şey yapmaz ve daha fazla çalışırız ve - HAYIR ise, ilgili kilidi ayarlamak için bir sinyal veririz. İşlevi yazdım, ancak bir şekilde çarpık çalışıyor. Yani örneğin bir Piyasa Al emri açılır, terminal bu emir tipinin AL değil SAT olduğunu gösterir ve bu nedenle bunun için bir kilit ayarlanması gerekir. Ve SATIŞ emirlerinde her şey düzgün çalışır. Hiçbir şey anlayamıyorum. Emirler dizilere doğru bir şekilde yazılmıştır. İlgili kontrolü yaptınız mı - her şey mükemmel. Dizideki tüm sipariş kriterleri doğru şekilde yansıtılır. Kodda bir hata bulmama yardım et veya bir şekilde işlevimi yeniden oluştur. fonksiyonu ekliyorum.

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool CheckOrders()                                                                               // Есть массив с базовыми ордерами, открытыми по рынку InfoOrderNew[0][200]
  {                                                                                             // Есть массив с лок ордерами, выставленными к базовым InfoOrderNew[1][200]
   int     TypeOrder;
   string Type          = "" ,
          OrderComm     = "" ;
   bool    OpenLockOrder = false ;                                                                 // Флаг на установку лок ордера      
  
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)                                                           // Выполняем перебор по рыночн. и отлож. ордерам
     {
       if (( OrderSelect (i, SELECT_BY_POS ) == true )                                                 // Если есть следующ.
      && ( OrderSymbol () == Symbol ()))                                                           // .. и наша вал.пара
        {
         OrderComm = OrderComment ();                                                             // Выбираем соответствующий комментарий ордера
         TypeOrder = OrderType ();                                                               // Выбираем соответствующий тип ордера                                                          
         for ( int n= 0 ; n<= 199 ; n++)                                                               // Выполняем прогон по массиву ордеров
            {  
             if ( StringFind (OrderComm, "BaseIndex #" + IntegerToString (n)+ "_" , 0 )>= 0 )                 // Ищем базовый ордер с индексом в комментарии, соответствующем номеру ячейки в массиве ордеров
               {
                 if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_BUY )                       // Если находим и наш ордер в массиве является BUY
                  {
                   if (InfoOrderNew[ 1 ][n].TypeOrder == 1 || InfoOrderNew[ 1 ][n].TypeOrder == 5 )   // Проверяем, выставлен ли к нему лок ордер (SELL или SELLSTOP) в массиве лок ордеров
                     {
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 1 ) Type = "Sell" ;
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 5 ) Type = "SellStop" ;
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
                       break ;                                                                     // Если лок выставлен, то выходим из функции
                     }
                   else                                                                          // Если нет, то
                     {
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Buy #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
                      OpenLockOrder = true ;                                                     // Даем сигнал на установку лока
                     }
                  }  
                 if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL )                       // Если наш ордер в массиве является SELL
                  {  
                   if (InfoOrderNew[ 1 ][n].TypeOrder == 0 || InfoOrderNew[ 1 ][n].TypeOrder == 4 )   // Проверяем, выставлен ли к нему лок ордер (BUY или BUYSTOP) в массиве лок ордеров
                     {
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 0 ) Type = "Buy" ;
                       if (InfoOrderNew[ 1 ][n].TypeOrder == 4 ) Type = "BuyStop" ;
                       if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " найден Lock-ордер " ,Type, " #" ,InfoOrderNew[ 1 ][n].TicketOrder, "." );
                       break ;                                                                     // Если лок выставлен, то выходим из функции
                     }
                   else                                                                          // Если нет, то
                    {
                     if (Debug) Print ( "Функция CheckOrders(): К ордеру Sell #" ,InfoOrderNew[ 0 ][n].TicketOrder, " не найден Lock-ордер. Необходимо его установить!" );
                     OpenLockOrder = true ;                                                       // Даем сигнал на установку лока
                    }
                  }    
               }
            }
        }
     }
   return (OpenLockOrder);                                                                       // Передаем нашей функции полученное значение  
  }

önce dene
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL )
başka koy

Veya çıktı günlüğünü gösterin.
 
Vladislav Andruschenko :

önce dene
if ((TypeOrder == InfoOrderNew[ 0 ][n].TypeOrder) == OP_SELL )
başka koy

Veya çıktı günlüğünü gösterin.

Koymak. Hiçbirşey değişmedi. Olay günlüğündeki girişler şunlardır:

2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SendMarketOrder(): Торговля разрешена, отправляем ордер...
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: open # 1 buy 0.10 GBPUSD at 1.23020 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SendMarketOrder(): Ордер отправлен успешно! Характеристики ордера: Buy # 1 ; Цена открытия: 0.0 ; Лот: 0.1 ; Стоплосс: 0.0 ; Тейкпрофит: 0.0 .
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: В работе функция ModifyOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Торговый поток свободен!
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: modify # 1 buy 0.10 GBPUSD at 1.23020 sl: 1.18020 tp: 1.23520 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция ModifyOrder(): Модификация ордера выполнена успешно!
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: В работе функция SetPendingOrder()
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Выставленная цена SellStop ордера удовлетворяет условиям брокера.
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: open # 2 sell stop 0.10 GBPUSD at 1.22020 ok
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция SetPendingOrder(): Отложенный ордер выставлен c 1 -й попытки! Характеристики ордера: SellStop # 2 ; Цена: 1.2202 ; Лот: 0.1 .
2017.01 . 15 18 : 23 : 51.062 2017.01 . 03 04 : 15 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Отложенный SellStop ордер успешно установлен!
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет # 2 ; Цена= 1.2202 ; Тип= 5 ; ячейка[ 0 ].
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 1 ; Цена= 1.2302 ; Тип= 0 ; ячейка[ 0 ].
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 2 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 1 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 1 .
2017.01 . 15 18 : 23 : 51.109 2017.01 . 03 04 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 1 не найден Lock-ордер. Необходимо его установить!
 
InfoOrderNew[ 1 ][n].TypeOrder dizisini doldurduğunuz işleve bakın
 
Vladislav Andruschenko :
InfoOrderNew[ 1 ][n].TypeOrder dizisini doldurduğunuz işleve bakın
Dizi doldurma işlevi, tüm verileri doğru şekilde döndürür. Hücrelerin nasıl doldurulduğunu dergiden gösterebilirim. Buy # 1 bir piyasa emri açıyoruz, bunun için bir SellStop # 2 kilidi yerleştirildi. Ardından, bir Sell#3 piyasa emri açılır ve BuyStop#4 kilidi de yanına yerleştirilir. Tüm bu eylemler olay günlüğüne yansıtılır. 1 Numaralı Al emrinin Satış emirleri döngüsüne nasıl girdiğini merak ediyorum?! Bu nasıl olabilir? Hata, buna karşılık gelen bir kilit sırası olmadığında ortaya çıkar. Ancak bu Satış#3 emri için geçerli değildir. Orada, yerel kontrol işlevi doğru sonucu verir. Burada, günlük raporuna kendiniz bir göz atın:
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет # 4 ; Цена= 1.2387 ; Тип ордера=BuyStop; ячейка[ 1 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 3 ; Цена= 1.2287 ; Тип ордера=Sell; ячейка[ 1 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива Lock-ордерами. Ордер Тикет # 2 ; Цена= 1.2202 ; Тип ордера=SellStop; ячейка[ 0 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Проверка заполнения массива обычными ордерами. Ордер Тикет # 1 ; Цена= 1.2302 ; Тип ордера=Buy; ячейка[ 0 ].
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество найденных ордеров = 4 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество рыночных ордеров = 2 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00   Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция OpenOrders(): Общее количество Lock-ордеров = 2 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00    Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 3 найден Lock-ордер BuyStop # 4 .
2017.01 . 15 23 : 09 : 48.234 2017.01 . 03 09 : 30 : 00    Multi-Trade System ver. 1.03 (SergeyOm) GBPUSD,M15: Функция CheckOrders(): К ордеру Sell # 1 не найден Lock-ордер. Необходимо его установить!
 
Sorunu aramaya katıldığınız için Vladislav Andruschenko'ya teşekkür ederiz! Bunu anladım gibi görünüyor. Kodu biraz değiştirmek zorunda kaldım ve her şey hemen çalıştı.
 
Сергей :
Sorunu aramaya katıldığınız için Vladislav Andruschenko'ya teşekkür ederiz! Bunu anladım gibi görünüyor. Kodu biraz değiştirmek zorunda kaldım ve her şey hemen çalıştı.

tam olarak değil

Sadece hafta sonu biraz düştüm. :-) Anladığın iyi oldu.

 
Vladislav Andruschenko :

tam olarak değil

Sadece hafta sonu biraz düştüm. :-) Anladığın iyi oldu.

Bir soru daha geldi:

Yapısal heterojen bir dizinin herhangi bir hücresindeki bilgiler nasıl sıfırlanır veya silinir? Mesele şu ki, yorumu sıraya göre değiştirdim ve bu sırayı yapısal dizinin hücresinden çıkarmam ve bu sırayı başka bir dizide tanımlamam gerekiyor. Sıradan bir dizide her şey az çok nettir, ancak yapısal olanlarda hangi operatörlerin veya işlevlerin çalıştığını veya hepsinin nasıl biçimlendirilmesi gerektiğini bilmiyorum? Ve önceki dolgu hakkındaki bilgileri kaydetmek ve ardından yeni dolgu ile karşılaştırmak için bir yapısal diziyi diğerine nasıl kopyalayabilirim? Bu konuda bilgisi olan varsa bana haber versin. Çok minnettar olacağım!

 
Fiyat etiketinde ( OBJ_ARROW_LEFT_PRICE ) fiyat yerine kendi metninizi göstermeniz mümkün müdür, varsa nasıl?
 
ilnur17021992 :
Fiyat etiketinde ( OBJ_ARROW_LEFT_PRICE ) fiyat yerine kendi metninizi göstermeniz mümkün müdür, varsa nasıl?
Mümkün değil. OBJ_TEXT fiyat etiketine benzer bir şey yazabilirsiniz.
Neden: