Çaydanlıktan gelen sorular - sayfa 78

 
Interesting :

Geliştiricilerin yorumları dikkate alındığında, Expert Advisor'ı yeniden yapmak veya üzerinde bir dosya ile çalışmak daha kolay olacaktır.

Burada bir uzmandan ne istediğinizi tam olarak açıklamak ve WIZARD tarafından oluşturulan tüm kodları sağlamak muhtemelen daha kolay olacaktır.

Örneğin, Zarflar göstergesinin fiyatının kesiştiği noktada ticaret açan bir danışmana ihtiyacım var. İşte olanlar:

 //+------------------------------------------------------------------+
//|                                                    envelopes.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalEnvelopes.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string              Expert_Title              = "envelopes" ; // Document name
ulong                     Expert_MagicNumber        = 28572 ;       // 
bool                      Expert_EveryTick          = false ;       // 
//--- inputs for main signal
input int                 Signal_ThresholdOpen      = 10 ;           // Signal threshold value to open [0...100]
input int                 Signal_ThresholdClose     = 10 ;           // Signal threshold value to close [0...100]
input double              Signal_PriceLevel         = 0.0 ;         // Price level to execute a deal
input double              Signal_StopLevel          = 50.0 ;         // Stop Loss level (in points)
input double              Signal_TakeLevel          = 50.0 ;         // Take Profit level (in points)
input int                 Signal_Expiration         = 4 ;           // Expiration of pending orders (in bars)
input int                 Signal_Envelopes_PeriodMA = 240 ;         // Envelopes(240,0,MODE_LWMA,...) Period of averaging
input int                 Signal_Envelopes_Shift    = 0 ;           // Envelopes(240,0,MODE_LWMA,...) Time shift
input ENUM_MA_METHOD      Signal_Envelopes_Method   = MODE_LWMA ;   // Envelopes(240,0,MODE_LWMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_Envelopes_Applied  = PRICE_CLOSE ; // Envelopes(240,0,MODE_LWMA,...) Prices series
input double              Signal_Envelopes_Deviation= 0.15 ;         // Envelopes(240,0,MODE_LWMA,...) Deviation
input double              Signal_Envelopes_Weight   = 1.0 ;         // Envelopes(240,0,MODE_LWMA,...) Weight [0...1.0]
//--- inputs for money
input double              Money_FixLot_Percent      = 10.0 ;         // Percent
input double              Money_FixLot_Lots         = 0.01 ;         // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Initializing expert
   if (!ExtExpert.Init( Symbol (), PERIOD_H4 ,Expert_EveryTick,Expert_MagicNumber))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing expert" );
      ExtExpert.Deinit();
       return (- 1 );
     }
//--- Creating signal
   CExpertSignal *signal= new CExpertSignal;
   if (signal== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating signal" );
      ExtExpert.Deinit();
       return (- 2 );
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalEnvelopes
   CSignalEnvelopes *filter0= new CSignalEnvelopes;
   if (filter0== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating filter0" );
      ExtExpert.Deinit();
       return (- 3 );
     }
   signal.AddFilter(filter0);
   filter0.PatternsUsage( 2 );
//--- Set filter parameters
   filter0.PeriodMA(Signal_Envelopes_PeriodMA);
   filter0.Shift(Signal_Envelopes_Shift);
   filter0.Method(Signal_Envelopes_Method);
   filter0.Applied(Signal_Envelopes_Applied);
   filter0.Deviation(Signal_Envelopes_Deviation);
   filter0.Weight(Signal_Envelopes_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing= new CTrailingNone;
   if (trailing== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating trailing" );
      ExtExpert.Deinit();
       return (- 4 );
     }
//--- Add trailing to expert (will be deleted automatically))
   if (!ExtExpert.InitTrailing(trailing))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing trailing" );
      ExtExpert.Deinit();
       return (- 5 );
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedLot *money= new CMoneyFixedLot;
   if (money== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating money" );
      ExtExpert.Deinit();
       return (- 6 );
     }
//--- Add money to expert (will be deleted automatically))
   if (!ExtExpert.InitMoney(money))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing money" );
      ExtExpert.Deinit();
       return (- 7 );
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if (!ExtExpert.ValidationSettings())
     {
       //--- failed
      ExtExpert.Deinit();
       return (- 8 );
     }
//--- Tuning of all necessary indicators
   if (!ExtExpert.InitIndicators())
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing indicators" );
      ExtExpert.Deinit();
       return (- 9 );
     }
//--- ok
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick ()
  {
   ExtExpert. OnTick ();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade ()
  {
   ExtExpert. OnTrade ();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   ExtExpert. OnTimer ();
  }
//+------------------------------------------------------------------+
 
yoldaş geliştiriciler, kodda neyi değiştirmem gerektiğini açıklayın, böylece bir al / sat sinyalinden sonra pozisyon bir kez açılıp kapanır ve bu kadar, danışman bir sonraki sinyale kadar pozisyon açmaz. Bu, özellikle sistem birkaç göstergeden oluştuğunda geçerlidir. Danışman her zaman pozisyonundadır. Birini alıp durdurarak kapatıyor, hemen diğerini açıyor.
 

göstergeler hakkında soru

OnCalculate içindeki giriş parametrelerinden böyle bir yapı var:

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime & time[],
                 const double & open[],
                 const double & high[],
                 const double & low[],
                 const double & close[],
                 const long & tick_volume[],
                 const long & volume[],
                 const int & spread[])
  {
     ...
  }

Tüm bu zevk kesinlikle mevcut zaman dilimine bağlıdır, bu nedenle, başka bir zaman diliminin benzer verilerine ulaşmak için, örneğin, istenen zaman diliminde gerekli yerleşik standart göstergenin tutamacının çağrısını kullanabilirsiniz:

handle= iGator ( _Symbol , PERIOD_W1 );

ve ardından gerekli verileri Kopyalama işlevlerinin varyasyonları aracılığıyla arabelleklere kopyalayın.

Her şey yoluna girecek, ancak mevcut olandan farklı zaman dilimlerinde oranları_toplam ve prev_hesaplananı kullanmaya ihtiyaç var. Anladığım kadarıyla yoklar. Temel olarak mevcut zaman dilimi için uygun olmadıkları açıksa, nereden ve nasıl elde edilir?

Tabii ki, yardımda net bir açıklama var:

"OnCalculate() işlevi tarafından döndürülen değer ile ikinci giriş parametresi prev_calculated arasındaki ilişkiyi not etmek gerekir. İşlev çağrıldığında, prev_calculated parametresi, önceki çağrıda OnCalculate() işlevi tarafından döndürülen değeri içerir . Bu Bu işlevin önceki başlatılmasından bu yana değişmeyen çubuklar için tekrarlanan hesaplamalardan kaçınmak için özel bir gösterge hesaplamak için ekonomik algoritmalar uygulamanıza olanak tanır.

Bunu yapmak için, geçerli işlev çağrısındaki çubuk sayısını içeren Rate_total parametresinin değerini döndürmek genellikle yeterlidir. OnCalculate() işlevine yapılan son çağrıdan bu yana fiyat verileri değiştiyse (daha derin geçmiş yüklendi veya geçmiş boşlukları dolduruldu), prev_calculated girdi parametresinin değeri terminalin kendisi tarafından sıfıra ayarlanacaktır."

Öyleyse, yukarıdaki prensibe göre diğer zaman dilimleri için kendi oranlarınız_toplam ve prev_hesaplanan analoglarınızı gerçekten manuel olarak uygulamak zorunda mısınız? Yoksa hala kullanıma hazır bir şey var mı? Peki, örneğin, şöyle:

rates_total = BarsCalculated (handle);
veya Kopyala işlevinin döndürülen değerini alın. Ama prev_calculated ile, hafif söylemek gerekirse, o kadar basit değil ... Nasıl yetkin bir şekilde uygulanacaktır?
 

Rosh'un matematikle ilgili makalesini okudum https://www.mql5.com/ru/articles/1492 .

Şampiyonada aynı değerlendirme kriterleri.Örneğin OnTester()'da benzer bir analizi bağlamak mümkün müdür?

Hazır çözümler ücretsiz mi?

Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4
  • www.mql5.com
Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4: автоматическая торговля
 
Karlson :

Rosh'un matematikle ilgili makalesini okudum https://www.mql5.com/ru/articles/1492 .

Şampiyonada aynı değerlendirme kriterleri.Örneğin OnTester()'da benzer bir analizi bağlamak mümkün müdür?

Hazır çözümler ücretsiz mi?

Evet - Test İstatistikleri
 
Rosh :
Evet - Test İstatistikleri
Teşekkür ederim.
 

Söylemek?

Geçmişten bir işlem seçtim, işlemin yönü "ters" (giriş/çıkış), ardından işlem hacmini HistoryDealGetDouble(ticket,DEAL_VOLUME) belirlerim.
Toplam hacmi alıyorum ama kapattığım ve açtığım hacmi nasıl öğrenebilirim? Teşekkür ederim.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Rosh :
Evet - Test İstatistikleri

Lineer regresyon kullanmak gibi bir şey yazdım, terminale standart olarak böyle bir şey girmek ve hatta test cihazında grafikte görüntülemek planlanıyor mu?

Ve Z puanını hesaplamayı nasıl anladınız, toplam pozitif ve negatif seri sayısını bağımsız olarak hesaplamanız gerekiyor?

 
MetaTrader 5 bu borsaya https://mtgox.com/ bağlanabilir mi?
 
Karlson :

Ve Z puanını hesaplamayı nasıl anladınız, toplam pozitif ve negatif seri sayısını bağımsız olarak hesaplamanız gerekiyor?

Evet, kendi başıma. Prensip olarak, kodu hesaplama için MQL5'e gönderebilirim.
Neden: