[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 858

 

Bu basit bir soru, ama hiçbir şey düşünemiyorum.

Belirli bir zamanda 4 açık pozisyon vardır. Her şeyi şöyle kapatmaya çalışıyorum:

 for ( int i= 0 ;i< OrdersTotal ();i++)
  {
    if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {
        if (OrderType()==OP_BUY)
           OrderClose(OrderTicket(),OrderLots(),Bid, 3 , White );
        if (OrderType()==OP_SELL)
           OrderClose(OrderTicket(),OrderLots(),Ask, 3 , White );
      }
  }

Ama hepsi kapalı değil, birinden sonra. Aslında, diyelim ki şu sayılara sahipler: 2,4,6,7. Ve böylece 2. ve 6. pozisyonlar kapalı.

Amaç ne?

 
usver :

Bu basit bir soru, ama hiçbir şey düşünemiyorum.

Belirli bir zamanda 4 açık pozisyon vardır. Her şeyi şöyle kapatmaya çalışıyorum:

Ama hepsi kapalı değil, birinden sonra. Aslında, diyelim ki şu sayılara sahipler: 2,4,6,7. Ve böylece 2. ve 6. pozisyonlar kapalı.

Amaç ne?


yani pozisyon kapatıldıktan sonra OrderSelect(i,SELECT_BY_POS,MODE_TRADES) içindeki numaralandırma değişir ve tümü aynı anda kapatılamaz

Not: I. Kim'in işlevleri bana çok yardımcı oldu, biraz değiştirdim - fazladan parantezleri kaldırdım ve bir satıra çektim:

 //+------------------------------------------------------------------+
void CloseAllFirstProfit() {
   int i, k= OrdersTotal ();
   for (i=k- 1 ; i>= 0 ; i--) if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) if (OrderProfit()+OrderSwap()> 0 ) ClosePosBySelect();
   k= OrdersTotal ();
   for (i=k- 1 ; i>= 0 ; i--) if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) if (OrderType()==OP_BUY || OrderType()==OP_SELL) ClosePosBySelect();
}
//+------------------------------------------------------------------+
void ClosePosBySelect() {
   if (OrderType()==OP_BUY)  OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10 , CLR_NONE );
   if (OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 10 , CLR_NONE );
}
//+------------------------------------------------------------------+

forumda arama yapın - orijinalleri bulacaksınız

 
IgorM :


yani pozisyon kapatıldıktan sonra OrderSelect(i,SELECT_BY_POS,MODE_TRADES) içindeki numaralandırma değişir ve tümü aynı anda kapatılamaz

Not: I. Kim'in işlevleri bana çok yardımcı oldu, biraz değiştirdim - fazladan parantezleri kaldırdım ve bir satıra çektim:

forumda arama yapın - orijinalleri bulacaksınız


İpucu ve örnek için çok teşekkürler. Bunu halledeceğim.

Bu arada bir soru daha soracağım.

Görev şu şekildedir: Daha sonra zararı durdur ile kapatılan gelecekteki siparişi öncekiyle karşılaştırmak için hangi tür siparişin kapatıldığını, durdurma kaybı tarafından tetiklendiğini belirlemeniz gerekir (okuma - türlerini karşılaştırın). Belgelere baktığımda, son olayın ele alınmasıyla ilgili hiçbir şey bulamadım.

Bu noktada, belirtilen sınıra ulaşıldığında bir siparişi kapatmak olarak bu işlemi uyguladım (Bid-OrderOpenPrice()>=TP*Point). Bu bana, son kapatılan siparişin türünü bir değişkene kaydetme ve bir sonraki kapanışta, onu henüz kapanan siparişle karşılaştırma fırsatı verdi ( if(type==OrderType()) ). Testte her şey yolunda gidiyor, ancak yine de bunu durdurma kayıplarını kullanarak uygulamak istiyorum.

OrderSelect() ve MODE_HISTORY argümanını kullanarak geçmişten kapalı bir sipariş seçmeye çalıştım. Çünkü emirleri kapatmak için herhangi bir koşul yoktur, o zaman OrdersTotal() değişkenini değiştirmek, tıpkı bir stop loss'u tetiklemek gibi düşünülebilir. Ancak bir sorunla karşılaştım - son kapatılan siparişin numarasını belirleyemiyorum (çünkü sayıları sürekli değişiyor) veya nasıl yapacağımı bulamadım.

Soru şudur: Zararı durdur kullanarak bunu nasıl uygulayabilirim? Belki çok daha kolay yollar vardır? Peki, düşünce yönü doğruysa, son kapalı düzen nasıl bulunur?

 
IgorM :


yani pozisyon kapatıldıktan sonra OrderSelect(i,SELECT_BY_POS,MODE_TRADES) içindeki numaralandırma değişir ve tümü aynı anda kapatılamaz

Not: I. Kim'in işlevleri bana çok yardımcı oldu, biraz değiştirdim - fazladan parantezleri kaldırdım ve bir satıra çektim:

forumda arama yapın - orijinalleri bulacaksınız

Şey, dedin ki ... hepsi bir yığın halinde
https://docs.mql4.com/ru/trading/OrderSelect
 
usver :

Bu basit bir soru, ama hiçbir şey düşünemiyorum.

Belirli bir zamanda 4 açık pozisyon vardır. Her şeyi şöyle kapatmaya çalışıyorum:

Ama hepsi kapalı değil, birinden sonra. Aslında, diyelim ki şu sayılara sahipler: 2,4,6,7 . Ve böylece 2. ve 6. pozisyonlar kapalı.

Amaç ne?

Rakamları sırayla mı söylüyorsunuz? yoksa biletler mi?

 
abolk :

Rakamları sırayla mı söylüyorsunuz? yoksa biletler mi?


zaten kafam karıştı Bunlar bilet, ama durumu açıklığa kavuşturmak için getirdim. Birinde kapanıyorlar.
 

Yaşasın, her şey benim için çalıştı !!!


Çok teşekkür ederim Victor bir hata yapmışım indikatörün adını yanlış yazmışım.

 
abolk :
Şey, dedin ki ... hepsi bir yığın halinde
https://docs.mql4.com/ru/trading/OrderSelect


bir grup emri değiştirmeye/kaldırmaya çalışın - görev basittir, ancak OrderSelect(i, SELECT_BY_PO S,MODE_TRADES) tarafından bir sipariş seçerken siparişlerin numaralandırılmasının doğrudan gövdede değiştiği gerçeğiyle karşılaştım. döngü ve zaten değiştirilmiş olanı birkaç kez (almadan) değiştirdiği ortaya çıktı - hata 1, bu yüzden usver'in benzer bir sorunu olduğunu varsaydım

söyle bana, plz - birkaç çubuğun kapanmasından sonra göstergenin nasıl yeniden hesaplanmasını sağlayacağım, örneğin: Göstergenin her 5 yeni çubukta bir yeniden çizilmesini / yeniden hesaplanmasını istiyorum

 
IgorM :


söyle bana, plz - birkaç çubuğun kapanmasından sonra göstergenin nasıl yeniden hesaplanmasını sağlayacağım, örneğin: Göstergenin her 5 yeni çubukta bir yeniden çizilmesini / yeniden hesaplanmasını istiyorum

Programlamada iyisin.

Bu mantıklı bir problemdir ve çözmek için çok okuryazar olmanıza gerek yoktur. Kafanla düşün.

Davalar farklıdır. Yeniden çizim tam olarak nerede olmalı, hangi TF'de, yeniden çizim nasıl olmalı vb. Sorunuza nasıl cevap verebilirim.

Çubuğun saatini hatırlayın ve beş çubuktan sonra bu zamanı sıfırlayın ve tekrar hatırlayın. Saati sıfırlarken, yeniden hesaplama için bir koşul ayarlayabilirsiniz. iTime (NULL,0,0) işlevi yardımcı olacaktır. Gerisi tamamen mantık.

 
IgorM :


söyle bana, plz - birkaç çubuğun kapanmasından sonra göstergenin nasıl yeniden hesaplanmasını sağlayacağım, örneğin: Göstergenin her 5 yeni çubukta bir yeniden çizilmesini / yeniden hesaplanmasını istiyorum


Yöntem muhtemelen en güvenilir değildir, ancak diyelim ki fikri denemek (taslak sürüm) gayet iyi sonuç verecektir.

Bars değişkenini kullanın ve değişimini izleyin. 5 arttı, hatırlandı vb.

Neden: