Hatalar, hatalar, sorular - sayfa 123

 

geliştiricilerin çözmesine izin verin. işte bu betiğin 3 lansmanı üzerinde bir ekran.

maalesef bende çalışmıyor

 
Prival :

Hata - eskiden çalışıyordu, ama şimdi çalışmıyor.

Mesaj için teşekkürler.

arayacak.

 

PrintCheckResult yönteminde küçük bir hata bulundu (Trade.mqh dosyası, Ticaret sınıfları, CTrade sınıfı).

void CTrade::PrintCheckResult(void) const
{
printf("Kontrol Sonucu");
// printf("%d,%f,%f,%f,%f,%f,%f,'%s'", - sondan bir önceki parametre gereksiz
printf("%d,%f,%f,%f,%f,%f,'%s'",
m_check_result.retcode,m_check_result.balance,m_check_result.equity,
m_check_result.margin,m_check_result.margin_free,m_check_result.margin_level,
m_check_result.comment);
}

Satır yerine: printf("%d,%f,%f,%f,%f,%f,%f,'%s'", tarafımdan yorumlandı

bir satır olmalıdır: printf("%d,%f,%f,%f,%f,%f,'%s'",

Kontrol edildi, düzeltilen fonksiyon doğru çalışıyor.

 
Prival :

Hata - eskiden çalışıyordu, ama şimdi çalışmıyor.

Mesaj için teşekkürler. Bir sonraki güncellemede mevcut olacak. Geçerli sürümde çalışmasını sağlamak için, genel olarak bir sabit veya çarpma için açık döküm kullanın.

void OnStart()
  {
  // вот так работает
     Print(TimeCurrent()+2*PeriodSeconds(PERIOD_D1));
  // а вот так нет (а раньше работало)  
     datetime    time_end=0;
     time_end=TimeCurrent()+ (long) 2*PeriodSeconds(PERIOD_D1);
     Print(time_end);
  }
 
retired :

PrintCheckResult yönteminde küçük bir hata bulundu (Trade.mqh dosyası, Ticaret sınıfları, CTrade sınıfı).


Mesaj için teşekkürler.

Yakında düzeltilecektir.

 
mql5 :

Mesaj için teşekkürler. Bir sonraki güncellemede mevcut olacak. Geçerli sürümde çalışmasını sağlamak için, genel olarak bir sabit veya çarpma için açık döküm kullanın.

Teşekkür ederim. Doğru anlarsam, bunun nedeni döküm türüydü . Derlerken bu mesajın olmaması üzücü, bulmak daha kolay olurdu
Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
Prival :
Teşekkür ederim. Doğru anlarsam, bunun nedeni döküm türüydü . Derlerken bu mesajın olmaması üzücü, bulmak daha kolay olurdu
Kodunuz doğru, küfür edecek bir şey yok. Hata, işleneni x64 altında yayınlarken gerçekten ve düzeltildi. Güncellemeleri bekleyin.
 

ENUM_TRADE_RETURN_CODES hatalarının doğru işlenmesi için doğru yorumlanmaları gerekir. Ayrıntılı açıklamalarında herhangi bir materyal var mı?

Özellikle, aşağıdaki hatalar tam olarak anlaşılmamıştır:

10008

TRADE_RETCODE_PLACED

sipariş verildi

10021

TRADE_RETCODE_PRICE_OFF

İsteği işlemek için teklif yok


10028

TRADE_RETCODE_LOCKED

İstek işlenmek üzere engellendi

10029

TRADE_RETCODE_FROZEN

Sipariş veya pozisyon donduruldu

Bu soruya yardımcı olabilecek var mı?

 
retired :

ENUM_TRADE_RETURN_CODES hatalarının doğru işlenmesi için doğru yorumlanmaları gerekir. Ayrıntılı açıklamalarında herhangi bir materyal var mı?

Özellikle, aşağıdaki hatalar tam olarak anlaşılmamıştır:

10008

TRADE_RETCODE_PLACED

sipariş verildi

10021

TRADE_RETCODE_PRICE_OFF

İsteği işlemek için teklif yok


10028

TRADE_RETCODE_LOCKED

İstek işlenmek üzere engellendi

10029

TİCARET_RETCODE_FROZEN

Sipariş veya pozisyon donduruldu

Bu soruya yardımcı olabilecek var mı?

Yukarıdakilerin tümü, bir terminal isteğine yanıt olarak sunucunun döndürdüğü kodları ifade eder. Bu nedenle, her şey "Ticaret sunucusu dönüş kodları" bölümünde verilmiştir.

Listenin sadece hatalar içermediğini varsaymak mantıklı olacaktır.

Şimdi sırayla

İlişkin

10008

TRADE_RETCODE_PLACED

sipariş verildi


Bu yanıtın yalnızca bir hata olmadığını, yalnızca müşteriyi (ticaret terminali) siparişin başarılı bir şekilde yerleştirilmesi hakkında bilgilendirdiğini varsaymak mantıklıdır.

Bu durumda, bunu üç şekilde yapabilirsiniz:

1. Yanıtı hiç işlemeyin;

2. OnTrade() bloğunda sipariş verme süreci - Oldukça kabul edilebilir, ancak bence çok doğru bir seçenek değil;

3. Yanıtı siparişin verildiği yerde işleyin - Bence mekanik ticareti işlemenin en uygun yolu.

not

Sunucunun yanıtlarını ticaret işleminin gerçekleştirildiği yerde ve tüccarın, sunucunun veya diğer Uzman Danışmanların eylemlerinin sonucunu yakalamak için OnTrade()'de işlemeyi tercih ederim.

Örneğin, OnTrade'de, bir tüccarın ticaret işlemlerini (bir emir verme veya silme, ayrıca pozisyonlarla çalışma) yakalayabilirsiniz.


İlişkin


10029

TİCARET_RETCODE_FROZEN

Sipariş veya pozisyon donduruldu


Bir pozisyonun veya emrin "dondurulduğu" (onlarla herhangi bir işlem yapılması yasaktır) ulaşıldığında belirli bir seviye vardır.

Bu seviye, sunucunun emir veya pozisyon ile herhangi bir eylemi yasakladığı ulaşıldığında mevcut fiyata olan mesafeyi temsil eder. Bu mesafe nokta olarak ölçülür ve her karakter için ayarlanır.

Bunu SYMBOL_TRADE_FREEZE_LEVEL parametresi ile SymbolInfoInteger() kullanarak bulabilirsiniz .

Sunucudan böyle bir yanıt alındıysa, iki şeyden biri gerçekleşene kadar beklemeniz gerekir:

1. Fiyat, gerekli mesafeye hareket etmeyecek ( sembolün özelliklerinde belirtilenden daha fazla );

2. Düzen veya pozisyon, kendilerinde belirtilen koşulları sağlamayacaktır.


İlişkin

10021

TRADE_RETCODE_PRICE_OFF

İsteği işlemek için teklif yok


Muhtemelen, böyle bir yanıt aldığınızda, sembolün adını kontrol etmelisiniz (her ihtimale karşı), sembolün seçili olduğundan emin olmalısınız (testçi ve çizgi filmlerle ilgili), üzerinde de dahil olmak üzere bir geçmişi olduğundan emin olmalısınız. sunucu (eğer yüklemeniz gerekiyorsa), muhtemelen piyasanın açık olduğundan ve enstrüman üzerinde işlem yapmanın mümkün olduğundan emin olun.

not

Her ne kadar burada geliştiricilerle açıklığa kavuşturmak gerekli olacak


sallanmak nedir

10028

TRADE_RETCODE_LOCKED

İstek işlenmek üzere engellendi


Bu, belki de yukarıdaki sunucu yanıtlarının en belirginidir. burada, büyük olasılıkla, geliştiricilerin açıklamalarına ihtiyaç var (sadece belirli bir süre beklemeye değer olduğunu varsayacağım) ...

 
Interesting :

İlişkin


10029

TİCARET_RETCODE_FROZEN

Sipariş veya pozisyon donduruldu


Bir pozisyonun veya emrin "dondurulduğu" (onlarla herhangi bir işlem yapılması yasaktır) ulaşıldığında belirli bir seviye vardır.

Bu seviye, sunucunun emir veya pozisyon ile herhangi bir eylemi yasakladığı ulaşıldığında mevcut fiyata olan mesafeyi temsil eder. Bu mesafe nokta olarak ölçülür ve her karakter için ayarlanır.

Bunu SYMBOL_TRADE_FREEZE_LEVEL parametresi ile SymbolInfoInteger() kullanarak öğrenebilirsiniz.

Sunucudan böyle bir yanıt alındıysa, iki şeyden biri gerçekleşene kadar beklemeniz gerekir:

1. Fiyat, gerekli mesafeye hareket etmeyecek ( sembolün özelliklerinde belirtilenden daha fazla );

2. Düzen veya pozisyon, kendilerinde belirtilen koşulları sağlamayacaktır.


Detaylı cevap için teşekkürler. "10029: TRADE_RETCODE_FROZEN: Sipariş veya pozisyon donduruldu" kodu anlaşılabilir.

Ancak, geri kalanıyla ilgili sorular kaldı (varsayımları değil, kesin cevabı duymak istiyorum):

10008

TRADE_RETCODE_PLACED

sipariş verildi

10021

TRADE_RETCODE_PRICE_OFF

İsteği işlemek için teklif yok


10028

TRADE_RETCODE_LOCKED

İstek işlenmek üzere engellendi

Özellikle, "10008: Sipariş verildi"nin ne anlama geldiği tam olarak açık değildir, çünkü bir sipariş sunucuda sıraya alındığında, ona bir bilet atanır ve "10009: TRADE_RETCODE_DONE: Sipariş tamamlandı" kodu döndürülür.

Neden: