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
Veya geliştiricilerin dikkatini gösterge arabelleklerini başlatma sorununa çekmek daha iyi olabilir mi? MT4'te neden böyle bir sorun yok? Belki yine tam bir anlayış değil? Sorun şu ki, SOME'da göstergeyi grafikten çıkardıktan sonra arabelleklerin zorunlu başlatılmasıyla bile, tüm arabellekler çöp içermez ve ondan hiçbir şey kaldırılamaz...
Şahsen ben koltuk değneklerine karşı değilim, ancak bu koltuk değnekleri çok zor değilse ve olumlu bir etkisi varsa. Ancak bir dosyaya sonradan okuma ile yazmak, beceriksiz bir koltuk değneğidir.
Bunu nasıl hayal ediyorsunuz: "... göstergeyi tüm arabelleklerde değil, SOME'daki grafikten çıkardıktan sonra ..." ? Bu şekilde, göstergeyi grafikten çıkardıktan sonra gösterge arabelleklerine erişiminiz olur mu?
Sorunu daha ayrıntılı bulmaya çalışalım. Standart bir kümeye ihtiyacımız var: kod + ne yaptık + ne elde ettik ...
Bunu nasıl hayal ediyorsunuz: "... göstergeyi tüm arabelleklerde değil, SOME'daki grafikten çıkardıktan sonra ..." ? Bu şekilde, göstergeyi grafikten çıkardıktan sonra gösterge arabelleklerine erişiminiz olur mu?
Sorunu daha ayrıntılı bulmaya çalışalım. Standart bir kümeye ihtiyacımız var: kod + ne yaptık + ne elde ettik ...
Tamamen bir tahmin: belki önceki arabellekler tarafından işgal edilen mevcut arabellek erişimi sırasında aynı bellek alanına çarpıyor.
Sohbete fazla dalmadım, beni tekmeleme, Alexey yeniden başlatırken (terminal açık/kapalı) veya yalnızca prev_calculated = 0 (prev_calculated > 0 durumunda) arabelleklerdeki verilerin arabelleklerde kalmasını istiyor mu? önceki)?
Bunu nasıl hayal ediyorsunuz: "... göstergeyi tüm arabelleklerde değil, SOME'daki grafikten çıkardıktan sonra ..." ? Bu şekilde, göstergeyi grafikten çıkardıktan sonra gösterge arabelleklerine erişiminiz olur mu?
Sorunu daha ayrıntılı bulmaya çalışalım. Standart bir kümeye ihtiyacımız var: kod + ne yaptık + ne elde ettik ...
İşte gösterge kodu
| BalansEquityTest.mq5 |
| Viktorov |
| v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link "v4forex@yandex.ru"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 3
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrGold , clrGreen , clrRed
#property indicator_width1 2
#property indicator_label1 "Balance"
#property indicator_type2 DRAW_HISTOGRAM2
#property indicator_color2 clrCrimson
#property indicator_width2 2
#property indicator_label2 "EquityMin"
#property indicator_type3 DRAW_HISTOGRAM2
#property indicator_color3 clrDarkViolet
#property indicator_width3 2
#property indicator_label3 "EquityMax"
double balance[];
double clrBalance[];
double equityMaxB[];
double equityMinB[];
double equityMax[];
double equityMin[];
double maxEquity, minEquity;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
SetIndexBuffer ( 0 , balance, INDICATOR_DATA );
SetIndexBuffer ( 1 , clrBalance, INDICATOR_COLOR_INDEX );
SetIndexBuffer ( 2 , equityMin, INDICATOR_DATA );
SetIndexBuffer ( 3 , equityMinB, INDICATOR_DATA );
SetIndexBuffer ( 4 , equityMax, INDICATOR_DATA );
SetIndexBuffer ( 5 , equityMaxB, INDICATOR_DATA );
PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , 0.0 );
PlotIndexSetDouble ( 1 , PLOT_EMPTY_VALUE , 0.0 );
PlotIndexSetDouble ( 2 , PLOT_EMPTY_VALUE , 0.0 );
PlotIndexSetDouble ( 3 , PLOT_EMPTY_VALUE , 0.0 );
PlotIndexSetDouble ( 4 , PLOT_EMPTY_VALUE , 0.0 );
ArrayInitialize (balance, 0.0 ); // принудительная
ArrayInitialize (equityMax, 0.0 ); // инициализация
ArrayInitialize (equityMaxB, 0.0 ); // всех
ArrayInitialize (equityMin, 0.0 ); // буферов
ArrayInitialize (equityMinB, 0.0 ); // индикатора
ArraySetAsSeries (balance, true ); // все
ArraySetAsSeries (clrBalance, true ); // буферы
ArraySetAsSeries (equityMax, true ); // индикатора
ArraySetAsSeries (equityMaxB, true ); // имеют
ArraySetAsSeries (equityMin, true ); // флаг
ArraySetAsSeries (equityMinB, true ); // AS_SERIES
IndicatorSetInteger ( INDICATOR_DIGITS , 2 );
IndicatorSetString ( INDICATOR_SHORTNAME , "Show Money" );
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
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 &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if (prev_calculated == 0 )
return (rates_total);
double bal = AccountInfoDouble ( ACCOUNT_BALANCE );
double equity = AccountInfoDouble ( ACCOUNT_EQUITY );
if (rates_total > prev_calculated)
{
minEquity = 0 ;
maxEquity = 0 ;
}
minEquity = fmin ((minEquity == 0 ? AccountInfoDouble ( ACCOUNT_BALANCE ) : minEquity), equity);
maxEquity = fmax (maxEquity, equity);
balance[ 0 ] = AccountInfoDouble ( ACCOUNT_BALANCE );
clrBalance[ 0 ] = 0.0 ;
equityMinB[ 0 ] = balance[ 0 ];
equityMin[ 0 ] = minEquity;
equityMaxB[ 0 ] = balance[ 0 ];
equityMax[ 0 ] = maxEquity;
if (balance[ 0 ] > balance[ 1 ])
clrBalance[ 0 ] = 1.0 ;
if (balance[ 0 ] < balance[ 1 ])
clrBalance[ 0 ] = 2.0 ;
Comment ( PositionsTotal ());
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
Biraz sonra bir video yayınlayacağım, o zaman her şey netleşecek. Parmaklarda eskisinden daha erişilebilir açıklayamam.
Umarım videoyu indirip açmayı zorlaştırmazsınız.
Ne yazık ki, bir nedenden dolayı, göstergenin tablodan silinmesi ve eklenmesi gerçeği sabit değildi, ancak yine de göstergenin orada olduğu, sonra gittiği ve tekrar orada olduğu gerçeği var. Bu sadece onu kaldırmak ve geri ayarlamaktır.
Gösterge yeniden yüklendikten sonra veri penceresine dikkat edin. Arabelleklerin zorla başlatılmasından sonra bile, uzay çöpü orada kalır.
İşte gösterge kodu
Böyle bir deney yapmak gerekir: sadece bir tabloyu açık bırakın ve üzerine göstergeyi koyun ve kaldırın. Ve terminal ve işletim sistemi hakkında bilgiye ihtiyacınız var (terminalin "Journal" sekmesi).
Peki ya bir çizelge? Göstergenin sadece bir grafikte olması yeterli değil mi?
katma:
İşletim sisteminin göstergenin davranışını etkileyebileceğine inanmasam da, yine de sistem ve terminal hakkında bilgiler
2016.10 . 16 20 : 56 : 34.904 Terminal Windows 7 Home Premium (x64 based PC), IE 11.00 , UAC, AMD FX- 4170 Quad-Core Processor , RAM: 10531 / 12255 Mb, HDD: 55167 / 244198 Mb, GMT+ 03 : 00
2016.10 . 16 20 : 56 : 34.904 Terminal MetaTrader 5 build 1455 started (MetaQuotes Software Corp.)
Peki ya bir çizelge? Göstergenin sadece bir grafikte olması yeterli değil mi?
2016.10 . 18 19 : 09 : 34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00 , UAC, Intel Core i3- 3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+ 02 : 00
2016.10 . 18 19 : 09 : 34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\ 038 C9E8FAFF9EA373522ECC6D5159962
Dachshunds... Durum şekillenmeye başlıyor. Bu kodu ekleyin:
//---
if (prev_calculated== 0 )
{
Print ( "prev_calculated==0" );
return (rates_total);
}
double bal= AccountInfoDouble ( ACCOUNT_BALANCE );
2016.10 . 18 19 : 09 : 34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00 , UAC, Intel Core i3- 3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+ 02 : 00
2016.10 . 18 19 : 09 : 34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\ 038 C9E8FAFF9EA373522ECC6D5159962
Yürütmeye başladım, ancak gösterge bir arabellekte başlatıldığında, neredeyse tüm veba sayılarının geçmişi.
Göstergeyi çıkardıktan ve bir süre sonra tekrar ayarladıktan sonra arabellekler boşalır.
Daha sonra kaldırma ve evrelemeyi tekrarlayacağım.
Ön sonuçlar:
Dachshunds... Durum şekillenmeye başlıyor. Bu kodu ekleyin:
//---
if (prev_calculated== 0 )
{
Print ( "prev_calculated==0" );
return (rates_total);
}
double bal= AccountInfoDouble ( ACCOUNT_BALANCE );
Bu şekilde eklendi