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

 
Alexey Viktorov :

Belki bu işe yarar? Her ne kadar forex her zaman doğru göstermese de.

örneğin, SBRF-9.17 için, dakika grafiğine göre Cuma günü işlem seansı bitiş zamanı == 23:45:00 için yanlış bir değer gösterir ve bu fonksiyon, dakika grafiğine göre 00:00:00'ı gösterir. exchange, akşam işlem seansı bitiş saati 23:50

ama mesele bu değil, bulunduğumuz yerde kontroller oluşturabilir ve sabitlerle değiştirebilirsiniz, ancak belki birileri kendi bisikletini yazmamak için bu işlevi zaten uygulamıştır.
 
Alexey Viktorov :

bağımlılık yoktur ve olamaz. Bu nedenle, özel bir kod olamaz.

Geliştiriciler bu gibi durumlarda RNG kullanmazlar. Algoritmalar açıktır - tekrarlanabilir.

 
Konstantin :

Mevcut zaman aralığını bulmanın farklı yollarıyla türev piyasasında son gün piyasasının kapanış saati nasıl belirlenir:

1. Cumartesi - Pazar aralığındayız, Cuma akşamı işlem seansının kapanış saatine ihtiyacımız var
2. Pazartesi - Cuma kapalı piyasa aralığındayız, Pazartesi - Perşembe akşam seansının kapanış saatine ihtiyacımız var
3. Pazartesi işlem aralığındayız , Cuma akşamı işlem seansının kapanış saatine ihtiyacımız var
4. Salı - Cuma ticaret aralığındayız, Pazartesi - Perşembe akşam seansının kapanış saatine ihtiyacımız var

Belki birisi benzer bir işlevsellik yazmıştır, aksi takdirde tekerleği yeniden icat etmek istemiyorum))

Muhtemelen, sabitlerden ayrı olarak, ortaya çıkmamak daha esnektir:

 /*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate( void ) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer (_date);

   if (_date.hour == 23 && _date.min >= 44 ) {           // определяем время окончания торговой сессии
      _date.hour = 23 ;
      _date.min  = 44 ;
      _date.sec  = 59 ;
      _time_t    = StructToTime (_date);
   } else {
       TimeToStruct (_time_t - 86400 , _date);
      _date.hour = 23 ;
      _date.min  = 44 ;
      _date.sec  = 59 ;
       if (_date.day_of_week == 0 || _date.day_of_week == 6 )
         _date.day_of_week = 5 ;
      _time_t = StructToTime (_date);
   }
//---
   return _time_t;
}
 

CCanvas sınıfıyla kimin çalıştığını söyle, grafik etiketini güncellemeyi nasıl daha az kaynak yoğun hale getirebilirim, örneğin, grafik etiketinde birkaç yüz bin satırımız var, yeniden boyutlandırırken grafik etiketindeki her satırı tekrar çizmemiz gerekiyor, çünkü basit yeniden boyutlandırma ile çizmeden, grafik etiket nesnesinin kendisi yeniden boyutlandırılsa da grafikteki çizgiler görüntülenmez

 
Konstantin :

Muhtemelen, sabitlerden ayrı olarak, ortaya çıkmamak daha esnektir:

Daha kolay değil mi?

 /********************Script program start function*******************/
void OnStart ()
{
 datetime timeArray[ 1 ], barArray[ 1 ];
 CopyTime ( _Symbol , PERIOD_D1 , 0 , 1 , timeArray);
 CopyTime ( _Symbol , PERIOD_M1 , timeArray[ 0 ]- 1 , 1 , barArray);
 Print (barArray[ 0 ];
} /*******************************************************************/
 
Alexey Viktorov :

Daha kolay değil mi?

 CopyTime ( _Symbol , PERIOD_D1 , 0 , 1 , timeArray);               // время текущего дня 00:00:00
 CopyTime ( _Symbol , PERIOD_M1 , timeArray[ 0 ]- 1 , 1 , barArray);   // время открытия - 1 секунду

sonuç temelde doğrudur)) ATP

 
Şimdi (1626) saban sürmüyor

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

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

fxsaber , 2017.05.05 23:48

 // Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
   const class CLASS_TMP {} Tmp;
  
   return (( int ):: StringFormat ( "%d" , &Tmp) - 1 );
}
Uygulama örneği
 int OnInit ()
{
   if (GetAmountObjects() > 0 )
     Print ( "До " + __FUNCSIG__ + " были вызваны конструкторы!" );

   return ( INIT_SUCCEEDED );
}
 
// Советник возвращает полностью сформированные торговые запросы ( включая ручные )
#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
   return (TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction (   const MqlTradeTransaction &, const MqlTradeRequest & Request, const MqlTradeResult & )
{
   if (Request.action)
     Print (ToString(Request));
}

Aynı Dolum ile ilgili bir sorun varsa, bu Expert Advisor'ı çalıştırın ve ihtiyacınız olan siparişi manuel olarak oluşturun (terminalde F9). Oluşturulan ticaret talebi danışman tarafından yazdırılacaktır.

Ne yazık ki, bunu gerçek hesaplarda yapmak sorunlu. Geliştiriciler teklifi reddetti.

 
fxsaber :

Aynı Dolum ile ilgili bir sorun varsa, bu Expert Advisor'ı çalıştırın ve ihtiyacınız olan siparişi manuel olarak oluşturun (terminalde F9). Oluşturulan ticaret talebi EA tarafından yazdırılacaktır.

Eksik olan tek şey bir örnek

 
Raşid Umarov :

Eksik olan tek şey bir örnek

Manuel olarak ayarla


Oluşturulan ticaret talebini günlükte alıyoruz

Request.action = TRADE_ACTION_PENDING ( 5 )
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT ( 2 )
Request.type_filling = ORDER_FILLING_RETURN ( 2 )
Request.type_time = ORDER_TIME_SPECIFIED ( 2 )
Request.expiration = 2017.07 . 11 12 : 08 : 00
Request.comment = 
Request.position = 0
Request.position_by = 0
Gerçek hayat için, bu ne yazık ki çok pahalı. Bu yüzden bir teklifle geldim.