Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 109

 
Taras Slobodyanik :

mantıksal zhezh - bu bir darbe

Mantığı yargılamadan bilgi yazdı. Etkilenmişse, PositionID aynı şekilde değişmiş olmalıdır.

Şimdi değişmiyor. Bu bir hataysa, bu harika olurdu!


Bu nedenle soru. DEAL_ENTRY_INOUT ticareti, PositionID'yi DEAL_ORDER olarak değiştirmeli mi?

Bence değişmeliyim. Bu davranış çok uygun/doğru olacaktır.
 
fxsaber :

Mantığı yargılamadan bilgi yazdı. Etkileniyorsa, PositionID aynı şekilde değişmiş olmalıdır.

Şimdi değişmiyor. Bu bir hataysa, bu harika olurdu!


Bu nedenle soru. DEAL_ENTRY_INOUT ticareti, PositionID'yi DEAL_ORDER olarak değiştirmeli mi?

Burada hayır diyor. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Daha önce evet yazılmasına rağmen Pozisyon Kimliği değişti.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
 
Andrey Barinov :

Burada hayır diyor. https://www.mql5.com/ru/docs/constants/tradingconstants/positionproperties#enum_position_property_integer

Belki bunun için bazı iyi nedenler vardır. Benim açımdan, bu tamamen yanlış görünüyor.

Daha önce evet yazılmasına rağmen Pozisyon Kimliği değişti.

Geliştiricilerden durumu netleştirmelerini isteyin. Pozisyon Kimliği değiştirildiğinde, beş çevirmeden sonra, "Pozisyonlar" görüntüleme modundaki İşlem Geçmişi sekmesi beş pozisyon gösterecektir.

Şimdi (PositionID çevirme sırasında değişmez), her zaman yalnızca bir konum gösterilir. Hafifçe söylemek gerekirse, garip bir karar.

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MetaTrader 5 platformunun yeni versiyonu 1930 yapımı: MQL5'te kayan grafik pencereleri ve .Net kitaplıkları

fxsaber , 2018.11.09 16:19

"gerçek tiklerle" modunda, Test Cihazı, keneler geldiğinde kendi başına çubuklar oluşturur. Bu nedenle, Terminaldeki ve Test Cihazındaki özel bir sembolün çubuk geçmişi tamamen farklı olabilir.

 
Genellikle, Expert Advisor'ın derlenmesinden sonra, bu Expert Advisor daha önce seçilmişse Test Cihazı ayarlarının sıfırlandığı bir durum vardır. Bu en hafif tabirle can sıkıcı. Çünkü Her derlemeden sonra, danışmanlar ağacına tırmanmanız ve kendinizinkini aramanız gerekir. Bilmeyen varsa Tester resetlenmesin diye bir tarif var. Danışmanı geçmişte hata ayıklama modunda çalıştırmanız gerekir - CTRL+F5. Bundan sonra, herhangi bir yeniden derleme, Test Cihazı ayarlarını etkilemeyecektir.
 
fxsaber :
Genellikle, Expert Advisor'ın derlenmesinden sonra, bu Expert Advisor daha önce seçilmişse Test Cihazı ayarlarının sıfırlandığı bir durum vardır. Bu az söylemek rahatsız edici. Çünkü Her derlemeden sonra, danışmanlar ağacına tırmanmanız ve kendinizinkini aramanız gerekir. Bilmeyen varsa Tester resetlenmesin diye bir tarif var. Danışmanı geçmişte hata ayıklama modunda çalıştırmanız gerekir - CTRL+F5. Bundan sonra, herhangi bir yeniden derleme, Test Cihazı ayarlarını etkilemeyecektir.


Aynı şey, dün fark edildi!

şu şekilde iyileştirdi: Yeni sürümü (Yeni dosya adı) derledikten sonra, terminali yeniden başlatmanız gerekir. - Belki mqlcache'yi güncellemez

Bundan sonra, test cihazı derleme sırasında önceki dosyaya sıfırlanmaz.


Bu sorun daha önce birkaç kez ortaya çıktı, sonra kayboldu. Sonra yeniden ortaya çıktı...

ZY Sözlerinin anlamını okumadım. ve sen tavsiye ettin, sorulmadın ...

 
Bu konu ile ilgili olmayan yorumlar " MQL4, yardım ve algoritmalar ve kodlar hakkında tartışma " bölümüne taşınmıştır.
 

beyler kim var Lütfen geçmişi yüklemek için komut dosyasını kontrol edin ...

Her şey donuyor sadece ben miyim? Yardımdan alınan komut dosyası ...

 //+------------------------------------------------------------------+ 
//|                                              TestLoadHistory.mq5 | 
//|                        Copyright 2009, MetaQuotes Software Corp. | 
//|                                              https://www.mql5.com | 
//+------------------------------------------------------------------+ 
#property copyright "2009, MetaQuotes Software Corp." 
#property link        "https://www.mql5.com" 
#property version    "1.02" 
#property script_show_inputs 

//--- input parameters 

//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart ()
  {



   int       all_symbols= SymbolsTotal ( false );   string   sym_name= "" ;
   Print ( "Load symbols " ,all_symbols);

   for ( int k= 0 ;k<all_symbols;k++)
       if ((sym_name= SymbolName (k, false ))!= "" )
        {
         SymbolSelect (sym_name, true );

         Print (k, " Symbol name " ,sym_name);

         int res=CheckLoadHistory(sym_name, PERIOD_M1 ,( TimeCurrent ()- 60 * 60 * 24 * 5 ));

         switch (res)
           {
             case - 1 : Print ( "Unknown symbol " ,sym_name);             break ;
             case - 2 : Print ( "Requested bars more than max bars in chart " ,sym_name); break ;
             case - 3 : Print ( "Program was stopped " ,sym_name);                         break ;
             case - 4 : Print ( "Indicator shouldn't load its own data " ,sym_name);       break ;
             case - 5 : Print ( "Load failed " ,sym_name);                                 break ;
             case    0 : Print ( "Loaded OK " ,sym_name);                                   break ;
             case    1 : Print ( "Loaded previously " ,sym_name);                           break ;
             case    2 : Print ( "Loaded previously and built " ,sym_name);                 break ;
             default : Print ( "Unknown result " ,sym_name);
           }

         datetime first_date;
         SeriesInfoInteger (sym_name, PERIOD_M1 , SERIES_FIRSTDATE ,first_date);
         int bars= Bars (sym_name, PERIOD_M1 );
         Print ( "First date " ,first_date, " - " ,bars, " bars" );
        }
//--- 

//--- 
  }
//+------------------------------------------------------------------+ 
//|                                                                  | 
//+------------------------------------------------------------------+ 
int CheckLoadHistory( string symbol, ENUM_TIMEFRAMES period, datetime start_date)
  {
   datetime first_date= 0 ;
   datetime times[ 100 ];
//--- check symbol & period 
   if (symbol== NULL || symbol== "" ) symbol= Symbol ();
   if (period== PERIOD_CURRENT )     period= Period ();
//--- check if symbol is selected in the MarketWatch 
   if (! SymbolInfoInteger (symbol, SYMBOL_SELECT ))
     {
       if ( GetLastError ()== ERR_MARKET_UNKNOWN_SYMBOL ) return (- 1 );

       SymbolSelect (symbol, true );
     }
//--- check if data is present 
   SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date);
   if (first_date> 0 && first_date<=start_date) return ( 1 );
//--- don't ask for load of its own data if it is an indicator 
   if ( MQL5InfoInteger ( MQL5_PROGRAM_TYPE )== PROGRAM_INDICATOR && Period ()==period && Symbol ()==symbol)
       return (- 4 );
//--- second attempt 
   if ( SeriesInfoInteger (symbol, PERIOD_M1 , SERIES_TERMINAL_FIRSTDATE ,first_date))
     {
       //--- there is loaded data to build timeseries 
       if (first_date> 0 )
        {
         //--- force timeseries build 
         CopyTime (symbol,period,first_date+ PeriodSeconds (period), 1 ,times);
         //--- check date 
         if ( SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date))
             if (first_date> 0 && first_date<=start_date) return ( 2 );
        }
     }
//--- max bars in chart from terminal options 
   int max_bars= TerminalInfoInteger ( TERMINAL_MAXBARS );
//--- load symbol history info 
   datetime first_server_date= 0 ;
   while (! SeriesInfoInteger (symbol, PERIOD_M1 , SERIES_SERVER_FIRSTDATE ,first_server_date) && ! IsStopped ())
       Sleep ( 5 );
//--- fix start date for loading 
   if (first_server_date>start_date) start_date=first_server_date;
   if (first_date> 0 && first_date<first_server_date)
       Print ( "Warning: first server date " ,first_server_date, " for " ,symbol,
             " does not match to first series date " ,first_date);
//--- load data step by step 
   int fail_cnt= 0 ;
   while (! IsStopped ())
     {
       //--- wait for timeseries build 
       while (! SeriesInfoInteger (symbol,period, SERIES_SYNCHRONIZED ) && ! IsStopped ())
         Sleep ( 5 );
       //--- ask for built bars 
       int bars= Bars (symbol,period);
       if (bars> 0 )
        {
         if (bars>=max_bars) return (- 2 );
         //--- ask for first date 
         if ( SeriesInfoInteger (symbol,period, SERIES_FIRSTDATE ,first_date))
             if (first_date> 0 && first_date<=start_date) return ( 0 );
        }
       //--- copying of next part forces data loading 
       int copied= CopyTime (symbol,period,bars, 100 ,times);
       if (copied> 0 )
        {
         //--- check for data 
         if (times[ 0 ]<=start_date)   return ( 0 );
         if (bars+copied>=max_bars) return (- 2 );
         fail_cnt= 0 ;
        }
       else
        {
         //--- no more than 100 failed attempts 
         fail_cnt++;
         if (fail_cnt>= 100 ) return (- 5 );
         Sleep ( 10 );
        }
     }
//--- stopped 
   return (- 3 );
  }
//+------------------------------------------------------------------+ 
//| Возвращает строкое значение периода                              | 
//+------------------------------------------------------------------+ 
string GetPeriodName( ENUM_TIMEFRAMES period)
  {
   if (period== PERIOD_CURRENT ) period= Period ();
//--- 
   switch (period)
     {
       case PERIOD_M1 :   return ( "M1" );
       case PERIOD_M2 :   return ( "M2" );
       case PERIOD_M3 :   return ( "M3" );
       case PERIOD_M4 :   return ( "M4" );
       case PERIOD_M5 :   return ( "M5" );
       case PERIOD_M6 :   return ( "M6" );
       case PERIOD_M10 : return ( "M10" );
       case PERIOD_M12 : return ( "M12" );
       case PERIOD_M15 : return ( "M15" );
       case PERIOD_M20 : return ( "M20" );
       case PERIOD_M30 : return ( "M30" );
       case PERIOD_H1 :   return ( "H1" );
       case PERIOD_H2 :   return ( "H2" );
       case PERIOD_H3 :   return ( "H3" );
       case PERIOD_H4 :   return ( "H4" );
       case PERIOD_H6 :   return ( "H6" );
       case PERIOD_H8 :   return ( "H8" );
       case PERIOD_H12 : return ( "H12" );
       case PERIOD_D1 :   return ( "Daily" );
       case PERIOD_W1 :   return ( "Weekly" );
       case PERIOD_MN1 : return ( "Monthly" );
     }
//--- 
   return ( "unknown period" );
  }
//+------------------------------------------------------------------+
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Bekleyen siparişler tetiklendiğinde anlaşılmaz bir durum.

fxsaber , 2018.11.26 13:37

Bir de şu durum var:

  1. Pozisyon açan bir piyasa emri verildi ve Emir Toplamı bir arttı.
  2. Gerçekleştirildi ve Sipariş Toplamı bir azaldı, ancak Pozisyon Toplamı bir artmadı. Onlar. bir pozisyon var ama Terminal'in bundan haberi yok.

Örneğin, pozisyon veya emir yok - PositionsTotal = 0, OrdersTotal = 0.

Bir piyasa emri veriyorsunuz. Bu durumda, PozisyonlarToplam = 0, SiparişlerToplam = 1.

Piyasa emri tamamlandı - Emir Toplamı = 0. Ama Pozisyon Toplamı = 0 !

 
Uygulama vakti
 PositionSelectByTicket ( OrderGetInteger ( ORDER_TICKET ));

Öyle ki PositionsTotal (yeniden üretilmesi zor değil) değişebilir.


Örneğin, PositionsTotal, PositionsSelectBytTicket'ten hemen önce sıfır döndürür, bu da true değerini döndürür.