Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 713

 
7Konstantin7 :

Teşekkür ederim, üstesinden gelemem, belki birinin bu işlevde birkaç satır bırakacağını veya bir baykuş atabileceğini düşündüm, son versiyon. Zor görünmüyor, ama yine de pek kimse yardım edemez.

Sitede mql5'in verebileceği 4 kredi vardır) eğer katılımcılar arası transfer mümkünse.

1. Bir döngüdeki en erken açık pozisyonu bulup biletini iade edebilir misiniz?

 
artmedia70 :

1. Bir döngüdeki en erken açık pozisyonu bulup biletini iade edebilir misiniz?

Kodda nasıl olacağını hayal edemiyorum), ancak bir mucize eseri, danışmana bekleyen siparişlerin kaldırılmasını ekleyebildim, kodlarda güçlü değilim, sadece biraz.
 
7Konstantin7 :
Kodda nasıl olacağını hayal edemiyorum), ancak bir mucize eseri, danışmana bekleyen siparişlerin kaldırılmasını ekleyebildim, kodlarda güçlü değilim, sadece biraz.

Evet, sadece alın ve bir döngüde nasıl kapanacağını kontrol edin

1:

 int i, total = OrdersTotal (); bool rez;

for (i = total- 1 ; i >= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS) && другие нужные условия)
{
if (OrderType() < 2 )
rez = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 40 );
if (OrderType() > 1 )
rez = OrderDelete(OrderTicket());
}
}

2:

 //Всё тоже самое только поменяй направление цикла
for (i = 0 ; i < total; i++)
o zaman siparişlerin hangi sırayla kapatıldığını anlayacaksınız. Kontrol etmediğim için söyleyemem. Gerek yok. Ancak döngüyü ilk seçenekte olduğu gibi düzenlemek için nedenler var. ama bu başka bir konu, burada defalarca tartışıldı ve tüm bunları tekrarlamak gibi bir niyetim yok.
 
AlexeyVik :

Evet, sadece alın ve bir döngüde nasıl kapanacağını kontrol edin

1:

2:

o zaman siparişlerin hangi sırayla kapatıldığını anlayacaksınız. Kontrol etmediğim için söyleyemem. Gerek yok. Ancak döngüyü ilk seçenekte olduğu gibi düzenlemek için nedenler var. ama bu başka bir konu, burada defalarca tartışıldı ve tüm bunları tekrarlamak gibi bir niyetim yok.
Evet, sorun zaten çözüldü...
 
artmedia70 :
Evet, sorun zaten çözüldü...
Eh, PM'nizi okumuyorum ... ve neler olduğunu bilmiyorum.
 
AlexeyVik :
Eh, PM'nizi okumuyorum ... ve neler olduğunu bilmiyorum.
Evet okumuyor... Terliklerim nereye gitti???!!! ;)
 
artmedia70 :
Evet okumuyor... Terliklerim nereye gitti???!!! ;)

Ioan Vasilievich'in ne aldığını listelediğini hatırlıyor musun, ama Shpak almadı ... Yani ben senin terliklerinim.


Hoşçakal. Yatmaya gidiyorum.

 
AlexeyVik :

Ioan Vasilievich'in ne aldığını listelediğini hatırlıyor musun, ama Shpak almadı ... Yani ben senin terliklerinim.


Hoşçakal. Yatmaya gidiyorum.

Sonra gidip başkalarına terlik soracağım ... Sakin ol ...
 
AlexeyVik :

Evet, sadece alın ve bir döngüde nasıl kapanacağını kontrol edin

1:

2:

o zaman siparişlerin hangi sırayla kapatıldığını anlayacaksınız. Kontrol etmediğim için söyleyemem. Gerek yok. Ancak döngüyü ilk seçenekte olduğu gibi düzenlemek için nedenler var. ama bu başka bir konu, burada defalarca tartışıldı ve tüm bunları tekrarlamak gibi bir niyetim yok.

Teşekkürler, sorunu çözdüm zaten.

artmedia70 :

Beni işe göndereceklerini düşünmüştüm) Yardımın için teşekkür ederim.

 

Merhaba! 711. sayfada buna benzer bir soru sormuştum ne yazık ki kimse cevap vermemiş, belki şimdi birileri...

Beş tabelada karşı siparişleri kapatırken bir sorunla karşılaştım. Sonuç olarak, toplam kâra ulaşıldığında kapatmam gerekiyor, diyelim ki satın alma başına 20 sipariş ve köy başına 33 sipariş. Aynı zamanda 20 alış ve 20 satış emrini OrderCloseBy() fonksiyonu ile kapatmak ve kalan 13 satış emrini OrderClose() fonksiyonu ile kapatmak istiyorum.

4. hanede sabit bir forma sahipsek kapanmada sorun yok ve OrderCloseBy() fonksiyonunu kullanırken formayı kaydediyoruz. Beş basamaklı spread'de spread dalgalanıyor, bu yüzden sanırım toplam kâra ulaşıldığında siparişler kapatılmıyor, ancak logda OrderCloseBy()'ye yemin ediyor. Aynı zamanda, test cihazında çalıştırırsanız, her şey normal şekilde kapanır.

Tek yönde verilen siparişler, toplam kâra ulaşıldığında sorunsuz bir şekilde kapatılır.

Bu sorunla karşılaşan var mı ve çözümleri nelerdir.

İşte emirleri kapatmak için fonksiyonlar.

Ayrıca, OrderCloseBy () işlevi beş basamaklı bir sayı üzerinde çalışır mı?

   //-----------------------------------------------------------------------
   // функция подсчета открытых ордеров
   //-----------------------------------------------------------------------

   void OrderOpen()
   {
     Orders_BUY= 0 ; Orders_SELL= 0 ;
     for ( int a= 0 ; a<= OrdersTotal (); a++)
     {
       if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_BUY && OrderMagicNumber() == Magic) Orders_BUY=Orders_BUY+ 1 ;
       if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_SELL && OrderMagicNumber() == Magic) Orders_SELL=Orders_SELL+ 1 ;

       //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY) Orders_BUY=Orders_BUY+1;
       //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL) Orders_SELL=Orders_SELL+1;
      ProfitAll=ProfitAll+OrderProfit()+OrderSwap()+OrderCommission();
     }
   }
  
   //-----------------------------------------------------------------------
   // функция закрытия ордеров сначала разнонаправленных
   //-----------------------------------------------------------------------
   void ClosePos()
   {
   int ticket_1= 0 , ticket_2= 0 ;
    
     for ( int a= 0 ; a<= OrdersTotal (); a++)
       {
         if ( OrderSelect (a,SELECT_BY_POS,MODE_TRADES) == true ) 
            {
             if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic) // проверка по символу и магику
               {
                 if (OrderType() == OP_BUY) ticket_1 = OrderTicket();
                 if (OrderType() == OP_SELL) ticket_2= OrderTicket();   
               } 
            }
        }    
       if (ticket_1 != 0 && ticket_2 != 0 ) {           // если найдены разнонаправленные ордера
      res = OrderCloseBy(ticket_1,ticket_2, clrRed ); }   // закроем их
       
       if (ticket_1 == 0 && ticket_2 != 0 ) {  CloseOrder_by_type(OP_SELL, Symbol ());  }
       if (ticket_1 != 0 && ticket_2 == 0 ) {  CloseOrder_by_type(OP_BUY, Symbol ());  }
    
    }

//---- Закрытие ордера по типу и комментарию ----//
void CloseOrder_by_type( int type, string sym)
{
   for ( int k= OrdersTotal ()- 1 ;k>= 0 ;k--)
   {
    
       if ( OrderSelect (k,SELECT_BY_POS,MODE_TRADES)== true )
       {
           
       if (type == OrderType() && sym==OrderSymbol()&& OrderMagicNumber()==Magic)
         if (OrderType()<= 1 ){ res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 350 );}
         else { res = OrderDelete(OrderTicket());}
         if (!res)
               Print ( "Ошибка закрытия ордера. Код ошибки=" , GetLastError ());
             else
               Print ( "ордер успешно закрыт." );   
           
       }
   }
}