Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1446

 
Alexey Viktorov #:

1. Taban kolu alınmamışsa, tabanın kapatılmasına gerek yoktur.

2. INVALID_HANDLE alınırsa, programın yürütülmesine neden devam edilsin? Bence bu durumda kesmek, geri dönmek daha iyidir

Şu anda var olmayan bir veritabanını tekrar tekrar açıp kapatmaya çalışıyorum ve hata çıktısını alamıyorum. Sanırım bu çıktı açılamayan tabana sorgu oluşturma anında geliyor.

Veritabanındaki kaydı her saniye güncelleyecek minimal bir test Uzman Danışmanı yapacağım. Hadi 10 çift üzerinde çalıştıralım ve her şey netleşecek. Burada yayınlayacağım ...
 
Evgeny Dyuka #:
Veritabanındaki kaydı her saniye güncelleyecek minimal bir test Uzman Danışmanı yapacağım. 10 çift üzerinde çalıştırın ve her şey netleşecek. Buraya göndereceğim.

İlginç. Bekliyor olacağım ...

 
Alexey Viktorov #:

İlginç. Bekliyor olacağım.

İşte bir uzman. Bir taban oluşturur (zaten mevcut değilse) ve geçerli saati saniyede bir kez içine yazar.
Kod içinde Print() yok.
10 çift üzerinde çalıştırdım ve hata aldım:

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

Bir hata almak için MT5'i kapatıp yeniden başlatmanız gerekir, ardından tüm EA'lar senkronize olarak çalışmaya başlar.

İyi olurdu:
1. Bu hatadan nasıl kurtulacağınızı anlamak için.
2. Tabanın kullanılamaması durumunda sıraya girecek bir şablon mekanizması icat etmek.

2. noktayı rastgele zamanla Sleep() ekleyerek çözdüm, ancak koltuk değneği gibi görünüyor.

GÜNCELLEME: Dosyayı yeniden yükledim, ilkinde bir hata vardı.

Dosyalar:
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

İşte bir uzman. Bir taban oluşturur (zaten mevcut değilse) ve geçerli saati saniyede bir kez içine yazar.
Kod içinde Print() yok.
10 çift üzerinde çalıştırdım, hatalar oluştu:

Bir hata almak için MT5'i kapatıp yeniden başlatmalısınız, ardından tüm Uzman Danışmanlar eşzamanlı olarak çalışmaya başlar.

İyi olurdu:
1. Bu hatadan nasıl kurtulacağımızı anlamak için.
2. Tabanın mevcut olmaması durumunda sıraya girecek bir şablon mekanizması icat etmek.

2. maddeyi rastgele zaman ile Sleep() ekleyerek çözdüm, ancak koltuk değneği gibi görünüyor.

GÜNCELLEME: Dosyayı yeniden yükledim, ilkinde bir hata vardı.

Ne yazık ki, bilgim yeterli değil. Sadece bir hatanın basıldığını fark edecek kadar

      DatabaseExecute(db, sql);

Bir sorgu oluşturmadan önce kullanılabilirliği kontrol etme imkanı yoktur.

Veritabanı açılıyor, ancak sorgu oluşturmak mümkün değil.

 
Sunucuda açık emir yok, durdurma ve alma yok, algo modları etkinleştirildi ve kurulum komutu geçiyor, ancak günlükler sessiz CTrade sınıfı. Test cihazında gerçek ticaret sessizliği üzerinde çalışır. Ne kontrol edilmeli?
 
mwwm CTrade sınıfı. Test cihazında gerçek ticaret sessizliği üzerinde çalışır. Ne kontrol edilmeli?

terminal günlüğü

 
Vladimir Deryagin #:

terminal günlüğü

Günlükleri açtığımı tahmin ediyorum, lotu hesaplayamıyorum. Neden gerçek hesaplama yapmak istemediğini anlamıyorum?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

Günlükleri açtığımı tahmin ediyorum, lotu hesaplayamıyor. Neden gerçek hesaplama yapmak istemediğini anlamıyorum?

Kayıt yok, bu yüzden birçok kez daha fazla tahmin olabilir.

Bir seçenek olarak, haç ticareti yaparken, piyasaya genel bakışta depozito para birimi ile çift seçilmezse, ticaret yapmayacaktır.

Örneğin, EURJPY ticareti yapıyoruz, para birimi USD yatırıyoruz, piyasaya genel bakışta EURUSD ve USDJPY mevcut olmalıdır.

 
Aleksandr Slavskii #:

Kayıt yok, bu yüzden çok daha fazla tahmin olabilir.

Bir seçenek olarak, haç ticareti yaparken, para yatırma para birimine sahip çift piyasaya genel bakışta seçilmezse, işlem yapmayacaktır.

Örneğin, EURJPY ticareti yapıyoruz, para birimi USD yatırıyoruz, piyasaya genel bakışta EURUSD ve USDJPY mevcut olmalıdır.

USD pro cent cinsinden hesap, XAUUSD ticareti

 

Herkese merhaba. MQL5'te tamponları kullanarak ilk çubuğa bir ok çizemiyorum.

MQL4'te aşağıdakileri yapıyorum:

Global bir değişken beyan edin double XX[];

init içine yaz:

SetIndexBuffer(0,XX);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,108);

Oncalculate'de şunu yazıyorum:

XX[1]=High[1]; Mum çubuğu 1'in üzerine çizilmiş bir ok alıyorum. ve hepsi bu

Aynı şeyi MQL5'te de yapıyorum:

Global bir değişken beyan edin double XX[];

init içinde yaz:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

Oncalculate'de şunu yazıyorum:

XX[1]=high[1]; - çizmiyor

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1); - ayrıca çizmez.

Tabii ki, başlıkta bile belirtilmiştir:

#property indicator_buffers 1

#property indicator_plots 1

#property indicator_type1 DRAW_ARROW

#property indicator_color1 clrGreen

#property indicator_width1 1

Neyi yanlış yapıyorum, lütfen bana söyleyin !!!!