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

 
Aleksey Vyazmikin :

Bu sorunu çözmek için yardım rica ediyorum.

Mevcut bir zaman çerçevem olduğunu varsayalım - M1, herhangi bir üst TF'nin belirli bir çubuğunun son N çubuğunun zamanını bilmem gerekiyor, saat 60 dakika değil, 45 veya başka bir zaman olabilir ve ayrıca orada hafta sonları, ancak mevcut TF'nin son çubuğunun herhangi bir TF tarihinden öğrenmem gerekiyor.

Nasıl uygulanır?

Çubuk numarasını, sembol adını ve istenen zaman dilimini belirtin:

 //+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime ( const int index, string symbol= NULL , ENUM_TIMEFRAMES timeframe= PERIOD_CURRENT )
  {
   if (symbol== NULL )
      symbol= Symbol ();
   if (timeframe== 0 )
      timeframe= Period ();
   datetime Time [ 1 ];
   datetime time= 0 ; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied= CopyTime (symbol,timeframe,index, 1 , Time );
   if (copied> 0 )
      time= Time [ 0 ];
   return (time);
  }

Kontrol edin (her ihtimale karşı) - fonksiyon D'1970.01.01 00:00:00' saatini döndürdüyse - bu bir hata anlamına gelir.

 

Satış emrinin verilmediği bir sorunla karşılaştım

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

Aracının siparişi kabul ettiğini ve ardından reddettiğini doğru anlıyor muyum?

O zaman neye dayanarak ve neden yazmadı? Günlüklerde daha fazla hata yok. Bu hatadan önce 50'den fazla sipariş vardı ve hepsi hatasızdı. Bu hatadan sonra da hatalar görünmez.

Bu problemden kurtulmak mümkün mü?

 
Vladimir Karputov :

Çubuk numarasını, sembol adını ve istenen zaman dilimini belirtin:

Kontrol edin (her ihtimale karşı) - fonksiyon D'1970.01.01 00:00:00' saatini döndürdüyse - bu bir hata anlamına gelir.

Bu işlevi kullanıyorum, önerdiğinden daha mı kötü?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime ( string symbol, int tf, int index)
  {
   if (index < 0 ) return (- 1 );
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if ( CopyTime (symbol,timeframe,index, 1 ,Arr)> 0 )
       return (Arr[ 0 ]);
   else return (- 1 );
  }

Sorun şu ki, şu anki zaman dilimim 1 dakikaysa, seçilen zaman dilimindeki mevcut zaman çerçevesinin son çubuğunun sayısını bilmek istiyorum, ancak çok zaman geçti (hafta sonu nedeniyle boşluk veya akşam seansı 23-50'de kapandı ve bir sonraki sadece 10-00'da açıldı), daha sonra 09:59 döndü ve 23:49:00 değil, saatin böyle olmasını rica ediyorum

 datetime          StopDt= iTime ( Symbol (),TF_iDeltaP,_Shift-1)- 60 ;

Bu nedenle, soru ortaya çıktı, son çubuğun bu zamanını herhangi bir zaman dilimi kombinasyonu ile nasıl elde edersiniz?

 
Aleksey Vyazmikin :

...

Sorun şu ki, şu anki zaman dilimim 1 dakikaysa, seçilen zaman dilimindeki mevcut zaman diliminin son çubuğunun sayısını bilmek istiyorum, ...

Vurgulanan cümlede beynim patladı.

 
Vladimir Karputov :

Vurgulanan cümlede beynim patladı.

Bir yazım hatası var, üst zaman çerçevesinin seçili çubuğuna atıfta bulunan mevcut zaman çerçevesinin son çubuğunun tarihine ihtiyacım var.

Şimdi açık mı?
 
Aleksey Vyazmikin :

Bir yazım hatası var, üst zaman çerçevesinin seçili çubuğuna atıfta bulunan mevcut zaman çerçevesinin son çubuğunun tarihine ihtiyacım var.

Şimdi açık mı?

Hayır, net değil. Beyin kaynamaya ve patlamaya devam ediyor :). Bir çubuk yalnızca kendi zaman dilimine aittir.

 
Aleksey Vyazmikin :

Bir yazım hatası var, üst zaman çerçevesinin seçili çubuğuna atıfta bulunan mevcut zaman çerçevesinin son çubuğunun tarihine ihtiyacım var.

Şimdi açık mı?

İsteğinizi doğru anlarsam, o zaman:

1. Üst TF'nin istenen çubuğunun kapanma zamanını belirleyin.

2. Eski zaman diliminin çubuğuyla biten alt zaman aralığının çubuğunun zamanını hesaplayın.

3. Şu anda, daha düşük bir TF'ye sahip bir çubuk isteyin (istek kesin değildir) - zaman çizelgesinde sola en yakın çubuğu alın - ihtiyacınız olanı.

4. Gerekirse, bu çubuğun üst TF'nin çubuğunun içinde olduğunu kontrol edin (herhangi bir nedenle, alt TF'nin üst TF çubuğunun içinde hiç çubuk olmadığında seçeneği hariç tutun).

 
Vladimir Karputov :

Hayır, net değil. Beyin kaynamaya ve patlamaya devam ediyor :). Bir çubuk yalnızca kendi zaman dilimine aittir.

Tamam, düşüncelerin görselleştirilmesine geçelim :)

Beyaz renkte, istekte bulunduğumuz yeri, sarı renkte, almamız gereken çubuğun zamanını gösterdi.

Bu daha net mi? Değilse, lütfen açıklayıcı sorular sorun.

 
Aleksey Vyazmikin :

Tamam, düşüncelerin görselleştirilmesine geçelim :)

Beyaz renkte, talepte bulunduğumuz yeri, sarı renkte, almamız gereken çubuğun zamanını gösterdi.

Bu daha net mi? Değilse, lütfen açıklayıcı sorular sorun.

1. Resim çok küçük - bir dahaki sefere hemen ikiye 2 metre koyun :)

2. Düşünceyi yine anlamadım - bir zaman diliminde bir grafik gösterdiniz. Bu zaman diliminde N numaralı çubuğu talep etmedeki sorun nedir?

 
Vladimir Karputov :

1. Resim çok küçük - bir dahaki sefere hemen ikiye 2 metre koyun :)

2. Fikri yine anlamadım - bir zaman diliminde bir grafik gösterdiniz. Bu zaman diliminde N numaralı çubuğu talep etmedeki sorun nedir?

1. Daha fazlasını yapabilirim - sorun değil ;)

2. Zaman çerçevesi sol üst köşede gösterilir - M5. N numaralı çubuğu talep edemiyorum çünkü tam olarak nasıl alacağımı bilmiyorum, özellikle de vardiya üst TF'nin 1 çubuğu değil de daha fazla çubuk ise.

Bir çubuk kaydırmak için aşağıdaki algoritmayı deneyeceğim:

1. Mevcut üst zaman çerçevesinin başlangıcından bu yana kaç çubuk geçtiğini öğrenin

2. Ortaya çıkan sayıyı 1 çubuk hareket ettirin ve iTime işlevini kullanarak zamanı öğrenin