"Bir ürün Market’te nasıl yayınlanır" makalesi için tartışma - sayfa 48

 

EA'm yeni bir ürün kaydederken hata veriyor:

test on EURUSD,H1 (netting) 2020.04.15 15:47:05 failed modify #44 sell 0.2 EURUSD sl: 1.08929, tp: 1.08599 -> sl: 1.08919, tp: 1.08599 [Emir veya pozisyonun piyasaya yakın olması nedeniyle değişiklik başarısız oldu]

Ancak EA'm forex değil WIN$ üzerinde çalışacak. Test cihazı neden hangi varlığın çalıştırılacağını size bildirmiyor?

Şimdi hatası olmayan bir şeyi nasıl düzeltebilirim, çünkü EA mükemmel çalışıyor, sadece ürünü satış için kaydedemiyorum.

 
Adriano De Mello Moura #:

EA'm yeni bir ürün kaydederken hata veriyor:

test on EURUSD,H1 (netting) 2020.04.15 15:47:05 failed modify #44 sell 0.2 EURUSD sl: 1.08929, tp: 1.08599 -> sl: 1.08919, tp: 1.08599 [Emir veya pozisyonun piyasaya yakın olması nedeniyle değişiklik başarısız oldu]

Ancak EA'm forex değil WIN$ üzerinde çalışacak. Test uzmanı neden hangi varlığın çalıştırılacağını size bildirmiyor?

Şimdi hata olmayan bir şeyi nasıl düzeltebilirim, çünkü EA mükemmel çalışıyor, sadece ürünü satış için kaydedemiyorum.

Robot herhangi bir varlık üzerinde çalışmaya hazır olmalıdır....


Yukarıda belirtilen hatayı düzeltmek için, pozisyonu değiştirmeden önce aşağıdaki kontrolü gerçekleştirmelisiniz:

//+--------------------------------------------------------------------------------------------------------------------+
//| TakeProfit/StopLoss ile kapanış fiyatı arasındaki mesafenin SYMBOL_TRADE_STOPS_LEVEL | değerinden büyük olup olmadığını kontrol eder
//+--------------------------------------------------------------------------------------------------------------------+
bool Check_SL_TP(ENUM_ORDER_TYPE type, double SL, double TP)
  {
//--- Yerel değişkenler
   bool SL_check = false, TP_check = false;

//--- Mevcut sembol için son fiyatı belirler
   double BID = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   double ASK = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

//--- SYMBOL_TRADE_STOPS_LEVEL seviyesini alın
   int stops_level = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   if(stops_level != 0)
     {
      PrintFormat("SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must not be nearer than %d points from the closing price", stops_level, stops_level);
     }

//--- sadece iki sipariş türünü kontrol edin
   switch(type)
     {
      //--- Satın alma işlemi
      case  ORDER_TYPE_BUY:
        {
         //--- StopLoss'u kontrol edin
         SL_check = (BID - SL > stops_level * _Point);
         if(!SL_check)
           {
            ERRMSG = StringFormat("For order %s StopLoss=%.5f must be less than %.5f (Bid=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, BID - stops_level * _Point, BID, stops_level);
           }
         //--- TakeProfit'i kontrol edin
         TP_check = (TP - BID > stops_level * _Point);
         if(!TP_check)
           {
            ERRMSG = StringFormat("For order %s TakeProfit=%.5f must be greater than %.5f (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, BID + stops_level * _Point, BID, stops_level);
           }
         //--- kontrolün sonucunu döndürür
         return(SL_check && TP_check);
        }
      //--- Satış işlemi
      case  ORDER_TYPE_SELL:
        {
         //--- StopLoss'u kontrol edin
         SL_check = (SL - ASK > stops_level * _Point);
         if(!SL_check)
           {
            ERRMSG = StringFormat("For order %s StopLoss=%.5f must be greater than %.5f (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), SL, ASK + stops_level * _Point, ASK, stops_level);
           }
         //--- TakeProfit'i kontrol edin
         TP_check = (ASK - TP > stops_level * _Point);
         if(!TP_check)
           {
            ERRMSG = StringFormat("For order %s TakeProfit=%.5f must be less than %.5f (Ask=%.5f - SYMBOL_TRADE_STOPS_LEVEL=%d points)", EnumToString(type), TP, ASK - stops_level * _Point, ASK, stops_level);
           }
         //--- kontrolün sonucunu döndürür
         return(TP_check && SL_check);
        }
      break;
     }

//--- Doğrulama başarılı
   return(false);
  }



Aşağıdaki makalede robot tarafından yapılması gereken diğer kontrolleri görün:

Bir ticaret robotu Piyasada yayınlanmadan önce hangi testlerden geçmelidir - MQL5 Makaleleri

 

Merhaba, eski ürünlerimden birinin ürün açıklamasını düzenleyemiyorum.

Açıklamayı yeniden yazmak, piyasadan gizlemek vb. dahil olmak üzere çeşitli forumlardaki talimatları izledim, ancak açıklama hala orijinal sürüme geri dönüyor.

Artık ürünü markete geri yükleyemiyorum ve düzenleyemiyorum. Forumlarda bu konuyla ilgili yardım talep ettim ancak henüz bir yardım alamadım.

"Ürün açıklamasını düzenleyememe" sorununu nasıl çözebilirim? Lütfen yardımcı olun

 

Uzman Danışmanı yüklerken ve test ederken bir hata yazıyor, nasıl düzeltileceğini anlamıyorum.

EURUSD, H1 üzerinde test (netleştirme)

2020.04.14 00:24:42 1.09044'ten 0.01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.04.14 00:24:45 1.09044'ten 0.01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.04.14 00:24:48 1.09037'den 0.01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.04.21 00:01:34 failed instant buy 0.01 EURUSD at 1.08626 [Invalid volume]

2020.04.21 00:01:37 1,08626'da 0,01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.04.21 00:01:40 failed instant buy 0.01 EURUSD at 1.08626 [Invalid volume]

2020.04.27 16:08:24 failed instant sell 0.01 EURUSD at 1.08546 [Invalid volume]

2020.04.27 16:08:27 1,08548'de 0,01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.04.27 16:08:30 1.08547'de 0.01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.04.29 20:15:52 1.08565'te 0.01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.04.29 20:15:55 1.08566'da 0.01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.04.29 20:15:58 1,08566'da 0,01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.05.18 00:12:09 failed instant buy 0.01 EURUSD at 1.08134 [Invalid volume]

2020.05.18 00:12:12 1,08134'ten 0,01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.05.18 00:12:15 failed instant buy 0.01 EURUSD at 1.08143 [Invalid volume]

2020.05.21 15:50:25 1.10031'de 0.01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.05.21 15:50:28 başarısız anlık satış 0,01 EURUSD 1,10034 [Geçersiz hacim]

2020.05.21 15:50:31 1.10036'da 0.01 EURUSD anında satış başarısız oldu [Geçersiz hacim]

2020.05.25 19:00:05 1,08950'den 0,01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.05.25 19:00:08 1,08951'den 0,01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

2020.05.25 19:00:11 1,08952'den 0,01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

herhangi bir ticari faaliyet bulunmamaktadır

 
Kirill Voytseshchuk #:

Uzman Danışmanı yüklerken ve test ederken bir hata yazıyor, nasıl düzeltileceği belli değil.

EURUSD, H1 üzerinde test (netleştirme)

2020.04.14 00:24:42 1.09044'ten 0.01 EURUSD anında alım başarısız oldu [Geçersiz hacim]

***

Lütfen hata mesajının tamamını okuyun - "Hangi kontroller geçmeli..." başlıklı makaleye bir bağlantı olacaktır.
 

Oku, kodun içine koy

Ticaret işlemlerinde yanlış hacimler

İşlem emirlerini göndermeden önce, emirde belirtilen hacimlerin doğru olup olmadığını da kontrol etmek gerekir. Uzman Danışmanın emirde belirteceği lot sayısı, OrderSend() işlevi çağrılmadan önce kontrol edilmelidir. Finansal araçlar içinŞartname, alım satım için izin verilen minimum ve maksimum hacimlerin yanı sıra hacim derecelendirmesini de belirtir . Bu değerleri MQL5'teSymbolInfoDouble() fonksiyonunu kullanarak ENUM_SYMBOL_INFO_DOUBLE numaralandırmasından alabilirsiniz.

//+------------------------------------------------------------------+
//| Sipariş hacminin doğruluğunu kontrol eder ||
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- alim satim i̇şlemleri̇ i̇çi̇n i̇zi̇n veri̇len asgari̇ haci̇m
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("İzin verilen minimum hacimden daha az hacim SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- alım satım işlemleri için izin verilen maksimum hacim
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Hacim, izin verilen maksimum hacimden büyük SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- minimum hacim derecelendirmesini elde edin
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Hacim minimum derecelendirmenin katı değil SYMBOL_VOLUME_STEP=%.2f, en yakın doğru hacim %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Doğru hacim değeri";
   return(true);
  }

Yardımcı olmadı, başka bir kodu düzeltebilir miyim?

Kodu nasıl geliştireceğimi söyleyebilir misiniz?

Обзор рынка - Торговые операции - Справка по MetaTrader 5
Обзор рынка - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Окно "Обзор рынка" позволяет просматривать ценовые данные по торговым инструментам: котировки, ценовую статистику и график тиков. Здесь...
 
Kirill Voytseshchuk #:

Oku, kodun içine koy

Ticaret işlemlerinde yanlış hacimler

İşlem emirlerini göndermeden önce, emirde belirtilen hacimlerin doğru olup olmadığını da kontrol etmek gerekir. Uzman Danışmanın emirde belirteceği lot sayısı, OrderSend() işlevi çağrılmadan önce kontrol edilmelidir. Finansal araçlar içinŞartname, alım satım için izin verilen minimum ve maksimum hacimlerin yanı sıra hacim derecelendirmesini de belirtir . Bu değerler MQL5'teSymbolInfoDouble() fonksiyonu kullanılarak ENUM_SYMBOL_INFO_DOUBLE numaralandırmasından elde edilebilir

Yardımcı olmadı, başka bir kodu düzeltebilir miyim?

Senaryoyu nasıl geliştireceğimi söyleyebilir misiniz?

Makaleyi tamamen okuyun, 'CheckVolumeValue' giriş parametrelerinin doğruluğunun kontrolüdür.

Ve ayrıca doğru lot yuvarlama kontrolü de vardır ...

 

Açık pozisyonun hacmi ve bekleyen emirlerdeki hacim dikkate alındığında, son kontrol şu şekilde görünecektir:

//+------------------------------------------------------------------+
//| Sembol bazında sipariş için izin verilen maksimum hacmi döndürür |
//+------------------------------------------------------------------+
double NewOrderAllowedVolume(string symbol)
  {
   double allowed_volume=0;
//--- siparişteki maksimum hacim limitini al
   double symbol_max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
//--- birimdeki karakter sınırını al
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_LIMIT);

//--- sembol bazında açık pozisyonun hacmini al
   double opened_volume=PositionVolume(symbol);
   if(opened_volume>=0)
     {
      //--- eğer hacmi zaten tüketmişsek
      if(max_volume-opened_volume<=0)
         return(0);

      //--- açık pozisyon hacmi max_volume değerini aşmıyor
      double orders_volume_on_symbol=PendingsVolume(symbol);
      allowed_volume=max_volume-opened_volume-orders_volume_on_symbol;
      if(allowed_volume>symbol_max_volume) allowed_volume=symbol_max_volume;
     }
   return(allowed_volume);
  }

eklemek?

checkvolumevalue.mq5 burada yazıldığı gibi


//+------------------------------------------------------------------+
//| Betik program başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP)/2.0;
   double volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN)-step;
   double finish=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX)+step;

//--- hacim derecelendirmesinde kaç ondalık basamak bulunduğunu bulun
   int digits=(int)MathLog10(SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP));
   if(digits<0) digits=-digits;
   else digits=0;

//--- döngü içinde birçok farklı hacim değerini kontrol edin
   while(volume<finish+4*step)
     {
      string descr;
      if(!CheckVolumeValue(volume,descr))
        {
         Print("Denetim Sonucu",volume,": ",descr);
        }
        else PrintFormat("%G hacmi doğru.",volume);
      volume+=3*step;
      volume=NormalizeDouble(volume,digits+1);
     }
//---
  }
//+------------------------------------------------------------------+
//| Sipariş hacminin doğruluğunu kontrol eder ||
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- alim satim i̇şlemleri̇ i̇çi̇n i̇zi̇n veri̇len asgari̇ haci̇m
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("İzin verilen minimum hacimden daha az hacim SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- alım satım işlemleri için izin verilen maksimum hacim
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Hacim, izin verilen maksimum hacimden büyük SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- minimum hacim derecelendirmesini elde edin
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Hacim minimum derecelendirmenin katı değil SYMBOL_VOLUME_STEP=%.2f, en yakın doğru hacim %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Doğru hacim değeri";
   return(true);
  }
//+------------------------------------------------------------------+
 
Kirill Voytseshchuk bekleyen emirlerdeki hacim dikkate alındığında, nihai kontrol şu şekilde görünecektir:

Eklemek mi?

checkvolumevalue.mq5 burada yazıldığı gibi


Gerekli tüm kontroller makalede Bir EA oluşturmak için neredeyse bir kurucu

Почти конструктор для создания советника
Почти конструктор для создания советника
  • www.mql5.com
Предлагаю свой набор торговых функций в виде готового советника. Представленный способ позволяет получать множество торговых стратегий простым добавлением индикаторов и изменением входных параметров.
 

Daha önce sorulan kod uygun mu?

Makaleden gerekli satırları yazabilirsiniz.