[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 632

 
alsu :

Örneğin, PeriodSMA ile basit bir hareketli ortalama hesaplamanız gerekiyor. SMA'yı hesaplamak için, son PeriodSMA çubuklarının değerlerini ekleyin ve PeriodSMA'ya bölün. Açıkçası, bu Bars-1, Bars-2, ..., Bars-PeriodSMA+1 numaralı çubuklar için yapılamaz, çünkü hesaplama için gerekli sayıda çubuğa sahip değiliz (en soldaki çubukta Bars-1 indeksi var). Bu nedenle, göstergeyi grafikteki son çubuktan değil, hesaplama için gerekli tüm verilere sahip olduğumuzdan, yani. Bars-PeriodSMA indeksine sahip bir çubuktan.

Neden keyfi olarak farklı değil de tam olarak bu değeri yazalım? Evet, çünkü hesaplamanın başlangıcında, hesaplamanın doğruluğundan ödün vermeden maksimum çubuk sayısını hesaplamanıza izin veren böyle bir kaymadır.

Ancak en basit durumu tarif ettiğimi unutmayın. Bazen, programın hesaplamalar için kaç tane geçmiş çubuğa ihtiyaç duyduğu ve böyle bir kaymanın tam olarak nereden geldiği koddan hemen belli olmaz. Öyleyse, görünüşe göre, kodu yazanla konuşup sormalısın. Ancak genel olarak, evrensel bir yol vardır - sadece koda bakın, program çalışması sırasında fiyat verileri ve endeks tampon verileri kullanılırken prensipte maksimum çubuk endeksinin ne elde edilebileceğine bakın, genellikle bu aşamada her şey netleşir.. .

Şimdi her şey yerine oturdu. Nezaketiniz için teşekkürler Alex!
 
skyjet :


Açıklama için teşekkürler!

Ve açıklığa kavuşturmak için, mekanik olarak 0 eklersem, TP ve SL bu tür terminallerde çalışır mı?


Elbette yapacaklar.
Bunun için varlar, herhangi bir değeri ayarlamak için harici değişkenler.

Ancak, size tavsiye edilenleri başlatma modülüne yerleştirmek daha kolaydır.
Veya bu formda:
 // для терминала с 5 знаками
if (Digits == 3 || Digits == 5 ) {
   decimal = 10 ; // Определяет кол-во пунктов в четвертом(втором) знаке
   STOPLOSS *= decimal ;
   TAKEPROFIT *= decimal ;
   slippage *= decimal ; // прочие целочисленные переменные в пунктах
} else decimal = 1 ;
değişkenler otomatik olarak ayarlanır ve diğer ihtiyaçlar için " ondalık " çarpanı kullanın
 
skyjet :


Спасибо за разъяснения!

И просто чтобы уточнить, если я механическим путем добавлю 0, то TP и SL будут работать в данном типе терминалов?

prorab :

Elbette yapacaklar.
Bunun için varlar, herhangi bir değeri ayarlamak için harici değişkenler.

Ancak, size tavsiye edilenleri başlatma modülüne yerleştirmek daha kolaydır.
Veya bu formda:
değişkenler otomatik olarak ayarlanır ve diğer ihtiyaçlar için " ondalık " çarpanı kullanın

Bu görevin açıklığa kavuşturulması gerekiyor:

  • Giriş parametreleriniz (STPOLOSS, TAKEPROFIT, vb.) 4\2 karakter ile girilmelidir !!!
 

Güzel gün…

SOS !!! İYİ İNSANLAR, YARDIM !!! Çatı yeni geliyor... Genel olarak programlamada (kendi başıma öğreniyorum) ve özellikle MQL'de başlangıç seviyesindeyim. Basit bir gösterge yazdı: "tek kişide" RSI + Bollinger Bantları (aşağıda gösterge kodunun tamamı verilmiştir). Ancak sorun şu: Buf_std_dev dizisini bildirirken, içindeki öğelerin sayısını açıkça belirtmezsem (yani, dizi bildiriminin bulunduğu satır şuna benziyor: double Buf_std_dev [] ) , o zaman bu gösterge şurada görüntülendiğinde istemci terminal penceresinde ( CT ), aşağıdaki resmi alıyorum:

Şekil için açıklamalar:

a) En üstte, CT ile birlikte verilen gösterge setine dahil olan RSI vardır ve Bollinger Bantları sürüklenerek bu RSI penceresine sürüklenir . ve damla );

b) en altta benim tarafımdan programlanan RSI ;

Derleyici herhangi bir hata veya uyarı vermez.

 

Buf_std_dev dizisini bildirirken, içindeki öğelerin sayısını açıkça belirtirsem (yani, dizi bildiriminin bulunduğu satır şöyle görünür: double Buf_std_dev [ 5502 ] , burada 5502 , Bars değişkeni kullanılarak elde edilen çubukların sayısıdır ), o zaman her şey yerine oturur (çünkü iki göstergenin karşılaştırmasından da anlaşılacağı gibi: tüm değerler aynıdır):

İkinci şekilde olduğu gibi görüntüyü kaydetmek için ne yapmanız gerektiğini söyleyin, ancak Buf_std_dev dizisindeki öğelerin sayısını açıkça AYARLAMAYIN.

P. S. Yanıtınız için şimdiden teşekkür ederiz.

 
tüm kodu göster
 

Kodu ekliyorum (bazı parçalar olmadan - 4 MB'a sığmaz!!):

....
double Buf_rsi[];                                                       //открываем индикаторный массив для значений RSI+
double Buf_ma[];                                                         //открываем индикаторный массив для значений скользящей средней по RSI+
double Buf_up_line[];                                                   //открываем индикаторный массив для значений ВЛБ по RSI+
double Buf_down_line[];                                                 //открываем индикаторный массив для значений НЛБ по RSI+
double Buf_std_dev[ 5498 ];                                               //открываем массив для хранения данных по стандартному отклонению  

string timeframe[ 9 ];                                                     //объявляем массив для значений таймфреймов
extern int Период_RSI= 14 ;                                               //внешняя переменная: период RSI+
extern int Применить_к= PRICE_CLOSE ;                                     //внешняя переменная: цена, для к-й рассчитывается RSI+
extern int Сдвиг= 0 ;                                                     //внешняя переменная: сдвиг относительно текущего графика RSI+
extern double Сигма= 2.0 ;                                                 //внешняя переменная: количество стандартных отклонений для расчета лент Боллинджера по RSI+
extern int МА= 21 ;                                                       //внешняя переменная: период скользящей средней для расчета лент Боллинджера по RSI+
....
   if ( Bars <=Период_RSI) return ( 0 );                                       //если баров на графике меньше, чем период RSI+, то выходим
//+-------------------------------------------------------------------------------------- 9 --
   int counted_bars= IndicatorCounted ();                                 //количество посчитанных баров
   int i;                                                               //техническая переменные: счетчики

   int limit= Bars -counted_bars;                                         //индекс первого непосчитанного по массиву Buf_ma (т.к. этот массив НЕ является массивом таймсерией)
   if (counted_bars< 0 )limit--;                                           //если значение переменной counted_bars больше 0, то увеличиваем на 1 значение переменной limit
//+-------------------------------- Рассчет линий индикатора ---------------------------- 10 --
   for (i= 0 ;i<=limit;i++)Buf_rsi[i]= iRSI ( NULL , 0 ,Период_RSI,Применить_к,i); //рассчет значения RSI+ на i-ом баре      
   for (i= 0 ;i<=limit;i++)                                                 //цикл по рассчету линий на основе RSI+     
       {                                                                 //начало for
        Buf_std_dev[i]= iStdDevOnArray (Buf_rsi, Bars ,МА,Сдвиг, MODE_SMA ,i); //рассчитываем стандатное отклонение по массиву RSI+
        Buf_ma[i]= iMAOnArray (Buf_rsi, Bars ,МА,Сдвиг, MODE_SMA ,i);         //рассчет значения MA по RSI+ на i-ом баре
        Buf_up_line[i]=Buf_ma[i]+Сигма*Buf_std_dev[i];                   //рассчет значения ВЛБ по RSI+
        Buf_down_line[i]=Buf_ma[i]-Сигма*Buf_std_dev[i];                 //рассчет значения НЛБ по RSI+
       }                                                                 //конец for
   for (i= 0 ;i<= Bars ;i++)                                                 //цикл по подсчету количества данных внутри ЛБ
      {                                                                 //начало for
       int sum;                                                         //техническая переменные: сумма данных, к-е находятся внутри ЛБ 
       if (Buf_rsi[i]>Buf_down_line[i]&&Buf_rsi[i]<Buf_up_line[i])sum++; //если значение RSI+ > НЛБ и значение RSI+ < НЛБ, то переменная sum увеличиваестся на 1 (т.о.)
      }                                                                 //конец for
//+------------------------------------------------------------------------------------- 11 --
 
FAQ :
tüm kodu göster

Lütfen bana 4 MB'den daha büyük bir kodu buraya dökmenin (veya buraya parçalar halinde dökmenin) bir yolu olup olmadığını söyleyebilir misiniz?
 

Buf_std_dev'iniz bir gösterge arabelleği değilse (sekizden biri), bildirirken, boyutunu veya herhangi bir boyutunu (gelecekte (boyutunu) değiştirecekseniz) belirtmeniz gerekir.

 

Kesinlikle öyle değil ... Mümkünse hemen 2 soru daha:

1. Eğer ona ( Buf_std_dev dizisi) (ve diğer dördüne) bir tampon atarsam, bu onun gösterge penceresinde de görüntüleneceği anlamına mı gelir?

2. Ve eğer ona bir tampon atamazsam (doğru anladıysam) şu durum ortaya çıkacak: Diyelim ki 100 barlık bir boyut belirledim. Ardından, yeni çubuklar göründüğünde (örneğin, Bars=101 ise), yalnızca duyuru sırasında belirtilen son 100 çubuk için hesaplama yapılır (yani en eski çubuk - 101 - atılır). Bu nedenle, history yüklenirken dizinin boyutu her zaman yalnızca 100 bar mı olacak (veya bildirirken belirteceğim başka bir değer)?