KimIV'ten faydalı özellikler - sayfa 75

 

Merhaba sevgili Igor! Sistemim trend bastırma kullanıyor. Ve geçişin hem zamanı hem de fiyatı önemlidir.
Bir dizi çubuk her zaman "sürekli" zamana sahip değildir. Hafta sonları, delikler vb.
Zamanı doğal biçiminde hesaplamak için CrossPointOfLines (test_CrossPointOfLines.mq4 içinde) kullanmak aşağıdaki sonuçlara yol açar:

sıfır çubuğunun solunda

(grafiklerdeki trend çizgilerinin konumunun sistemle hiçbir ilgisi yoktur - rastgele bir seçim. Trend çizgisinin referans noktaları,

aynı anda sıfır çubuğunun solunda, diğeri sağda olun.)


ve doğru

Hesaplamalar saat cinsinden değil, duruma göre yapılmalıdır: hem çubuk hem de saat cinsinden. Soldaki zaman birimi bir çubuktur. Ve sağ kenar için, sıfır çubuğundan sonra, zaten saatlik ölçüme yol açar.

Hazır çözümler arayışı henüz bir sonuç vermedi. CrossPointOfLines işlevi, şimdiye kadar sitede bulunan tek işlevdir. Mükemmel bir hikayeye ihtiyacı var :(

 

Igor günün iyi zamanı!

Lütfen tavsiye veya çözüm ile yardım edin. Danışman yapmaya çalışıyorum önceki çubuk tarafından "absorbe edildiğinde" PREPrevious bir sinyal verdi.

1 - emilim arttıysa
2 - emilim aşağı olduysa.

Her şey ilköğretim için imkansız gibi görünüyor , açılış ve kapanış fiyatlarını ve işte karşılaştırıyoruz ... yani HAYIR. Rastgele sinyal veriyor.Fareyi önceki 2 çubuğun üzerine getirdiğinizde, sonuncunun sondan bir öncekini emdiği açıkça görülüyor.

Konuyu seçecek gücüm yok ve birkaç seçenek var gibi görünüyor ama yine de hiçbir şekilde işe yaramıyor ve bu kadar.Gerçekten yardım bekliyorum ve şimdiden teşekkürler


İşte metin:

int başlangıç()
{
//----
if (SShort()==1)
uyarı("1");
}
if (Slong()==1)
uyarı("2");
}
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
int SShort()
{int MS=0;
if (Open[1]>Close[2] && Close[1]<Open[2] && Open[1]>Close[1] && Open[2]<Close[2])
MS=1;
dönüş(MS);
}
//+------------------------------------------- --------------------+
int Suzun()
{
intML=0;
if(Open[1]<Close[2] && Close[1]>Open[2] && Open[1]<Close[1] && Open[2]>Close[2])
ML=1;
dönüş(ML);
}
//+------------------------------------------- --------------------+
 

Zamana göre bir dizi filtre: Başlangıç ve Bitiş

(ve sadece değil...)

Neyi ve nasıl olduğunu sorduğunda, kendine geldiği sonuç bu.


1. Günlük faaliyetleri gerçekleştirme yasağı veya izni.


Seçenek numarası 1.

 // Закрыть все позиции в конце дня в указанное время
if ( Hour ( ) = = 23 & & Minute ( ) > = 45 ) 
{ ЗакрытьДень ( ) ; }


// Запретить эксперту торговать С и ПО
if ( ( Hour ( ) = = 22 & & Minute ( ) > = 00 ) & & ( Hour ( ) = = 23 & & Minute ( ) > = 59 ) ) return ;

Bu seçeneklerdeki "geçerlilik" süresinin saatin sonuna ve dakika sayısının 59 saniyesine kadar uzandığını unutmayın.

onlar. 23:59 etkinliğin belirtilen bitiş saati aslında 23:59:59 saatine sahip

Ve saatin sonuna kadar, çünkü ">=" karşılaştırma operatörü dakika cinsinden kullanılır, ancak bu bir sorun değildir ve "==" belirtebilirsiniz,

ancak, süreyi 59 saniyeye silmek yine de devam edecek...


Seçenek numarası 2.

Ayar koşulları açısından daha doğru...

 // Выборка ОТ и ДО
if ( OtTime ( 2 , 15 , 21 ) < OrderCloseTime ( ) & & OrderCloseTime ( ) < DoTime ( 4 , 58 , 33 ) )
{ Действия ; }

// Функции преобразования 
datetime OtTime ( int h = 0 , int m = 0 , int s = 0 ) { datetime ot ;
ot = ( h * 3600 ) + ( m * 60 ) + s + StrToTime ( TimeToStr ( TimeCurrent ( ) , TIME_DATE ) ) ;
return ( ot ) ; }
//--------------
datetime DoTime ( int h = 0 , int m = 0 , int s = 0 ) { datetime dt ;
//if(h>23||h<0) Alert("Должно быть от 0 до 23"); h=0; 
//if(m>59||m<0) Alert("Должно быть от 0 до 59"); m=0;
dt = ( h * 3600 ) + ( m * 60 ) + s + StrToTime ( TimeToStr ( TimeCurrent ( ) , TIME_DATE ) ) ;
return ( dt ) ; }

Zaman, işleve geçirilen parametrelerde, örneğin 21:15:23 (21,15,23) olarak belirtilerek ayarlanır.

Çirkin olduğu açık, ancak oldukça çalışan bir kod ...

ZY: zakomentarenaya giriş parametrelerinin geçerliliğini kontrol etmek tesadüfi değildir.

Çünkü yanlış girerseniz çatıyı uçurur. Henüz başka bir yol bulamadım ve yorumladım.

Bu nedenle, bu sorunu çözmenin bir yolu için çok minnettar olurum ...


Seçenek numarası 3.

Anlaşıldığı üzere, en basit ve en doğru ...

 // Внешние параметры, могут быть экстернами
string ВН = "02:15" ; // начало события
string ВК = "04:58" ; // конец события

int start ( )
{
int m ;
datetime vn = StrToTime ( ВН ) ;
datetime vk = StrToTime ( ВК ) ;
// либо напрямую указывать время по типу:
//  datetime vn=StrToTime("02:15");
//  datetime vk=StrToTime("04:58");

for ( int m = 0 ; m < OrdersHistoryTotal ( ) ; m + + ) 
{
OrderSelect ( m , SELECT_BY_POS , MODE_HISTORY ) ;
if ( ( OrderCloseTime ( ) > vn ) & & ( OrderCloseTime ( ) < vk ) )
{ Действия ; }
}

return ( )
}

Görünüşe göre tüm basitlik, StrToTime () işlevi tarafından kendisine iletilen parametrelerin dönüşümünün özelliğinde yatmaktadır.

Örneğin, yalnızca "SS:DD:SS" saatini girerseniz, çıktı her geçerli günün saati olacaktır ...


Bu arada...

 // можно написать и так:
if ( ( OrderCloseTime ( ) > StrToTime ( ВН ) ) & & ( OrderCloseTime ( ) < StrToTime ( ВК ) ) )
// или даже так:
if ( ( OrderCloseTime ( ) > StrToTime ( "02:15" ) ) & & ( OrderCloseTime ( ) < StrToTime ( "04:58" ) ) )

Seçimi saatlere göre günlerle birleştirerek, türe göre filtreleyebilirsiniz:

- her gün saat 18:00'de olanlar veya belirtilen süre içinde her gün olanlar Başlangıç ve saat: dakika: saniye

Bununla birlikte, gün aralığı da şu andan itibaren çerçevelenebilir ...


2. DateFirstDayMonday() işlevi

( DateOfMonday () temel alınarak)

 datetime DateFirstDayMonday ( ) 
{ 
datetime dfdm ;
dfdm = StrToTime ( TimeToStr ( TimeCurrent ( ) , TIME_DATE ) ) - ( ( Day ( ) - 1 ) * 86400 ) ;
return ( dfdm ) ;
}

Geçerli ayın 00:00:00 saati ile ilk günün tarihini döndürür.

Ayın BAŞLANGICINDAN veya BAŞLAMADAN ÖNCEKİ olaylara filtre uygulamak gerekiyordu ...

 // выборка закрытых ордеров с начала месяца:
if ( DateFirstDayMonday ( ) < OrderCloseTime ( ) )
{ Действия ; }

// выборка ДО начала месяца (с начала истории счёта):
if ( DateFirstDayMonday ( ) - 1 > OrderCloseTime ( ) )
{ Действия ; }

İkinci örnekte DateFirstDayMonday()-1, "23:59:59 ile önceki ayın son günü" saatini yazdırır


...

Önceden, tekme atmamanızı rica ediyorum, çünkü chaineG.

:)))

 
Igor, lütfen bu göstergeye uyarı eklememe yardım et
Dosyalar:
 
kombat >> :

Önceden, tekme atmamanızı rica ediyorum, çünkü chaineG. :)))

Chayneg, chayneg değil, römorkörü çoktan aldı, o yüzden sonuna kadar götür. Bu nedenle, izin verilen çalışma süresini, kapanış saatini aşağıdaki gibi ayrı Boole işlevlerine ayırmayı ister:

bool TradeTime(Ticaret başlangıç zamanı, Ticaret bitiş zamanı)

O zaman if (TradeTime(..,..)) kullanmak ve çalışmak çok uygun olacaktır!

 
granit77 >> :

Chayneg, chayneg değil, römorkörü çoktan aldı, o yüzden sonuna kadar götür. Bu nedenle, izin verilen çalışma süresini, kapanış saatini aşağıdaki gibi ayrı Boole işlevlerine ayırmayı ister:

bool TradeTime(Ticaret başlangıç zamanı, Ticaret bitiş zamanı)

O zaman if (TradeTime(..,..)) kullanmak ve çalışmak çok uygun olacaktır!



Zaten... ;)

Bir banka için aynı anda iki zamanlamaya sahip bir değişken yapıyorum:

- 22:00'de devir öncesi tüm siparişlerin ve pozisyonların kapatılması

- devir işleminin başlangıcından 22:00'de günün sonuna kadar 23:59'da işlem duraklaması

(ek kontroller olmadan ham sürüm)

 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHH Стартуем... HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH>
int start ( ) {
//--- Общая проверка --------------------------------------------------------+
if ( ! IsCondition ( ) ) { Print ( "Низззяяя..." ) ; return ; }
//--- Задание неторгового времени (паузы) -----------------------------------+
ObjectDelete ( "НЕТОРГВРЕМЯ" ) ;
if ( ( TimeCurrent ( ) > StrToTime ( "22:00" ) ) & & ( TimeCurrent ( ) < StrToTime ( "23:59:59" ) ) ) 
{ NoTradeTime ( ) ; return ; }
//--- Принудительное закрытие всех ордеров и позиций в конце дня ------------+
if ( Hour ( ) = = 21 & & Minute ( ) > = 45 ) { ЗакрытьДень ( ) ; return ; }
//*метод имеет недостаток: он будет закрывать до конца указаного часа...
//*например время 21:45, закрывать будет до 21:59:59 а с 22:00 прекратит.
//*впринципе это нам не повредит...
//--- Конец условий ---------------------------------------------------------+
// бла-бла-бла...
return ( 0 ) ;
}
 
kombat >> :

..(ek kontroller olmadan ham sürüm)

Vinin, zamanında, çok ayrıntılı ve çalışılmış olarak çalışmak için ayrı işlevlere sahipti. Web sitesindeki danışmanlara bakın veya onunla iletişime geçin.

 
granit77 >> :

Vinin, zamanında, çok ayrıntılı ve çalışılmış olarak çalışmak için ayrı işlevlere sahipti. Web sitesindeki danışmanlara bakın veya onunla iletişime geçin.

Teşekkürler, ama henüz gerekli değil...

Bu danışmana biraz zaman ayırıyorum,

yani orada yazmanın bir prensibi var ve nasıl yazılacağı da belli...

*

Bu konuyu çöpe atmamak için ana metni bankanın forumuna yazacağım.

Zamanı gelince... ;)

 
granit77 >> :

bool TradeTime(Ticaret başlangıç zamanı, Ticaret bitiş zamanı)

O zaman if (TradeTime(..,..)) kullanmak ve çalışmak çok uygun olacaktır!

Igor Kim'in böyle bir işlevi sipariş etmesi gerekiyor.

 
goldtrader писал(а) >>

Igor Kim'in böyle bir işlevi sipariş etmesi gerekiyor.

İsteğe katılıyorum! Puan. kullanışlı ve istenen özellik. Mevcut ticaret gerçekleri ışığında....

Hatta orada iki TIME aralığı sağlamak bile mümkündür.