Hatalar, hatalar, sorular - sayfa 737

 
-Alexey- :
Neden, "Başlat" düğmesine bastığımda, test cihazı ilk depozito seviyesinden değil, son testin bittiği seviyeden test yapıyor. 4-ke'de böyle bir sorun yok. İlk depozito seviyesinden teste nasıl başlanır ?

Tarif ettiğiniz durumu yeniden oluşturamayız.

Daha fazla ayrıntı alalım

 
stringo :

Tarif ettiğiniz durumu yeniden oluşturamayız.

Daha fazla ayrıntı alalım

Parabolik durdurma ile ortadaki Expert Advisor'ı oluşturuyorum. Testi açılış fiyatlarında çalıştırıyorum, "iptal"e tıklayın. İkinci kez çalıştırıyorum - açıklanan durum ortaya çıkıyor (aynı zamanda bakiye ve özkaynak grafiği yeniden çizilmez, ancak devam eder). Ustadan olmayan uzmanlarla her şey yolunda.
Мастер MQL5: Создание эксперта без программирования
Мастер MQL5: Создание эксперта без программирования
  • 2010.12.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы хотите быстро проверить торговую идею, не тратя времени на программирование? Выберите в "Мастере MQL5" нужный тип торговых сигналов, подключите модули сопровождения позиций и управления капиталом - на этом вся работа закончена. Создайте свои реализации модулей или закажите их через сервис "Работа" - и комбинируйте новые модули с уже существующими.
 

Bu bir bug gibi görünüyor.

Çoklu para birimi test modunda, iki cihazda yeni bir çubuğun görünmesini beklediğimizde, test cihazı yanlış davranıyor.

Birkaç açıklama. isNewBar işlevinde, ana sembolde yeni bir çubuk göründüğünde, başka bir finansal enstrümanda yeni bir çubuğun görünmesini döngüde bekleriz.

Kodu ekliyorum.

 //в тестере баг в режиме мультивалютного тестирования
//позиция открывается если на двух инструментах появился новый бар 
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
//--- input parameters
input int       Per= 10 ; //период средней 
input string    Instrum1= "EURUSD" ; //первый инструмент
input string    Instrum2= "GBPUSD" ; //второй инструмент
//-------------------------------------------------------
CTrade   trade; //торговые функции
COrderInfo orderinfo; //информация об ордере
CPositionInfo  posinfo; //информация о позиции
int hiMA ; //хэндл индикатора 
int OnInit ()
  {
      hiMA= iMA ( _Symbol , _Period ,Per, 0 , MODE_SMA , PRICE_OPEN ) ;
       if (hiMA < INVALID_HANDLE ) return (- 1 ) ;
       return ( 0 );
  }
//====================================================================
void OnDeinit ( const int reason)
  {
   IndicatorRelease (hiMA) ;
  }
//=====================================================================
void OnTick ()
  {
       if (!isNewBar(Instrum2)) return    ;
       //Print("  Это новый бар  ");
       double    Ma[ 1 ] ; //показания индикатора 
       CopyBuffer (hiMA, 0 , 0 , 1 ,Ma) ;
       MqlTick price; // будет использоваться для получения текущих/последних котировок цены
       bool possel=posinfo.Select(Instrum1) ;
       SymbolInfoTick (Instrum1,price) ;
       if (possel && price.bid > Ma[ 0 ] && posinfo.PositionType() == POSITION_TYPE_SELL )
         { //цена выше средней закрываем короткую позу
            trade.PositionClose(Instrum1) ; return ;
         }
       if ( !possel && price.bid > Ma[ 0 ])
         { //цена выше средней нет поз открываем длинную позу 
            trade.Buy( 0.1 ,Instrum1, 0 , 0 , 0 , NULL ) ; return ;
         }
       if ( possel && price.ask < Ma[ 0 ] && posinfo.PositionType() == POSITION_TYPE_BUY )
         { //цена ниже средней закрываем длинную позу
            trade.PositionClose(Instrum1) ; return ;
         } 
       if (!possel && price.ask < Ma[ 0 ])
         { // цена ниже средней нет поз открываем короткую позу
            trade.Sell( 0.1 ,Instrum1, 0 , 0 , 0 , NULL ) ;
         }
       return ;
  }
//=======================================================================
bool isNewBar( string other_symbol)
  { //возвращает труе если новый бар на двух инструментах
   static datetime last_bar_time= 0 ;
   int cntsleep ;
   if (last_bar_time== 0 )
     { //--- это первый вызов, запишем время открытия и выйдем
      last_bar_time=( datetime ) SeriesInfoInteger ( _Symbol , Period (), SERIES_LASTBAR_DATE );
       return ( false );
     }
   datetime curr_time=( datetime ) SeriesInfoInteger ( Symbol (), Period (), SERIES_LASTBAR_DATE );
   if (curr_time!=last_bar_time)
     { //время открытия не совпадает это новый бар 
      last_bar_time=curr_time;
      cntsleep= 0 ;
       while (!(curr_time == ( datetime ) SeriesInfoInteger (other_symbol, Period (), SERIES_LASTBAR_DATE )))
         { // ждем появления нового бара на втором инструменте   
             Sleep ( 5000 ); 
             if (cntsleep > 10 ) return ( false ) ; // недождались 
            cntsleep++ ;
         }
       return ( true ) ;
     }
     return ( false ) ;
  }
Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
ivandurak :

Bu bir bug gibi görünüyor.

Çoklu para birimi test modunda, iki cihazda yeni bir çubuğun görünmesini beklediğimizde, test cihazı yanlış davranıyor.


Tam olarak neyi hata olarak görüyorsun, özellikle açıkla lütfen. Testin ayrıntılarını, elde edilen sonucu veya beklenen sonucu vermediniz.

Ayrıca MetaTrader 5 Test Temelleri makalesine dikkatinizi çekmek isterim. Kene oluşturma mekanizmasının ve temel kavramların bir açıklamasını içerir.

 
Rosh :

Tam olarak neyi hata olarak görüyorsun, özellikle açıkla lütfen. Testin ayrıntılarını, elde edilen sonucu veya beklenen sonucu vermediniz.

Ayrıca MetaTrader 5 Test Temelleri makalesine dikkatinizi çekmek isterim. Kene oluşturma mekanizmasının ve temel kavramların bir açıklamasını içerir.

Her şey basit.

Optimizasyon için EA'yı çalıştırıyoruz ve aşağıdaki sonucu görüyoruz.

Örneğin 4. geçişi seçiyoruz, danışmanı çalıştırıyoruz, tüm işlemlerle normal çalışmasını sağlıyoruz, işte rapor.

Bir his var. Açık bir çubukta açılmadıysa, çoklu para birimi optimizasyon modundaki test cihazının bir anlaşmayı bir çubuğa bağlayamaması.

Döngüyü isNewBar işlevinde yorumlarsanız, mantıksal olarak, başka bir enstrümanda yeni bir çubuğun görünmesini beklemeyin, o zaman her şey çalışır. Terminal sürüm 5 yapı 642.

Oradan makaleler, kodlar okudum, herhangi bir hata görmüyorum. Kendimi bilsem de gidip tekrar okuyacağım.

İyi tatiller.

 
-Alexey- :
Parabolik durdurma ile ortadaki Expert Advisor'ı oluşturuyorum. Testi açılış fiyatlarında çalıştırıyorum, "iptal"e tıklayın. İkinci kez çalıştırıyorum - açıklanan durum ortaya çıkıyor (aynı zamanda bakiye ve özkaynak grafiği yeniden çizilmez, ancak devam eder). Ustadan olmayan uzmanlarla her şey yolunda.

Hizmet masasında bir uygulama oluşturun;

  • yapı numarası
  • sistemin bitliği ve Windows sürümü.
  • EA kodunu ekle
  • danışmanın ayarları ve giriş parametreleri
 

İşte bir kod parçası. trpar2=false olduğunda, giriş parametreleri int grusdchf=100 olacak şekilde nasıl yapılır; girdi int grusjpy=100; optimize edilmemiş

 //------------------------------------------------------------
input bool   trpar1= true ; //разрешение торговли по EURUDSD
input int    greurusd= 100 ; //сетка для EURUSD
input int    grgbpusd= 100 ; //сетка для GBPUSD
//------------------------------------------------------------
input bool   trpar2= true ; //
input int    grusdchf= 100 ; //
input int    grusdjpy= 100 ; //
//------------------------------------------------------------
input bool   trpar3= true ; //
input int    graudjpy= 100 ; //
input int    grchfjpy= 100 ; //
 
ivandurak :

İşte bir kod parçası. trpar2=false olduğunda giriş parametrelerinin int grusdchf=100; girdi int grusjpy=100; optimize edilmemiş

Test cihazında bu parametrelerin yanındaki onay kutularını işaretlemeyin. Veya soruyu netleştirin, aksi takdirde bir belirsizlik görüyorum. :)

 

Soru:

İşleve nesnelere bir dizi işaretçi iletmeniz gerekir. Referans olarak, elbette (bir dizi).

Hangi sözdizimi kullanılır?

 void MyFunc(MyClass &*MayClassPointersArray[]);  / не компилируется.
void MyFunc(MyClass *&MayClassPointersArray[]);  / компилируется, но сомневаюсь что смысл правильный

şüpheleniyor muyum? Yoksa başka bir şeye mi ihtiyacınız var?

 
ivandurak :

İşte bir kod parçası. trpar2=false olduğunda giriş parametrelerinin int grusdchf=100; girdi int grusjpy=100; optimize edilmemiş

 input bool trpar2= true ;
input int grusdchf= 100 ;
input int grusdjpy= 100 ;

if (trpair2== false )   // если false то всегда 100
  {
   x_grusdchf= 100 ;
   x_grusdjpy= 100 ;
  }
 else                  // если true то значения с перебора 
  {
   x_grusdchf=grusdchf;
   x_grusdjpy=grusdjpy;
  }
Böyle bir ihtiyaçla karşı karşıya kalınır.Çarpık ve zalim, ancak doğru sonuç çıkıyor.Her üç girişte de onay kutuları etkinleştirilir ve ardından false ise engellenir.
Neden: