Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1282

 
Vladimir Karputov :

Sorun danışmanda. Bu arada, sanal barındırma dll için kurallar yasaktır.

Her şey daha önce harika çalıştı. Ücretsiz barındırmayı denemeliydim . Genel olarak, metakotalara 15 dolar verdi)))

Cevap için teşekkürler!

 

EA, piyasa emirlerini açar ve ardından bunları değiştirir, TP ve SL'yi ayarlar. Test cihazı kontrolü. İlk sıra gerekli parametrelerle değiştirilir. Aynı yönde birincisi aktif olarak ikinci bir emir açılır, ancak birincisi ikincisinin parametrelerine göre değiştirilir ve ikincisi sıfır SL ve TP ile kalır. Aynı zamanda, - SL == 0 ve TP == 0 ise ve bir nedenden dolayı değiştiriliyorsa, bu göstergelerin artık sıfır olmadığı durumda. Niye ya? Yinelemeyi baştan sona değiştirmek hiçbir şeyi değiştirmez.

Ve ilerisi. Test cihazında, kâr sütununda, iki açık emirle, emirlerin karı tam tersi şekilde gösterilir - ikincisinin karı ilk açık emir için gösterilir ve bunun tersi de geçerlidir. Niye ya?

Ve ilerisi. İki ekstremum için bir trend çizgisi çizmeniz gerekiyor. Çizgi, çubuktan çubuğa çizilir, ancak bir saplamadır. Bu bir trend çizgisi değil, sadece bir segment ama çizgiyi tam olarak görmek istiyorum.

 void PositionModifiSell()
{
   int     i;
   double sl    = 0 ; 
   double tp    = 0 ;  
   int     total = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );                
                                    
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кода: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
               }
            }
         }
      }
   }
}
 
Youri Lazurenko :

EA, piyasa emirlerini açar ve ardından bunları değiştirir, TP ve SL'yi ayarlar. Test cihazı kontrolü. İlk sıra gerekli parametrelerle değiştirilir. Aynı yönde birincisi aktif olarak ikinci bir emir açılır, ancak birincisi ikincisinin parametrelerine göre değiştirilir ve ikincisi sıfır SL ve TP ile kalır. Aynı zamanda, - SL == 0 ve TP == 0 ise ve bir nedenden dolayı değiştiriliyorsa, bu göstergelerin artık sıfır olmadığı durumda. Niye ya? Yinelemeyi baştan sona değiştirmek hiçbir şeyi değiştirmez.

Ve ilerisi. Test cihazında, kâr sütununda, iki açık siparişle, siparişlerin karı tam tersi şekilde gösterilir - ilk açık sipariş, ikincinin kârına sahiptir ve bunun tersi de geçerlidir. Niye ya?

Ve ilerisi. İki ekstremum için bir trend çizgisi çizmeniz gerekiyor. Çizgi, çubuktan çubuğa çizilir, ancak bir saplamadır. Bu bir trend çizgisi değil, sadece bir segment ama çizgiyi tam olarak görmek istiyorum.

1. SİPARİŞLER DEĞİL, POZİSYONLAR

2. Sorunuzu formüle edin - anlatımı izlerken soruyu ve "nasıl çalışmasını istiyorsunuz" algoritmasını görmedim.

 
Vladimir Karputov :

1. SİPARİŞLER DEĞİL, POZİSYONLAR

2. Sorunuzu formüle edin - anlatımı izlerken soruyu ve "nasıl çalışmasını istiyorsunuz" algoritmasını görmedim.

Ve mql5 dilinde olduğu için konumların ne olduğu açıktır. Ve kodda konumdur. Soru, koşul şunları belirtse de, neden ilk konumun değiştirildiği ve son konumun değiştirilmediğidir:

 if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )
 
Youri Lazurenko :

Ve mql5 dilinde olduğu için konumların ne olduğu açıktır. Ve kodda konumdur. Soru, koşul şunları belirtse de, neden ilk konumun değiştirildiği ve son konumun değiştirilmediğidir:

soru nerede??? Algoritmayı tanımlayın "Algoritmanın böyle olmasını istiyorum ...".

 
Vladimir Karputov :

soru nerede??? Algoritmayı tanımlayın "Algoritmanın böyle olmasını istiyorum ...".

Trend çizgisi kırıldığında ve çubuk çizginin üstünde/altında kapandığında sıfır SL ve TP ile bir pozisyon açılır. Açıldıktan hemen sonra gerekli TP ve SL ayarlanır (konum değiştirilir). Koşul ihlal edilirken neden son konum değiştirilmiyor, önceki konum değiştiriliyor:

 if (m_position.StopLoss() == 0 && m_position.TakeProfit() == 0 )

Şimdi net? Pozisyonun açılış saatini koşula girseniz bile hiçbir şey değişmez. Pozisyon sayısında bir sınırlama yoktur.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

Trend çizgisi kırıldığında ve çubuk çizginin üstünde/altında kapandığında sıfır SL ve TP ile bir pozisyon açılır. Açıldıktan hemen sonra gerekli TP ve SL ayarlanır (konum değiştirilir). Koşul ihlal edilirken neden son konum değiştirilmiyor, önceki konum değiştiriliyor:

Şimdi net? Pozisyonun açılış saatini koşula girseniz bile hiçbir şey değişmez. Pozisyon sayısında bir sınırlama yoktur.

Değişiklik sırasında yeni pozisyonun zaten mevcut olduğundan emin misiniz? (bir ticaret talebi göndermek henüz bir pozisyon olduğunu garanti etmez).

Bir koşul girerken (SL == 0.0 ve TP == 0.0) pozisyon biletini yazdırın.

 
Vladimir Karputov :

Değişiklik sırasında yeni pozisyonun zaten mevcut olduğundan emin misiniz? (bir ticaret talebi göndermek henüz bir pozisyon olduğunu garanti etmez).

Koşul girerken (SL == 0.0 ve TP == 0.0) pozisyon biletini yazdırın.

Evet, ikinci pozisyon zaten orada. Bir dergi okuyorum. Satış yöntemi başarıyla üretildi, kod 10009. (Bilet #3). Ve sonra değişiklik takip eder, sadece 2 numaralı bilete sahip olan ve aynı zamanda başarıyla tamamlanan pozisyon (değişiklik, vurgularım, koşullara göre gerçekleşmemelidir, SL artık 0'a eşit değildir!).

Zaten yazılmış, hem açılış saatine göre hem de biletle denenmiş, bir incir değil, önceki konumu değiştiriyor. Örneğin:

 void PositionModifiSell()
{
   int       i;
   datetime Time;
   double    sl    = 0 ; 
   double    tp    = 0 ;  
   datetime time  = 0 ;
   int       total = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               Time = m_position.Time();
               
               if (Time > time)
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );
                  
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кода: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
                  time = Time;
               }
            }
         }
      }
   }
}
//------------ или
void PositionModifiSell()
{
   int       i;
   ulong   Ticket;
   double sl     = 0 ; 
   double tp     = 0 ;  
   ulong   ticket = 0 ;
   int     total  = PositionsTotal ();
   
   for (i = total- 1 ; i >= 0 ; i--)
   {
       if (m_position.SelectByIndex(i))                            
      {
         if (m_position. Symbol () == Symbol () && m_position.Magic() == Magic)
         {
             if (m_position.PositionType() == POSITION_TYPE_SELL )
            {
               Tiсket = m_position.Ticket();
               
               if (ticket != Ticket)
               {
                  sl = NormalizeDouble ( iHigh ( NULL , 0 , ExtrimUp()) + VS* _Point , _Digits );
                  
                   if (PriceCurrentDw1() - PriceDwHigh() < LastPriceOpenOrder() - (sp+PW)* _Point )
                  {
                     tp = NormalizeDouble (PriceCurrentDw1() - PriceDwHigh(), _Digits );
                  }
                   else
                     tp = NormalizeDouble (bid - TP* _Point , _Digits );
                  
                   if (!m_trade.PositionModify( _Symbol , sl, tp))
                  {
                     Print ( "Метод PositionModify() потерпел поражение. Код возврата = " , m_trade.ResultRetcode(),
                           ". Описание кодa: " , m_trade.ResultRetcodeDescription());
                  }
                   else
                  {
                     Print ( "Метод PositionModify() исполнен успешно. Код возврата = " , m_trade.ResultRetcode(),
                           " (" , m_trade.ResultRetcodeDescription(), ")" );
                  }
                  ticket = Ticket;
               }
            }
         }
      }
   }
}
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Свойства позиций - Торговые константы - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Youri Lazurenko :

Evet, ikinci pozisyon zaten orada. Bir dergi okuyorum. Satış yöntemi başarıyla üretildi, kod 10009. (Bilet #3). Ve ardından değişiklik, sadece 2 numaralı bilet ile aynı zamanda başarıyla tamamlanan pozisyon takip eder.

Zaten yazılmış, hem açılış saatine göre hem de biletle denenmiş, bir incir değil, önceki konumu değiştiriyor. Örneğin:


Yani: pozisyonun görünümünün sonucunu kontrol etmiyorsunuz ve bileti yazdırmak bile istemiyorsunuz. Bu durumda, tam kodu ekleyin (düğmesini kullanarak ekleyin Dosya eki )

 
Vladimir Karputov :

Yani: pozisyonun görünümünün sonucunu kontrol etmiyorsunuz ve bileti yazdırmak bile istemiyorsunuz. Bu durumda, tam kodu ekleyin (düğmeyi kullanarak ekleyin)

Bilet basmak bile istemiyorsunuz - anlamadım. İşte günlük özeti.

2021.02.01 12:54:55.338 2018.01.02 17:00:00 piyasa satışı 0.01 EURUSD (1.20384 / 1.20402)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 anlaşma #2 1.20384'ten 0.01 EURUSD satıldı (2. sıraya göre)

2021.02.01 12:54:55.338 2018.01.02 17:00:00 anlaşma yapıldı [#2, 1.20384'ten 0.01 EURUSD satmak]

2021.02.01 12:54:55.338 2018.01.02 17:00:00 emir, 1.20384'te 0.01 satış gerçekleştirdi [#2, 1.20384'te 0.01 EURUSD sat]

2021.02.01 12:54:55.344 2018.01.02 17:00:00 CTrade::OrderSend: piyasa satışı 0.01 EURUSD [1.20384 tarihinde yapıldı]

2021.02.01 12:54:55.344 2018.01.02 17:00:00 Sell() yöntemi başarılı oldu. Dönüş kodu = 10009 (1.20384'te yapıldı)

2021.02.01 12:54:55.344 2018.01.02 17:00:00 pozisyon değiştirildi [#2 sat 0.01 EURUSD 1.20384 sl: 1.20813 tp: 1.20013]

2021.02.01 12:54:55.346 2018.01.02 17:00:00 CTrade::OrderSend: #2 EURUSD pozisyonunu değiştir (sl: 1.20813, tp: 1.20013) [bitti]

2021.02.01 12:54:55.346 2018.01.02 17:00:00 PositionModify() yöntemi başarılı oldu. Dönüş kodu = 10009 (bitti)

================================================= ================================================== ======== bölünmüş, ikinci pozisyonun görünümü

2021.02.01 12:55:48.819 2018.01.03 09:00:00 piyasa satışı 0.01 EURUSD (1.20442 / 1.20460)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 anlaşma #3 1.20442'den 0.01 EURUSD satıldı (3. sıraya göre)

2021.02.01 12:55:48.819 2018.01.03 09:00:00 anlaşma yapıldı [#3 1.20442'den 0.01 EURUSD satmak]

2021.02.01 12:55:48.819 2018.01.03 09:00:00 emir, 1.20442'de 0.01 satış gerçekleştirdi [#3, 1.20442'de 0.01 EURUSD sat]

2021.02.01 12:55:48.821 2018.01.03 09:00:00 CTrade::OrderSend: piyasa satışı 0,01 EURUSD [1.20442'de yapıldı]

2021.02.01 12:55:48.821 2018.01.03 09:00:00 Sell() yöntemi başarılı oldu. Dönüş kodu = 10009 (1.20442'de yapıldı)

================================================= ================================================== ================= başarıyla açılan bir pozisyon, değişiklikten sonra, ancak önceki siparişin

2021.02.01 12:55:48.821 2018.01.03 09:00:00 pozisyon değiştirildi [#2 sat 0.01 EURUSD 1.20384 sl: 1.20663 tp: 1.20154]

2021.02.01 12:55:48.823 2018.01.03 09:00:00 CTrade::OrderSend: #2 EURUSD pozisyonunu değiştir (sl: 1.20663, tp: 1.20154) [bitti]

2021.02.01 12:55:48.823 2018.01.03 09:00:00 PositionModify() yöntemi başarılı oldu. Dönüş kodu = 10009 (bitti)


Sell'deki pozisyonu değiştirmek için tam kodu seçeneklerle birlikte gönderdim.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...