mql5 - son işlemden bu yana belirli bir süre sonra dikey çizgi - sayfa 3

 
renatmt5 :
Last_time ve sonuç değişkenlerinin çalıştığımız istenen değerler olduğunu doğru anladım. Ve sonuç adı, çizginin ne kadar süreyle geleceğe kaydırılacağını (yeniden çizileceğini) belirler. Ardından, son anlaşmada alınan verileri dikkate alarak satırı hareket ettirmek için "Dönem Karı" kod bloğu "Dikey satırı taşı" bloğunun önüne yerleştirilmelidir.
Bu doğru mu yoksa bir şeyi mi karıştırıyorum?

Bunlar, LastProfitForPeriod işlevinin dahili değişkenleridir.

Sonuçta , son işlemin kârının değerini almamız gerekiyor, değil mi? İşte LastProfitForPeriod() ve bize son ticaretin karını veriyor. Geriye bu kâra bağlı olarak dikey çizgiyi hareket ettirmek kalıyor.

 
Vladimir Karputov :

Böylece, son dokunuş kalır - alınan kâra bağlı olarak çizgiyi hareket ettirin.

Bana hareketin kurallarının ne olduğunu hatırlat.

ayy, üzgünüm - açıklıyorum:

- son ticaretin sonucu negatifse ve günün sonucu negatifse, dikey çizgi geleceğe 24 saat (gün) uzaklıkta çizilir.
- son ticaretin sonucu negatifse ve günün sonucu pozitifse, dikey çizgi geleceğe 2 saat uzaklıkta çizilir.
- Son ticaretin sonucu pozitifse, geleceğe 1 saat uzaklıkta dikey bir çizgi çizilir.

 
Vladimir Karputov :

Burada "önce" parametresinin neden gelecekte yapılması gerektiğine dair bir açıklama buldum:


Teşekkür ederim!

 

Koşullara bakılırsa, son işlemin yapıldığı günün sonucu da gereklidir (o gün birden fazla işlem varsa)

 
renatmt5 :

ayy, üzgünüm - açıklıyorum:

- son ticaretin sonucu negatifse ve günün sonucu negatifse, dikey çizgi geleceğe 24 saat (gün) uzaklıkta çizilir.
- son ticaretin sonucu negatifse ve günün sonucu pozitifse, dikey çizgi geleceğe 2 saat uzaklıkta çizilir.
- Son ticaretin sonucu pozitifse, geleceğe 1 saat uzaklıkta dikey bir çizgi çizilir.

Ve bu nedenle, yine de mevcut gün için ayrı olarak kâr etmeniz gerekiyor.


LastProfitForPeriod() için ayarlamalar yapın - "from" ve "to" zaman giriş parametrelerini kaldırın ve bu parametreleri zaten fonksiyonun içinde oluşturun: günün başlangıç saatini oluştururuz ("den" olacaktır) ve "to" biz geçerli saati + günü al.


Sonuç olarak, LastProfitForPeriod() içinde referans olarak iki parametre ileteceğiz: günün karı ve son ticaretin karı.


iTime'ı kullanarak güne başlıyoruz

   datetime from_date= iTime ( Symbol (), PERIOD_D1 , 0 );

- yani, mevcut günlük barın açılış saatidir.

 

Derlenmiş - harika!
Sadece aşağıdaki noktalar var:
1) Gösterge uygulandığında, Kar son gün değişken değeri, son işlemin gerçekleştiği son gün için değil, genel olarak hesap için toplam kâr olarak atanır. Ancak daha sonra gösterge yeniden hesaplandığında (yaklaşık 1-2 dakika sonra), değer doğru olana değişir (son anlaşmanın yapıldığı günün toplam kârı). Ben sadece en son hangi hesaba göre karar veririm. anlaşma bugündü.
2) Grafikten gösterge silinirken sol üst köşedeki Yorum silinmez. Nesne listesi temizlenirken de silinmezler. Elbette uygun olmayan değerlerin kaybolması için terminali yeniden başlatıyorum. Nasıl kolaylaştırılır - bilmiyorum :)

Ayrıca, satır oluşturma, satırı taşıma ve satırı silme kodlu blokları (Dikey çizgiyi oluştur, Dikey çizgiyi hareket ettir ve Dikey çizgiyi sil) son işlem için hesaplama bloğundan sonra (Kar) yerleştirmek muhtemelen mantıklıdır. dönem için). Bir çizgi çekmek için, n-saat geleceğe kaymayı hesaba katarak, kâr_son_gün ve kâr_son_anlaşma verileri temelinde hesaplanmıştır.

Tip

if (profit_last_day<=0 ve profit_last_deal<=0){n=24;}

else (profit_last_day>0 ve profit_last_deal<=0){n=2;}

başka {n=1;}
//---
zaman = son_zaman + n;
//---
ayrıca, sonuncuya göre zaman kayması olan bir çizgi çizeriz. hesaplanan zaman değerini kullanarak işlemler...

 

1.002 sürümünde koruma tanıtıldı: günlük çubuğun açılış saati "0" döndürdüyse, o zaman bu kader değildir ve çıkarız .

 //+------------------------------------------------------------------+
//| Profit for the period                                            |
//+------------------------------------------------------------------+
void LastProfitForPeriod( double &profit_last_day, double &profit_last_deal)
  {
   datetime from_date= iTime ( Symbol (), PERIOD_D1 , 0 );
   if (from_date== D'1970.01.01 00:00' )
       return ;
   datetime to_date= TimeCurrent ()+ 60 * 60 * 24 ;

   long last_time= 0 ;


Artık işlem hesabının tüm ömrü için herhangi bir talep olmayacak.

 
Vladimir, çalışman için bir kez daha çok teşekkür ederim!
Kodu kendim almaya çalışacağım, böylece vicdanım bana eziyet etmesin ve pratik uğruna :) Başarı olursa aboneliğimi iptal edeceğim
 
renatmt5 :
Vladimir, çalışman için bir kez daha çok teşekkür ederim!
Kodu kendim almaya çalışacağım, böylece vicdanım bana eziyet etmesin ve pratik uğruna :) Başarı olursa aboneliğimi iptal edeceğim

İyi.

 
Bu arada eklediğiniz korumada şu nokta var. Değişkenlerin sıfıra eşit olduğu doğru değeri hesaplamadan önce 1-2 dakikalık bir gecikmem olduğundan, hızlı bir güncelleme için mevcut zaman dilimini başka bir zaman dilimine değiştiriyorum - değerler hemen yeniden hesaplanıyor. Muhtemelen, bu prensibe göre bir tür yazılım koltuk değneği yapmak mümkün mü?