MQL5'te birlikte öğrenme ve yazma - sayfa 10

 

Sorunun konuyla ilgili olup olmadığını bilmiyorum.

Hata ayıklama ve test cihazını birleştirmek mümkün müdür? Onlar. F5 ile çalıştırırsam, test cihazı elbette başlamıyor. Ve eğer test cihazında uzmanı başlatırsam, o zaman kesme noktaları yok sayılır. Yoksa yanlış bir şey mi yapıyorum?

 
Lunatic :

Sorunun konuyla ilgili olup olmadığını bilmiyorum.

Hata ayıklama ve test cihazını birleştirmek mümkün müdür?

Şu anda değil.
 
alexvd :
Şu anda değil.

Yani sadece demoda gerçek zamanlı olarak mı? Peki ya ilginç durumlarda hata ayıklamaya ne dersiniz?

İlk başta hata ayıklayıcı için çok mutluydum, ancak hata ayıklama baskılarına geri dönüyorum. Diğer hata ayıklama teknolojileri görünmez. - Hayal kırıklığı.

 

Örnek olarak verilen Expert Advisor adlı MovingAverage'ı inceliyorum. İçindeki her şey çok güzel. Test cihazı sorusu.

Bu EA, mumu yalnızca ilk kene üzerinde analiz eder. Bazı durumların işlenmeden kaydığını fark ettim. İlk keneden nadir bir mum doğduğu ortaya çıktı. Bu bir bağlantı etkisi mi, benim hatam mı yoksa test cihazının mı?

Görünüşe göre, mumu sadece doğumda işlemek, yani. bir kez, son işlenmiş mumu statik bir değişkende mi saklamanız gerekiyor?

P / S / Dili yeni öğrenmeye başladım, çok sıkıcı sorular.

Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - Документация по MQL5
 

Merhaba, bir danışman yazıyorum, belki şampiyonluk için zamanım olur. Görünüşte basit bir kod yazdım, 2 adet özel gösterge kullanıyor ama bu göstergelerin değerleri 0 yani işlem tamamlanmadı lütfen bakın neyi yanlış yaptım ya da sorun göstergenin kendisinde olabilir mi?

 //+------------------------------------------------------------------+
//|                                                  trend_masim.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

input int period = 48 ;
input int period1 = 30 ;
input int sl= 200 ;
input double lot= 0.1 ;
input long magicBUY1= 102 ;
input int magicSELL1= 202 ;
input string sim= "eur" ;

double ind1[];
double ind2[];
int hind1;
int hind2;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

   hind1= iCustom ( "EURUSD" , PERIOD_H1 , "trend_v3_5" ,period);
   hind2= iCustom ( "EURUSD" , PERIOD_H1 , "trend_v3" , 4 );



   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
IndicatorRelease (hind1);
IndicatorRelease (hind2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int bar;
double MAX,MIN,H,A0,A1,A2;
void OnTick ()
  {
  
 int   i, j,jj, k, g, q, ticket,l;
    double stop;
    MqlTradeRequest mrequest;  
 MqlTradeResult mresult;
   MqlTick latest_price;   
 


ArraySetAsSeries (ind1,true);
ArraySetAsSeries (ind2,true);
MAX= CopyBuffer (hind1, 2 , 0 , 3 ,ind1);
MIN= CopyBuffer (hind2, 0 , 0 , 3 ,ind2);

SymbolInfoTick ( _Symbol ,latest_price);
//BUY


   if ( PositionSelect ( _Symbol )== 1 && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY ){jj= 1 ;} //определяет если позиция BUY
   if (jj== 0 ){
if ( ind2[ 1 ]>ind1[ 1 ]){ // условие на покупку
Print ( "индикатор=" ,ind2[ 1 ], " " ,ind1[ 1 ]);
         mrequest.action = TRADE_ACTION_DEAL ;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - sl* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble ( 0 , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                            // символ
         mrequest.volume = lot;                                                // количество лотов для торговли
         mrequest.magic = magicBUY1;                                            // Magic Number
         mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_AON ;                            // тип исполнения ордера - все или ничего
         mrequest.deviation= 10 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);

GlobalVariableSet ( "k11" +sim,Bars2);
GlobalVariableSet ( "bar11" +sim, Bars ( "EURUSD" , NULL ));
}}
   
  
  }
//+------------------------------------------------------------------+
 

Lunatic :

Bu EA, mumu yalnızca ilk kene üzerinde analiz eder. Bazı durumların işlenmeden kaydığını fark ettim. İlk keneden nadir bir mum doğduğu ortaya çıktı. Bu bir bağlantı etkisi mi, benim hatam mı yoksa test cihazının mı?

Görünüşe göre, mumu sadece doğumda işlemek, yani. bir kez, son işlenmiş mumu statik bir değişkende mi saklamanız gerekiyor?

Yeni bir çubuğun görünümü, statik bir değişkene kaydettikten sonra çubuğun zamanını değiştirerek en iyi şekilde izlenir.

Örnekler IsNewBar'da ve Uzman Danışmanlarda Limitler ve Kontroller makalesinde bulunabilir.

 
Automated-Trading :

Yeni bir çubuğun görünümü, statik bir değişkene kaydettikten sonra çubuğun zamanını değiştirerek en iyi şekilde izlenir.

Örnekler IsNewBar'da ve Uzman Danışmanlarda Sınırlamalar ve Kontroller makalesinde bulunabilir.

Teşekkürler, bu açık.

Ama anlamadığım şey, Uzman Danışmanlarda nasıl hata ayıklanacağı. Test cihazında yaptığımız sistemde değil, programdaki hataların olduğu açıktır. Örneğin, programın neden belirli bir şubeye girmediği belli değil - neden? Farklı hata ayıklama çıktıları koymanız, ardından bunları günlükte aramanız, ardından diğer çıktıları koymanız, program çalışana kadar belirli bir süre beklemeniz ve günlüğe tekrar bakmanız mı gerekiyor?

Program hatalarını aramayı organize etmenin en iyi yolu nedir?

 
m_a_sim :

Merhaba, bir danışman yazıyorum, belki şampiyonluk için zamanım olur. Görünüşte basit bir kod yazdım, 2 adet özel gösterge kullanıyor ama bu göstergelerin değerleri 0 yani işlem tamamlanmadı lütfen bakın neyi yanlış yaptım ya da sorun göstergenin kendisinde olabilir mi?

Kodunuzda hata ayıklamak için özel göstergeleri MA ile değiştirdim:

   hind1= iMA ( "EURUSD" , PERIOD_H1 , 20 , 0 , MODE_SMA , PRICE_CLOSE );
   hind2= iMA ( "EURUSD" , PERIOD_H1 , 40 , 0 , MODE_SMA , PRICE_CLOSE );

Ve değerlerin bir diziye kopyalanması düzeltildi:

MAX= CopyBuffer (hind1, 0 , 0 , 3 ,ind1);
MIN= CopyBuffer (hind2, 0 , 0 , 3 ,ind2);

Şimdi gösterge değerleri var:

 //+------------------------------------------------------------------+
//|                                                  trend_masim.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "https://www.mql5.com"
#property version   "1.00"

input int period = 48 ;
input int period1 = 30 ;
input int sl= 200 ;
input double lot= 0.1 ;
input long magicBUY1= 102 ;
input int magicSELL1= 202 ;
input string sim= "eur" ;

double ind1[];
double ind2[];
int hind1;
int hind2;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {

   hind1= iMA ( "EURUSD" , PERIOD_H1 , 20 , 0 , MODE_SMA , PRICE_CLOSE );
   hind2= iMA ( "EURUSD" , PERIOD_H1 , 40 , 0 , MODE_SMA , PRICE_CLOSE );

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
IndicatorRelease (hind1);
IndicatorRelease (hind2);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int bar;
double MAX,MIN,H,A0,A1,A2;
void OnTick ()
  {
  
int    i, j,jj, k, g, q, ticket,l;
     double stop;
     MqlTradeRequest mrequest;  
MqlTradeResult mresult;
   MqlTick latest_price;  



ArraySetAsSeries (ind1,true);
ArraySetAsSeries (ind2,true);
MAX= CopyBuffer (hind1, 0 , 0 , 3 ,ind1);
MIN= CopyBuffer (hind2, 0 , 0 , 3 ,ind2);

SymbolInfoTick ( _Symbol ,latest_price);
//BUY


   if ( PositionSelect ( _Symbol )== 1 && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY ){jj= 1 ;} //определяет если позиция BUY
   if (jj== 0 ){
if ( ind2[ 1 ]>ind1[ 1 ]){ // условие на покупку
Print ( "индикатор=" ,ind2[ 1 ], " " ,ind1[ 1 ]);
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - sl* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble ( 0 , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = lot;                                                 // количество лотов для торговли
         mrequest.magic = magicBUY1;                                             // Magic Number
         mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
         mrequest.type_filling = ORDER_FILLING_AON ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 10 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);

}}
  
  
  }
//+------------------------------------------------------------------+
 
AM2 :

Kodunuzda hata ayıklamak için özel göstergeleri MA ile değiştirdim:

Ve değerlerin bir diziye kopyalanması düzeltildi:

Şimdi gösterge değerleri var:

Her şeyin göstergelerle ilgili olduğu ortaya çıktı mı? test cihazı bana bir hata veriyor

2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 'trend_v3.mq5' içinde dizi aralık dışında (71,9)
2010.09.01 19:44:36 Core 1 2010.06.01 00:00:01 'trend_v3_5.mq5' içinde dizi aralık dışında (83,9)

 

m_a_sim'e

Hindilerden bilgi kopyalamadan önce geçersiz tutamaçları kontrol etmek bana daha doğru geliyor. Bir diğeri, bu verilerin kullanılabilirliği için bir kontrol düzenlemek olacaktır ....

MAX= CopyBuffer (hind1, 2 , 0 , 3 ,ind1);
MIN= CopyBuffer (hind2, 0 , 0 , 3 ,ind2);
Neden: