MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 673

 

Son cevaplardan sonra, resim netleşmeye başladı ve en bariz olan şey, programcı olmak benim kaderim değil :-)

Şimdiye kadar en basit listeyle başladım ve ortaya çıkan şu oldu:


2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[0] = 85.72 2018.10.19 00:00:00



Bazı durumlarda, herhangi bir nedenle fiyat, noktadan sonra herhangi bir yönde iki önemli rakamın boyutunu aşıyor.

Ve bu, hesaplamalarda herhangi bir hata olmadan gerçekleşir, bu sadece grafik tabanındaki fiyat değerinin çıktısıdır tmp1[i]=close[i];

Bu bir şekilde üstesinden gelinebilir mi yoksa görmezden gelinebilir mi?



 

Ondan beşle ilgili her şeyi atabilir ve dördü için bir şablon alabilirsiniz.


Bu, beşin dörtten nasıl farklı olduğunu bilenlere yazılabilir ve kesinlikle ben değilim :-)


 //--- Проверка количества доступных баров
   if (rates_total< fmax (period_ma, 4 )) return 0 ;


4 sayısı nereden geldi, kutsal anlamı nedir?

 
psyman :


Bu, beşin dörtten nasıl farklı olduğunu bilenlere yazılabilir ve kesinlikle ben değilim :-)



4 sayısı nereden geldi, kutsal anlamı nedir?

Kesinlikle dinlemiyorsun, okumuyorsun... Aynıydı:

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL4, yardım ve algoritmalar ve kodlar hakkında herhangi bir acemi sorusu

Artyom Trishkin , 2018.10.18 09:26

 //+------------------------------------------------------------------+
//| 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[])
  {
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)
   if (rates_total< 4 ) return 0 ;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.
   if (limit> 1 ) 
               // если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории
               // если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,
               // при подгрузке истории и на первом запуске - перерасчёт всей истории
     {
      limit=rates_total- 1 ;
       // здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
     }
//--- Расчёт индикатора
   for ( int i=limit; i>= 0 && ! IsStopped (); i--)
     {
       // необходимые действия по расчёту индикатора
     }

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

 
psyman :

Son cevaplardan sonra, resim netleşmeye başladı ve en bariz olan şey, programcı olmak benim kaderim değil :-)

Şimdiye kadar en basit listeyle başladım ve ortaya çıkan şu oldu:


2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[0] = 85.72 2018.10.19 00:00:00



Bazı durumlarda, herhangi bir nedenle fiyat, noktadan sonra herhangi bir yönde iki önemli rakamın boyutunu aşıyor.

Ve bu, hesaplamalarda herhangi bir hata olmadan gerçekleşir, bu sadece grafik tabanındaki fiyat değerinin çıktısıdır tmp1[i]=close[i];

Bu bir şekilde üstesinden gelinebilir mi yoksa görmezden gelinebilir mi?



Herşey yolunda. Kesirli sayıları yazdırmak için DoubleToString()'i gerekli hassasiyetle kullanmanız yeterlidir . Bu durumda, gerekli kesinlik Digits() olmalıdır.

 
psyman :

Son cevaplardan sonra, resim netleşmeye başladı ve en bariz olan şey, programcı olmak benim kaderim değil :-)

Şimdiye kadar en basit listeyle başladım ve ortaya çıkan şu oldu:


2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Günlük: tmp1[0] = 85.72 2018.10.19 00:00:00


Bazı durumlarda, herhangi bir nedenle fiyat, noktadan sonra herhangi bir yönde iki önemli rakamın boyutunu aşıyor.

Ve bu, hesaplamalarda herhangi bir hata olmadan gerçekleşir, bu sadece grafik tabanındaki fiyat değerinin çıktısıdır tmp1[i]=close[i];

Bu bir şekilde üstesinden gelinebilir mi yoksa görmezden gelinebilir mi?

bunlar gerçek bir sayı için olağan değerlerdir, program yazmayı öğrenebilirsiniz, herkes bununla başlar - sadece çok okumanız ve kendi kodlarınızı yazıp yazmaya çalışmanız gerekir

gerçek bir sayının doğruluğu, peygamber devesi ve hepsinin bellekte nasıl saklandığı hakkında, internette google'a bakabilirsiniz, depolama ilkeleri her yerde aynıdır

güzel çıktılar istiyorsanız DoubleToStr() kullanın

 
Igor Makanu :

bunlar gerçek bir sayı için olağan değerlerdir, program yazmayı öğrenebilirsiniz, herkes bununla başlar - sadece çok okumanız ve kendi kodlarınızı yazıp yazmaya çalışmanız gerekir

gerçek bir sayının doğruluğu, peygamber devesi ve hepsinin bellekte nasıl saklandığı hakkında, internette google'a bakabilirsiniz, depolama ilkeleri her yerde aynıdır

güzel çıktılar istiyorsanız DoubleToStr() kullanın

Uyumlu işlevleri kullanmanın mümkün olduğu durumlarda, bunları kullanıma sunmak daha iyidir. Ve sonra bu destan yeniden başlayacak. Bu durumda: DoubleToString()

 

Aynı enstrümanlar üzerinde bir danışmanın görevlendirilmesini yasaklamak nasıl mümkün olabilir?

Örneğin, danışman eur/usd penceresinde çalışır ve eur/usd için diğer pencerelerde başlatıldığında bazı uyarı mesajları görüntülenir. Yardım için minnettar olacağım.

 
gans71 :

Aynı enstrümanlar üzerinde bir danışmanın görevlendirilmesini yasaklamak nasıl mümkün olabilir?

Örneğin, danışman eur/usd penceresinde çalışır ve eur/usd için diğer pencerelerde başlatıldığında bazı uyarı mesajları görüntülenir. Yardım için minnettar olacağım.

forumda arama yaparak verileri bir danışmandan diğerine aktarmanız gerekir

veya terminalin global değişkenlerini kullanın (bu en kolay yoldur) - oraya ilk Expert Advisor tarafından değeri yazabilirsiniz ve Expert Advisor'ların sonraki kopyaları bu değeri okuyacak ve https://www. mql5.com/en/docs/globals

Документация по MQL5: Глобальные переменные терминала
Документация по MQL5: Глобальные переменные терминала
  • www.mql5.com
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
 
Igor Makanu :

forumda arama yaparak verileri bir danışmandan diğerine aktarmanız gerekir

veya terminalin global değişkenlerini kullanın (bu en kolay yoldur) - oraya ilk Expert Advisor tarafından değeri yazabilirsiniz ve Expert Advisor'ların sonraki kopyaları bu değeri okuyacak ve https://www. mql5.com/en/docs/globals

danışman aynı, aynı enstrümanlarda çalışmasını yasaklamanız gerekiyor
 
gans71 :
danışman aynı, aynı enstrümanlarda çalışmasını yasaklamanız gerekiyor

ve? 2 dakika içinde sertifikayı çalışamadın

özellikle bir dizgenin global bir değişkene nasıl aktarılacağıyla ilgiliyse, o zaman tek yol global bir değişken adı oluşturmaktır, yani. sizin durumunuzda, EURUSD'de bir danışman başlattı, kontrol edin:

if(GlobalVariableCheck(_Symbol)) .....

böyle bir değişken yoksa, böyle bir değişken oluşturun, bunun gibi bir şey:

if(GlobalVariableSet(_Symbol,Magic)==0) Print("Genel # değişkenine yazma hatası ",GetLastError());

o zaman EA sona erdiğinde global değişkeni silmeniz gerekir.

bir şekilde, terminal el altında değil ve görünüşe göre aramanın yönünü belirttim