Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Bu belgelerde DEĞİLDİR! Bu nedenle, bunlar ücretsiz bir tema üzerine denemelerdir. Otomatik başlatma hakkındaki ifademin yanı sıra, daha da havalı. En azından benimki bir uyarı ile oldu ...
Kesinlikle her şey belgelerde açıklanamaz.
"prev_calculate==0" elde ettik, bu da tüm gösterge arabelleğini gözden geçirmemiz gerektiği anlamına geliyor. "prev_calculate!=0", bu durumda yalnızca en sağdaki çubuğu veya birkaç yeni çubuğu saydığımız anlamına geliyorsa ( limit kullanın):
{
//---
if (prev_calculated== 0 )
{
Print ( "prev_calculated==0" );
for ( int i= 0 ;i<rates_total;i++)
{
//--- здесь принудительно каждому элементу массива присваиваем значение (мне лень писать эти массивы :) )
}
return (rates_total);
}
//--- экономный пересчёт только самого правого бара или новых баров
int limit=rates_total-prev_calculated+ 1 ;
//--- а ниже нужно использовать цикл для обсчета самого правого бара или новых баров
for ( int i=0;i<limit;i++)
{
ExtBuffer[i]=чевой-то там;
}
Kesinlikle her şey belgelerde açıklanamaz.
"prev_calculate==0" elde ettik, bu da tüm gösterge arabelleğini gözden geçirmemiz gerektiği anlamına geliyor. "prev_calculate!=0", bu durumda yalnızca en sağdaki çubuğu veya birkaç yeni çubuğu saydığımız anlamına geliyorsa ( limit kullanın):
{
//---
if (prev_calculated== 0 )
{
Print ( "prev_calculated==0" );
for ( int i= 0 ;i<rates_total;i++)
{
//--- здесь принудительно каждому элементу массива присваиваем значение (мне лень писать эти массивы :) )
}
return (rates_total);
}
//--- экономный пересчёт только самого правого бара или новых баров
int limit=rates_total-prev_calculated+ 1 ;
//--- а ниже нужно использовать цикл для обсчета самого правого бара или новых баров
for ( int i=0;i<limit;i++)
{
ExtBuffer[i]=чевой-то там;
}
Anlamı nedir??? En sağdaki çubuk dışında herhangi bir değere ihtiyacım yok. AMA !!! Daha sonra, bu en sağdaki sola kaydığında, oraya konulan bu verilerin kaydedilmesi gerekir...
Tüm tamponları yazmama gerek yok ama benim isteklerim dikkate alınarak bir tane yazılabilirdi. Bu ilk çalıştırmaysa, tüm geçmiş boş olmalıdır. Ön_hesaplananın sıfırlanması, takas geçmişinin bir sonucu olarak meydana geldiyse, arabelleğe konulan HER ŞEY değişmeden kalmalıdır. Delikler olsa bile.
Ön sonuçlar:
Neden saçmalık taşıyorsun? Böyle bir başlatma OnCalculate'e konursa, herhangi bir döngü olmaksızın bir patlama ile sıfırlanır. Ancak ön_hesaplanan sıfırlanırsa, çalışma sırasında biriken tüm verileri sıfırlar...
Anlamı nedir??? En sağdaki çubuk dışında herhangi bir değere ihtiyacım yok. AMA !!! Daha sonra, bu en sağdaki sola kaydığında, oraya konulan bu verilerin kaydedilmesi gerekir...
...
Zaten bir yol önerdim:
açılış zamanı ile senkronizasyondur, ancak burada nüanslar olabilir: örneğin, çubuk açılış zamanı (bir dosyaya kaydedilmiş) 2016.09.05 idi. 25:02 ve şimdi grafikte zamanı 2016.09.05 olan bir çubuk var. 25:01.
Gösterge bir veri tabanı veya depo değildir.
Bu nedenle, gösterge geçmiş için hesaplanamayan verileri görüntülerse, geriye kalan tek şey gösterge arabelleğini bir dosyaya kaydetmek ve ardından (geçmişin değiştirilmesi durumunda) dosyayı ve çubukları okuyup senkronize etmektir.Zaten bir yol önerdim:
Gösterge bir veri tabanı veya depo değildir.
Bu nedenle, gösterge geçmiş için hesaplanamayan verileri görüntülerse, geriye kalan tek şey gösterge arabelleğini bir dosyaya kaydetmek ve ardından (geçmişin değiştirilmesi durumunda) dosyayı ve çubukları okuyup senkronize etmektir.... ve tercihen bir dosyaya yazmadan, hatta daha fazlası GV'de.
Vladimir, bu konuyu prev_calculated için bir uzman olarak seçtiğine göre, bu konuyu bu konu için faydalı yap. İlk olarak, genellikle bu değişkenle karşılaşılan sorunu belirlemek gerekir. Bu sorunlara aşina değilseniz, formüle edeceğim
---
ve - en azından söylediği yardımda
sadece bunun için kullanamazsınız - her an bir incir gösterebilir. Bunun nedeni (geliştiriciler tarafından söylenen yardımda + yazılmıştır), sağlama toplamı değiştirildiğinde, genellikle geçmiş sayfalama nedeniyle değişkenin sıfıra sıfırlanmasıdır.
---
b - OnCalculate'in ilk başlatılması için de prev_calculated == 0'ı bayrak olarak kullanamazsınız. Aynı sebepten
---
c - ve geçmiş sayfalama bayrağı olarak prev_calculated == 0 da kullanılamaz
---
Kullanıcılar tarafından tırmık aşınmasını ve yıpranmasını azaltmak için, bunu kısa ve net bir şekilde formüle etmek arzu edilir: eğer mevcut OnCalculate çağrısında geçmiş sayfalaması gerçekleşmediyse, prev_calculated bir öncekinde işlenen çubukların sayısını içerir. Olursa sıfırlanır.
---
Listelenen 3 fişin tümü koltuk değneği ile atlanabilir. Ancak tanım gereği MT5'te koltuk değneği olmadığı için, siz Vladimir, bu 3 görev için güzel bir çözüm bulabilirdiniz. Bunun gibi çirkin bir şey:
#property indicator_buffers 0
#property indicator_plots 0
struct BROWNIE {
int i_Prew_Calculated; // кол-во посчитанных баров
bool b_First_Run; // флаг первого запуска
bool b_History_Updated; // флаг обновления истории
BROWNIE() {
i_Prew_Calculated = WRONG_VALUE ;
b_First_Run = true ;
b_History_Updated = false ;
}
void f_Reset( bool b_Reset_First_Run = true ) {
i_Prew_Calculated = WRONG_VALUE ;
if (b_Reset_First_Run) b_First_Run = true ;
b_History_Updated = false ;
}
void f_Update( int i_New_Prew_Calculated = WRONG_VALUE ) {
if (i_New_Prew_Calculated > - 1 ) {
b_History_Updated = i_New_Prew_Calculated == 0 && i_Prew_Calculated > WRONG_VALUE ;
if (b_First_Run) b_First_Run = false ;
if (i_Prew_Calculated == WRONG_VALUE ) i_Prew_Calculated = i_New_Prew_Calculated;
else if (i_New_Prew_Calculated > 0 ) i_Prew_Calculated = i_New_Prew_Calculated;
}
}
};
BROWNIE go_Brownie;
int OnInit ( void ) { return ( INIT_SUCCEEDED );}
void OnDeinit ( const int reason) {
go_Brownie.f_Reset(reason != REASON_CHARTCHANGE );
}
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime & Time [],
const double & Open [],
const double & High [],
const double & Low [],
const double & Close [],
const long &TickVolume[],
const long & Volume [],
const int &Spread[]
) {
if (go_Brownie.b_First_Run) { /* обработка 1го запуска */ }
if (go_Brownie.b_History_Updated) { /* обработка обновления истории */ }
go_Brownie.f_Update(prev_calculated);
return (rates_total);
}
Feragatname: kod çıplak bir fikirdir, grafikte çalıştırmadım
OnDeinit'in arabellek kullanmayan bir gösterge için örnek işlemesi vardır, zaman çerçeveleri ve sembollerle ilgilenmez, her zaman çerçevesi/sembol değişikliği ile her şeyi sıfırdan başlatmanız gerekmez. Örneğin, mevcut grafik öğelerle çalışır, hesabın durumu, siparişler vb. hakkında bilgileri görüntüler.
---
Bu arada
daha sonra yalnızca gösterge arabelleğini bir dosyaya kaydetmek ve ardından (geçmişin değiştirilmesi durumunda) dosyayı ve çubukları okuyup senkronize etmek için kalır.
... ve tercihen bir dosyaya yazmadan, hatta daha fazlası GV'de.
Belki bu sana yakışır?
Ayrıntılara girmedim, ancak bu, bu kod satırıyla çözüldü. Dizin kayması ile bir diziyi kendisine kopyalama.
ArrayCopy (arr, arr, 0 , 1 , 4 );
// и дальнейшее заполнение 4го индекса массива.