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

 

Bekleyen bir siparişin tetiklendiği anı belirlemenizi sağlayan böyle bir danışman var.

https://www.mql5.com/en/code/17610

Bununla, bir SELL_STOP sipariş bileti alıyorum

Kodu buna göre değiştirdi

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (bln_find_order) // true -> you should look for a order
     {
       static long counter= 0 ;
       Print ( "Attempt number " ,counter);
       ResetLastError ();
       if ( HistoryOrderSelect (ul_find_order))
        {
         long type_order= HistoryOrderGetInteger (ul_find_order, ORDER_TYPE );
         if (type_order== ORDER_TYPE_SELL_STOP )
           {
             Print ( "The pending order " ,ul_find_order, " is found! Type of order is " ,
                   EnumToString (( ENUM_ORDER_TYPE ) HistoryOrderGetInteger (ul_find_order, ORDER_TYPE )));
            bln_find_order= false ;         // true -> you should look for a order
            counter= 0 ;
             return ;
           }
         else
           {
             Print ( "The order " ,ul_find_order, " is not pending" );
            bln_find_order= false ;         // true -> you should look for a order
             return ;
           }
        }
       else
        {
         Print ( "Order " ,ul_find_order, " is not find, error#" , GetLastError ());
        }
      counter++;
     }
  }

Her şey belli bir noktaya kadar iyidir. Tarihte başka bir sipariş türü görünene kadar.

Örneğin SELL_LIMIT.

MİSAL

Geçmişte SELL_LIMIT görünür görünmez, artık son SELL_STOP biletini alamıyorum.

EA bir hata atar.

9. sipariş beklemede değil

Tarihte SELL_STOP olmasına rağmen

Ve 7'sinde bir bilete ihtiyacım olursa, 9'un bununla ne ilgisi var?

Görünüşe göre danışman gerekli düzeni tüm tarihte değil, yalnızca sonuncusunda arıyor.
TypePendingOrderTriggered
TypePendingOrderTriggered
  • oylar: 21
  • 2017.02.14
  • Vladimir Karputov
  • www.mql5.com
()   {    (bln_find_order)      {        counter=;       (,counter);       ();         {          (type_order== || type_order== ||             type_order== ||type_order==)            {             (,ul_find_order,,                   (()(ul_find_order,)));             bln_find_order=;                     counter=;             ;            }...
 

Merhaba. StopLoss_= 0 ise hata alıyorum

başarısız değiştirme #2 sat 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [Geçersiz duraklar]


 if (m_position.PositionType()== POSITION_TYPE_SELL )
                 {
                   if (m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)!=m_position.TakeProfit())
                    {
                     if (StopLoss_<= 0 )
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_position.StopLoss(),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                               );
                         Sleep ( 200 );
                       }

                     if (StopLoss_> 0 )
                       {
                        m_trade.PositionModify(m_position.Ticket(),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()+StopLoss_*m_adjusted_point),
                                               m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                               );
                         Sleep ( 200 );
                       }
                    }
                 }
m_position.StopLoss() yerine sıfır koyarsam, aynı hata. Sorun ne?
 
Sile Si :

Merhaba. StopLoss_= 0 ise hata alıyorum

başarısız değiştirme #2 sat 3.00 Si-9.18 sl: 0, tp: 62749 -> sl: 0, tp: 62774 [Geçersiz duraklar]

   if (m_position.PositionType()== POSITION_TYPE_SELL )
     {
       if (m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)!=m_position.TakeProfit())
        {
         if (StopLoss_<= 0 )
           {
            m_trade.PositionModify(m_position.Ticket(),
                                   m_position.StopLoss(),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                   );
             Sleep ( 200 );
           }

         if (StopLoss_> 0 )
           {
            m_trade.PositionModify(m_position.Ticket(),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()+StopLoss_*m_adjusted_point),
                                   m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                                   );
             Sleep ( 200 );
           }
        }
     }

m_position.StopLoss() yerine sıfır koyarsam, aynı hata. Sorun ne?

Hatalı programlama mantığı.

StopLoss_=0 ise , üst koşul tetiklenir - TakeProfit'i değiştirme girişimi. Hata, AÇIK FİYATtan çıkarmanızdır - bu durumda TakeProfit seviyesi MEVCUT FİYATIN ÜZERİNDE olabilir ve bu bir hatadır.

Sizin durumunuzda, GEÇERLİ FİYAT'tan (m_position.PriceCurrent) çıkarmanız gerekir.

 
Vladimir Karputov :

Bir satış pozisyonu açıldı , satış limiti etkinleştirildi, tp'yi mevcut fiyata göre değil, yeni pozisyon fiyatına göre aktarmam gerekiyor.

Geçersiz bir fiyatı değiştirmeye çalışmaktan kaçınmak için hangi kontrol yapılmalıdır?

 
Sile Si :

Bir satış pozisyonu açıldı , satış limiti etkinleştirildi, tp'yi mevcut fiyata göre değil, yeni pozisyon fiyatına göre aktarmam gerekiyor.

Geçersiz bir fiyatı değiştirmeye çalışmaktan kaçınmak için hangi kontrol yapılmalıdır?

muayene:

 if (m_position.PriceOpen()-ExtTakeProfit<m_position.PriceCurrent()
   {
    m_trade.PositionModify(m_position.Ticket(),
                           m_position.StopLoss(),
                           m_symbol.NormalizePrice(m_position.PriceOpen()-ExtTakeProfit)
                           );
...
 
Vladimir Karputov :

muayene:

Teşekkürler ama hata devam ediyor.

aka

Mevcut fiyata kabul edilemez derecede yakın olabilir. Nasıl kontrol edilir?

 
Sile Si :

Teşekkürler ama hata devam ediyor.

Mevcut fiyata kabul edilemez derecede yakın olabilir. Nasıl kontrol edilir?

Borsaya erişimim yok, bu yüzden ya kendiniz yapın ya da forex enstrümanları üzerinde çalışın. Afedersiniz.


Eklendi: bir kontrol daha girin - bir Satış pozisyonu için, yeni TakeProfit (hesaplanan değer), pozisyonun mevcut TakeProfit'inden YÜKSEK veya EŞİT olmamalıdır.

 
Vladimir Karputov :

Borsaya erişimim yok, bu yüzden ya kendiniz yapın ya da forex enstrümanları üzerinde çalışın. Afedersiniz.


Eklendi: bir kontrol daha girin - bir Satış pozisyonu için, yeni TakeProfit (hesaplanan değer), pozisyonun mevcut TakeProfit'inden YÜKSEK veya EŞİT olmamalıdır.

Muhtemelen açılış fiyatı (POSITON_PRICE_OPEN) ?

 
Sergey Savinkin :

Muhtemelen açılış fiyatı (POSITON_PRICE_OPEN) ?

Bu seçenek daha yüksekti. Yukarıdaki gönderilere bakın. Bir konuşmanın ortasında cevap verdin.

 
Vladimir Karputov : ...bir kontrol daha girin - Satış pozisyonu için, yeni TakeProfit (hesaplanan değer) pozisyonun mevcut TakeProfit'inden YÜKSEK veya EŞİT olmamalıdır.

Uygun değil, ATR tarafından değiştiriliyor Bu hata için başka hangi kontroller yapılabilir? Hepsi mümkün. MT4'te STOPLEVEL var ama burada ne var?