Piyasanın kapalı olduğunu doğru bir şekilde nasıl bilebilirim? (mql4) - sayfa 2

 
Alexey :

int Weekday = TimeDayOfWeek ( TimeLocal ());                                                          //Локальное время  |
int Weekdays = TimeDayOfWeek ( TimeCurrent ());                                                       //Серверное время  |

while ( IsExpertEnabled ())                                                                 //До тех пор пока запушенно  |

     {
     if (Weekday!= 0 ||Weekday!= 6 ){Exp= true ; if (Weekday== 1 ){Info( 4 ,Weekday, 0 );}}       //Если не Сбб. Воск. то разрешено  |
     if (Weekdays== 0 ||Weekdays== 6 )                                                  //Если Сбб. Воск. то не разрешено  |
       {
       Exp= false ;Info( 5 ,Weekdays, 0 );
       if (Weekdays== 6 ){ Sleep ( 86400000 );}                                                //Если суббота пауза 24 часа  |
       if (Weekdays== 0 ){ Sleep ( 3600000 );}                                               //Если воскресение пауза 1 час  |
       }

Duraklamalar ve döngüler yoluyla kabaca bu şekilde karar verdim, ancak bu eski bir kod, terminal sürümünü güncellemeden önce. Şimdi daha kolay yollar var, sadece biraz literatür okumanız gerekiyor.
Tabii ki teşekkür ederim, ama dedikleri gibi, bir yerden göze tırmanın) Ayrıca euro'ya 5.0 fiyatına depozito koyabilirim, sunucu buna izin verecek ve ardından her zamanlayıcı döngüsünde değiştirmeyi deneyin. depozito, hata 132 ise , o zaman piyasa kapalı, eğer normalse, o zaman ticaret var, ancak ticaret süresi boyunca bu bir sunucu seli, sorunu "rocker" aracılığıyla değil, insanca çözmek istiyorum, ve bu zaten MK geliştiricileri için.
 

Ticarete İzin Verilir

Uzman Danışmanların yardımıyla ticaret yapma olasılığı hakkında bilgi verir.

bool IsTradeAllowed ();

Çağrının ikinci şekli, belirtilen zamanda verilen sembol için ticaret fırsatı hakkında bilgi verir.

bool Ticarete İzin Verilir (
const dize sembolü         // sembol
   tarih saat    test edilmiş_zaman    // zaman
);

Seçenekler

semboller

[karakterde.

test edilmiş_zaman

[zamanında.

Geri dönüş değeri

EA'nın ticaret yapmasına izin veriliyorsa ve ticaret işlemlerini gerçekleştirmek için iş parçacığı ücretsizse true döndürür, aksi takdirde false döndürür.

 
if( SymbolInfoInteger (NULL,SYMBOL_TIME)>60) return(0);
 
Kino :
Tabii ki teşekkür ederim, ama dedikleri gibi, bir yerden göze tırmanın) Ayrıca euro'ya 5.0 fiyatına depozito koyabilirim, sunucu buna izin verecek ve ardından her zamanlayıcı döngüsünde değiştirmeyi deneyin. depozito, hata 132 ise , o zaman piyasa kapalı, eğer normalse, o zaman ticaret var, ancak ticaret süresi boyunca bu bir sunucu seli, sorunu "rocker" aracılığıyla değil, insanca çözmek istiyorum, ve bu zaten MK geliştiricileri için.
Ticaret izni talebi gereklidir. Örnekte böyle bir isteğim yok çünkü marketin kapanmasıyla saat farkı 3 saat olduğu ve kapanışa 3 saat kala çoğunlukla bir dairede geçiyorlar. Bu nedenle, orada bir şekilde farklı, ama aynı zamanda duraklamalarla ama çok daha küçük aralıklarla yaptım.
 
offfline :

Ticarete İzin Verilir

Uzman Danışmanların yardımıyla ticaret yapma olasılığı hakkında bilgi verir.

bool IsTradeAllowed ();

Çağrının ikinci şekli, belirtilen zamanda verilen sembol için ticaret fırsatı hakkında bilgi verir.

bool Ticarete İzin Verilir (
const dize sembolü         // sembol
   tarih saat    test edilmiş_zaman    // zaman
);

Seçenekler

semboller

[karakterde.

test edilmiş_zaman

[zamanında.

Geri dönüş değeri

EA'nın ticaret yapmasına izin veriliyorsa ve ticaret işlemlerini gerçekleştirmek için iş parçacığı ücretsizse true döndürür, aksi takdirde false döndürür.

İskender, yanılıyorsun)


 //+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 1 );
      
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   if (IsTradeAllowed() == True) Print ( "---- Ура торгуем -----" );
   {
       int ticket= OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 3 , 0 , 0 , "My order" , 16384 , 0 , clrGreen );
      {
         if (ticket < 0 ) Print ( "---- Уже не торгуем -----" , GetLastError ());
      }
   }

  }
//+------------------------------------------------------------------+
 

İşte hiç çalışmayan bir seçenek.

 //+------------------------------------------------------------------+
//|                                                         тест.mq4 |
//|                                                   Sergey Gritcay |
//|                                               sergey1294@list.ru |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritcay"
#property link        "sergey1294@list.ru"
#property version    "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 1 );

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   if (isNewTime())
     {
       Print ( "---- Ура торгуем -----" );
       int ticket= OrderSend ( Symbol (),OP_BUY, 1 ,Ask, 3 , 0 , 0 , "My order" , 16384 , 0 , clrGreen );
        {
         if (ticket< 0 ) Print ( "---- Уже не торгуем -----" , GetLastError ());
        }
     }
     else Print ( "---- функция isNewTime() = false, возможно торговля закрыта " );

  }
//+------------------------------------------------------------------+
bool isNewTime()
  {
//--- в статической переменной будем помнить время 
   static datetime last_time= 0 ;
//--- текущее время
   datetime time= TimeCurrent ();

//--- если это первый вызов функции
   if (last_time== 0 )
     {
       //--- установим время и выйдем 
      last_time=time;
       return ( false );
     }

//--- если время отличается
   if (last_time!=time)
     {
       //--- запомним время и вернем true
      last_time=time;
       return ( true );
     }
//--- дошли до этого места - значит время сервера не обновилось, вернем false
   return ( false );
  }
 
sergey1294 :

İşte çok iyi çalışmayan bir seçenek.

Teşekkürler, deneyeceğim.
 
Kino :
Doğru yoldaki ipucu için teşekkürler, ancak piyasa açıkken, emirlerle çalışma olasılığını belirlemeye çalışmak bir şekilde doğru değil, ama işe yarayacak.

Kendi adıma, aşağıdaki gibi savunuyorum.

Mevcut sembol üzerinde işlem yapmak gerekiyorsa, piyasanın açık olduğuna dair dolaylı bir işaret yeni kenelerin gelmesidir. Böylece OnTick olayı yeterli ve soru kapanmış oluyor.

Mevcut sembolden farklı sembollerle çalışmak gerekiyorsa, o zaman mevcut sembol üzerinde ticaretin açılmış olması, başka bir sembol için ticaretin devam ettiğini garanti etmez. Örneğin, danışman EURUSD'de başlatılır, saat 09:00 UTC'dir ve diğer şeylerin yanı sıra pazarı yalnızca 13:00 UTC'de açılacak olan ABD şirketlerinin hisseleriyle ticaret yapmanız gerekir. Yani, OnTick yardımcı olmaz. Belli aralıklarla sunucuya emir göndermeye çalışılarak piyasanın diğer sembollerle açıldığı gerçeğini tam olarak belirlemek gerekecektir. Dakikada bir emir göndermek kesinlikle bir sunucu bombalaması değil, tamamen normal bir yaklaşım. Burada sorun ne?

 

haftanın gününü belirleme konusunda servis masasında bir kez cevaplandığım için kene yok ticaret yok,

bir çözüm önerdiler

TimeDayOfWeek( TimeLocal ());

kesinlikle tamamen doğru olmasa da , haftanın günü terminal olandan farklı olabilir.

 
Son projelerden birinde, görev, keyfi bir enstrümanda alım satım işleminin açık ve kullanılabilir olduğu gerçeğini belirlemekti.
Önemli bir koşul, siparişleri açmaya çalışmamaktı, ancak diğer projelerde defalarca buna başvurdum. Ve açıkçası, bana öyle geliyor ki, şimdiye kadar bu en basit ve en güvenilir yöntem.

Şimdilik, yapmayı başardığım en iyi seçenek şudur (ama hala bakıyorum, aşağıya bakın):
1) Karşılıklı ticarete izin verilip verilmediğini belirleyin - IsTradeAllowed() işlevinin ikinci biçimi (yukarıda bahsedilmiştir). Olmazsa, deneme yok :)
2) SymbolInfoInteger(<symbol>, SYMBOL_TIME) sembolü için son teklifin zamanını alım satım seanslarından birinin ( SymbolInfoSessionTrade() ) zamanı ile karşılaştırın, eğer teklif süresi seanslardan birinin aralığı içindeyse, biz ticaret yapmanın mümkün olduğunu düşünün.
3) Fiyat teklifi süresinin çok "modası geçmiş" olmadığını kontrol edin: xx dakikadan daha uzun bir süre önceyse (SymbolInfoInteger(<symbol>, SYMBOL_TIME) ve TimeCurrent()'i karşılaştırın), o zaman alıntının eski olduğunu düşünüyoruz ve bu nedenle bunun üzerinden takas mümkün değil çıkacak (yanılmıyorsam 3 dakikadan bahsediyorduk).

Bu yaklaşımın dezavantajı şudur: Enstrüman üzerinde işlem yapmanın imkansız olduğu ancak kenelerin devam ettiği durumlar olabilir.
Mekanizmayı araştırmadım, geliştirme bir komisyoncu için yapıldı ve test ederken böyle bir modu açtılar - keneler devam ediyor, ancak ticaret yapamazsınız. Bu seçeneğin üstesinden gelmek henüz mümkün olmamıştır.

Adil olmak gerekirse, gerçek ticarette bununla karşılaşmadığımı belirtmek gerekir. Dolayısıyla, "olağan" koşullar altında, çözüm tolere edilebilir görünüyor. Ama hala takipteyim :)

Not 1. ve 2. adımları birleştirmek mümkün görünüyor (SimgeInfoInteger(<symbol>, SYMBOL_TIME) ile IsTradeAllowed işlevine geçin), ancak bu seçeneği henüz test etmedim ve onaylamayacağım.

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4