Hatalar, hatalar, sorular - sayfa 2412

 
Andrey Barinov :

Ardından hata ayıklayın. Ticari biletleri yazdırın ve test cihazında gerçekte neyin seçildiğini görün. Anlaşma türüne göre bir filtre ekleyin.

lot sırasıyla doğru şekilde dağıtılır, bilet doğru seçilir.

 
Andrey Dik :

lot doğru bir şekilde verilir, sırasıyla bilet doğru seçilir.

Numara. Her iki esnaf da, Giriş ve Çıkış, aynı lota sahiptir. Ve kar yok.

İşte kodum. İşler.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ulong LastOutDealTicket( const string symbol, const uint magic)
  {
//===============
   long lasttime= 0 ;
//===============

//===============
   ulong ticket= 0 ;
//===============

//===============
#ifdef __MQL5__
//===============
   :: HistorySelect ( 0 , TimeCurrent ()+ 60 );
//===============
   const int deals=:: HistoryDealsTotal ();
//===============
   for ( int i=deals- 1 ;i>= 0 ;i--)
     {
       //===============
       const ulong tempticket=:: HistoryDealGetTicket (i);
       //===============

       //===============
       if (:: HistoryDealGetInteger (tempticket, DEAL_ENTRY )!= DEAL_ENTRY_OUT || :: HistoryDealGetString (tempticket, DEAL_SYMBOL )!=symbol ||
         :: HistoryDealGetInteger (tempticket, DEAL_MAGIC )!=magic) continue ;
       //===============

       //===============
       if (:: MQLInfoInteger ( MQL_TESTER )) return (tempticket);
       //===============

       //===============
       if (:: HistoryDealGetInteger (tempticket, DEAL_TIME )<=lasttime) continue ;
       //===============

       //===============
      ticket=tempticket;
      lasttime=:: HistoryDealGetInteger (tempticket, DEAL_TIME );
       //===============
     }
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   const int ordershistory= OrdersHistoryTotal ();
//===============
   for ( int i=ordershistory- 1 ;i>= 0 ;i--)
     {
       //===============
       if (!:: OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) || :: OrderSymbol ()!=symbol || :: OrderMagicNumber ()!=magic || 
         (:: OrderType ()!= OP_SELL && :: OrderType ()!= OP_BUY )) continue ;
       //===============

       //===============
       if (:: MQLInfoInteger ( MQL_TESTER )) return (:: OrderTicket ());
       //===============

       //===============
       if (:: OrderCloseTime ()<=lasttime) continue ;
       //===============

       //===============
      ticket=:: OrderTicket ();
      lasttime=:: OrderCloseTime ();
       //===============
     }
//===============
#endif 
//===============

//===============
   return (ticket);
//===============
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double LastClosedProfit( const string symbol, const uint magic)
  {
//===============
   const ulong lastoutticket=::LastOutDealTicket(symbol,magic);
//===============

//===============
   if (lastoutticket<= 0 ) return ( 0 );
//===============

//===============
   double result= 0 ;
//===============

//===============
#ifdef __MQL5__
//===============
   result=:: HistoryDealGetDouble (lastoutticket, DEAL_PROFIT );
//===============
#endif 
//===============

//===============
#ifdef __MQL4__
//===============
   if (:: OrderSelect (( int )lastoutticket, SELECT_BY_TICKET , MODE_HISTORY ))result=:: OrderProfit ();
//===============
#endif 
//===============

//===============
   return (result);
//===============
  }
 
Andrey Barinov :

Numara. Her iki işlem de, Giriş ve Çıkış, aynı lota sahiptir. Ve kar yok.

İşte kodum. İşler.

Denedim, kodunuz da 0.0 veriyor)))

Hedging hesabı, eğer öyleyse.
 
Andrey Dik :

Denedim, kodunuz da 0.0 veriyor)))

Hedging hesabı, eğer öyleyse.

Sadece 2009 derlemesindeki her şeyi kontrol ettim. Kodum, çıkması gereken çıktıyı verir. 0 döndürürse, orada 0'ınız olur.

 
Andrey Barinov :

Sadece 2009 derlemesindeki her şeyi kontrol ettim. Kodum, çıkması gereken çıktıyı verir. 0 döndürürse, orada 0'ınız olur.

Pekala, bunun gibi bir şey, tarihte sıfır olmayan bir sonuçla kapalı anlaşmalar var, ancak 0 veriyor

 
Andrey Barinov :
Andrey Dik :

Sorunun DC tarafında olabileceği bir seçenek var.

 
Alexey Kozitsyn :

Sorunun DC tarafında olabileceği bir seçenek var.

Test cihazında Metaquotes ve Robo üzerinde denedim.

 
bir hata buldum...benim sorunum olay şu ki sihri pozisyon kapatma fonksiyonuna geçirmedim ama açılış fonksiyonuna geçtim sonuç olarak anlaşma sihir tarafından seçilemedi..
 

CSymbolInfo'yu, Name yöntemiyle başlatma sırasında aşağıdakileri çağıran bir çoklu para birimi değişiminde kullanırsanız:

 if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE ,m_tick_value))
   return ( false );
if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_PROFIT ,m_tick_value_profit))
   return ( false );
if (! SymbolInfoDouble (m_name, SYMBOL_TRADE_TICK_VALUE_LOSS ,m_tick_value_loss))
   return ( false );

Ardından USDCAD sembolü testi sırasında hatalar üretilecektir:

no prices for symbol
 
Andrey Pogoreltsev :

CSymbolInfo'yu, Name yöntemiyle başlatma sırasında aşağıdakileri çağıran bir çoklu para birimi değişiminde kullanırsanız:

Ardından USDCAD sembolü için test sırasında hatalar üretilecektir:

Ne dediklerini anlayan var mı?