Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 242

 

Bu şekilde mümkündür:

 void OnStart ()
{
   int select= 10 ;
   MqlRates rates[];
   CopyRates ( _Symbol , _Period , 0 ,select,rates);
   for ( int i= 1 ;i<select;i++)
  {
     if (rates[i].close<rates[i- 1 ].close)
    {
       //тут какой-нибудь код
    }
  }
}
 
Fleder :

Bu şekilde mümkündür:

Teşekkür ederim.

ArraySize ile ilgili soru, bir kerede seçme [9] eleman sayısına sahipsem, fonksiyon 10 değerini döndürür mü? veya bir değer atayana kadar 0 mı olacak?

 
websafe25 :

Teşekkür ederim.

ArraySize ile ilgili soru, bir kerede seçme [9] eleman sayısına sahipsem, fonksiyon 10 değerini döndürür mü? veya bir değer atayana kadar 0 mı olacak?

Dizilerle çalışmak için işlevler grubu

Dört boyutlu dizilerden fazlasına izin verilmez. Her boyut 0 ile size_size-1 arasında indekslenir . 50 elemanlı tek boyutlu bir dizinin özel durumunda, ilk elemana erişim dizi[0], son eleman - dizi[49] gibi görünecektir.

İşte kontrol edilecek komut dosyası:

 //+------------------------------------------------------------------+
//|                                                  test_script.mq5 |
//|                              Copyright © 2014, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2014, Vladimir Karputov"
#property link        "http://wmua.ru/slesar/"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double select[ 9 ];
   Print ( "Количество элементов массива select =" , ArraySize (select));
  }
//+------------------------------------------------------------------+
Документация по MQL5: Операции с массивами
Документация по MQL5: Операции с массивами
  • www.mql5.com
Операции с массивами - Документация по MQL5
 
websafe25 :

Teşekkür ederim.

ArraySize ile ilgili soru, bir kerede seçme [9] eleman sayısına sahipsem, fonksiyon 10 değerini döndürür mü? veya bir değer atayana kadar 0 mı olacak?

Dizi statikse ve 10 hücre boyutuna sahipse, ArraySize işlevi her hücrenin içeriğinden bağımsız olarak her zaman 10 sayısını döndürür.

Dizi dinamikse, ArraySize işlevi gerçek boyutunu döndürür (ve bu boyut değiştirilebilir).

 

Jeneratörümü yapmaya devam ediyorum) Modül Include\Expert\Signal konumunda

1. Sinyal modülleri listesinde bulamıyorum.

2. Bu satır kafa karıştırıcı:

 double buy    =Signal_open_b( 1 );
aradaki farkı almak lazım
Main(index)-Signal(index)

indeksli çubukta 1. Doğru anladıysam indeks parantez içinde mi belirtilmiş?

3. Bu satır, tüm gösterge arabelleklerinin sayısını veya hangilerinin kullanılacağını gösteriyor mu?

 if (!m_TSI.NumBuffers( 11 )) return ( false );

4. Doğrulama için komut dosyasından bu oluşturucudan nasıl veri talep edeceğimi söyle?

Kodun tamamı aşağıdadır. Belki başka bir yerde yanılıyorum, lütfen tavsiye verin.

 #include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Сигнал индикатора 'Blau_Ergodic'                           |
//| Type=SignalAdvanced                                              |
//| Name=MyCustomIndicator                                           |
//| ShortName=MyCustomIndicator                                      |
//| Class=CSignalMyCustInd                                           |
//| Page=signal_envelopes                                            |
//| Parameter=q                                                      |
//| Parameter=r                                                      |
//| Parameter=s                                                      |
//| Parameter=u                                                      |
//| Parameter=ul                                                     |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalMyCustInd.                                          |
//| Purpose: Класс генератора торговых сигналов на основе            |
//|          пользовательского индикатора.                           |
//| Является производным от класса CExpertSignal.                    |
//+------------------------------------------------------------------+
class CSampleSignal : public CExpertSignal
  {
protected :
   CiCustom           m_TSI;               // объект для доступа к значениям TSI
   CiClose            m_close;           // объект для доступа к ценам закрытия баров
   //--- настраиваемые параметры
   int       q;   // q - период, по которому вычисляется моментум
   int       r; // r - период 1-й EMA, применительно к моментуму
   int       s;   // s - период 2-й EMA, применительно к результату первого сглаживания
   int       u;   // u - период 3-й EMA, применительно к результату второго сглаживания
   int       ul; // ul - (сигнальная линия) период EMA, применительно к эргодике
   double              m_stop_loss;       // уровень установки ордера "stop loss" относительно цены открытия
   double              m_take_profit;     // уровень установки ордера "take profit" относительно цены открытия
public :
              CSampleSignal();
 //--- методы установки настраиваемых параметров              
   void                Q( int value)                 { q=value;   }
   void                R( int value)                 { r=value;   }
   void                S( int value)                 { s=value;   }
   void                U( int value)                 { u=value;   }
   void                UL( int value)                { ul=value;  }
   void                StopLoss( double value)       { m_stop_loss=value;   }
   void                TakeProfit( double value)     { m_take_profit=value; }
   //--- метод проверки параметров настройки
   virtual bool        ValidationSettings();   
   virtual bool        InitIndicators(CIndicators* indicators);
     //--- методы проверки, если модели рынка сформированы 
   virtual bool       CheckOpenLong( double & price, double & sl, double & tp, datetime & expiration);
   virtual bool       CheckOpenShort( double & price, double & sl, double & tp, datetime & expiration);
protected :
   //--- метод инициализации объектов
   bool                InitMyCustomIndicator(CIndicators* indicators);
   bool                InitClose(CIndicators* indicators);
   //--- методы доступа к данным объектов
   double              Main( int index)                     { return (m_TSI.GetData( 0 ,index)); }
   double              Signal( int index)                   { return (m_TSI.GetData( 1 ,index)); }
   double              Signal_open_b( int index)           { return (Main(index)-Signal(index));}
   double              Signal_open_s( int index)           { return (Signal(index)-Main(index));}
   double              Close( int index)                    { return (m_close.GetData(index)); }
  };
//+------------------------------------------------------------------+
//| Конструктор CSampleSignal.                                       |
//| INPUT:  нет.                                                     |
//| OUTPUT: нет.                                                     |
//| REMARK: нет.                                                     |
//+------------------------------------------------------------------+
void CSampleSignal::CSampleSignal()
  {
   q= 2 ; 
   r= 7 ;
   s= 5 ;
   u= 3 ;
   ul= 5 ;   
  }
//+------------------------------------------------------------------+
//| Проверка параметров настройки.                                   |
//| INPUT:  нет.                                                     |
//| OUTPUT: true-если настройки правильные, иначе false.             |
//| REMARK: нет.                                                     |
//+------------------------------------------------------------------+
bool CSampleSignal::ValidationSettings()
  {
   //--- проверка параметров
   if (q<= 0 ||r<= 0 ||s<= 0 ||u<= 0 ||ul<= 0 )
     {
       printf ( __FUNCTION__ + ": период должен быть больше нуля" );
       return ( false );
     }
//--- успешное завершение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Инициализация индикаторов и таймсерий.                           |
//| INPUT:  indicators - указатель на объект-коллекцию               |
//|                      индикаторов и таймсерий.                    |
//| OUTPUT: true-в случае успешного завершения, иначе false.         |
//| REMARK: нет.                                                     |
//+------------------------------------------------------------------+
bool CSampleSignal::InitIndicators(CIndicators* indicators)
  {
//--- проверка указателя
   if (indicators== NULL )       return ( false );
//--- инициализация TSI
   if (!InitMyCustomIndicator(indicators))     return ( false );
   //--- инициализация таймсерии цен закрытия
   if (!InitClose(indicators)) return ( false );
   return ( true );
  }
//+------------------------------------------------------------------+
//| Инициализация индикаторов.                                       |
//+------------------------------------------------------------------+
bool CSampleSignal::InitMyCustomIndicator(CIndicators *indicators)
  {
//--- добавление объекта в коллекцию
   if (!indicators.Add( GetPointer (m_TSI)))
     {
       printf ( __FUNCTION__ + ": error adding object" );
       return ( false );
     }
//--- задание параметров индикатора
   MqlParam parameters[ 6 ];
//---
   parameters[ 0 ].type= TYPE_STRING ;
   parameters[ 0 ].string_value= "Blau_Ergodic.ex5" ;
   parameters[ 1 ].type= TYPE_INT ;
   parameters[ 1 ].integer_value=q;
   parameters[ 2 ].type= TYPE_INT ;
   parameters[ 2 ].integer_value=r;
   parameters[ 3 ].type= TYPE_INT ;
   parameters[ 3 ].integer_value=s;
   parameters[ 4 ].type= TYPE_INT ;
   parameters[ 4 ].integer_value=u;
   parameters[ 5 ].type= TYPE_INT ;
   parameters[ 5 ].integer_value=ul;
//--- инициализация объекта
   if (!m_TSI.Create(m_symbol.Name(), 0 , IND_CUSTOM , 6 ,parameters))
     {
       printf ( __FUNCTION__ + ": error initializing object" );
       return ( false );
     }
//--- количество буферов
   if (!m_TSI.NumBuffers( 11 )) return ( false );
//--- ok
   return ( true );
  }
//+------------------------------------------------------------------+
//| Инициализация таймсерии цен закрытия.                            |
//| INPUT:  indicators - указатель на объект-коллекцию               |
//|                      индикаторов и таймсерий.                    |
//| OUTPUT: true-в случае успешного завершения, иначе false.         |
//| REMARK: нет.                                                     |
//+------------------------------------------------------------------+
bool CSampleSignal::InitClose(CIndicators* indicators)
  {
//--- инициализация объекта таймсерии
   if (!m_close.Create(m_symbol.Name(),m_period))
     {
       printf ( __FUNCTION__ + ": ошибка инициализации объекта" );
       return ( false );
     }
//--- добавление объекта в коллекцию
   if (!indicators.Add( GetPointer (m_close)))
     {
       printf ( __FUNCTION__ + ": ошибка добавления объекта" );
       return ( false );
     }
//--- успешное завершение
   return ( true );
  }
//+------------------------------------------------------------------+
//| Проверка выполнения условия для покупки.                         |
//| INPUT:  price      - ссылка для размещения цены открытия,        |
//|         sl         - ссылка для размещения цены stop loss,       |
//|         tp         - ссылка для размещения цены take profit,     |
//|         expiration - ссылка для размещения времени истечения.    |
//| OUTPUT: true-если условие выполнено, иначе false.                |
//| REMARK: нет.                                                     |
//+------------------------------------------------------------------+
bool CSampleSignal::CheckOpenLong( double & price, double & sl, double & tp, datetime & expiration)
  {
//--- подготовка данных
   double buy    =Signal_open_b( 1 );
   double unit  =PriceLevelUnit();
//--- проверка условия
   if (buy> 1 )
     {
      price=m_symbol.NormalizePrice(Close( 0 ));
      sl   =m_symbol.NormalizePrice(price-m_stop_loss*unit);
      tp   =m_symbol.NormalizePrice(price+m_take_profit*unit);
      expiration+=m_expiration* PeriodSeconds (m_period);
       //--- условие выполнено
       return ( true );
     }
//--- условие не выполнено
   return ( false );
  }
 
forexman77 :

Jeneratörümü yapmaya devam ediyorum) Modül Include\Expert\Signal konumunda

1. Sinyal modülleri listesinde bulamıyorum.

2. Bu satır kafa karıştırıcı:

aradaki farkı almak lazım

indeksli çubukta 1. Doğru anladıysam indeks parantez içinde mi belirtilmiş?

3. Bu satır, tüm gösterge arabelleklerinin sayısını veya hangilerinin kullanılacağını gösteriyor mu?

4. Doğrulama için komut dosyasından bu oluşturucudan nasıl veri talep edeceğimi söyle?

Kodun tamamı aşağıdadır. Belki başka bir yerde yanılıyorum, lütfen tavsiye verin.

Class'tan sonraki başlıkta CSampelSignal yazmanız gerekir.
 
barabashkakvn :
Class'tan sonraki başlıkta CSampelSignal yazmanız gerekir.

Böyle mi yaptı:

 //+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Сигнал индикатора 'Blau_Ergodic'                           |
//| Type=SignalAdvanced                                              |
//| Name=MyCustomIndicator                                           |
//| ShortName=MyCustomIndicator                                      |
//| Class=CSampelSignal                                              |
//| Page=signal_envelopes                                            |
//| Parameter=q                                                      |
//| Parameter=r                                                      |
//| Parameter=s                                                      |
//| Parameter=u                                                      |
//| Parameter=ul                                                     |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSampelSignal.                                          |
//| Purpose: Класс генератора торговых сигналов на основе            |
//|          пользовательского индикатора.                           |
//| Является производным от класса CExpertSignal.                    |
//+------------------------------------------------------------------+
bulamıyorum. Menüde bir danışman oluşturmayı seçiyorum.
 
forexman77 :

Böyle mi yaptı:

bulamıyorum. Menüde bir danışman oluşturmayı seçiyorum.
MetaEditor'u yeniden başlatmanız gerekiyor.


Мастер MQL5: Как написать свой модуль торговых сигналов
Мастер MQL5: Как написать свой модуль торговых сигналов
  • 2010.12.28
  • MetaQuotes Software Corp.
  • www.mql5.com
Генератор торговых стратегий Мастера MQL5 значительно упрощает проверку торговых идей. В статье рассказывается о том, как написать и подключить в Мастер MQL5 свой собственный класс торговых сигналов с реализацией сигналов по пересечению ценой скользящей средней, рассматривается структура и формат описания созданного класса для Мастера MQL5.
 
barabashkakvn :
MetaEditor'u yeniden başlatmanız gerekiyor.

https://www.mql5.com/en/articles/226

Birkaç kez açılıp kapandı. Hiç birşey yok.

Belki de yıkıcı kaçırdığı için. Derleme yapmıyor ve hata veriyor.

 //+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CSampleSignal::~CSampleSignal( void )
  {
  }
~CSampleSignal' - üye işlevi tanımlanmadı
 
forexman77 :

Böyle mi yaptı:

bulamıyorum. Menüde bir danışman oluşturmayı seçiyorum.

Ve tam olarak, başlığın adıyla, dinin izin vermediği kodu ortaya koyun :) ?

Ayrıca, okumaya değer:

MQL5 Sihirbazı: Kendi ticaret sinyalleri modülünüzü nasıl yazabilirsiniz?

https://www.mql5.com/ru/forum/3724/page3#comment_66962

Ve koddaki hata, başlıktaki parametrelerin yanlış bir açıklamasıdır. Vurgulanan , değiştirilmiş koddur:

 #include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=Сигнал индикатора 'Blau_Ergodic'                           |
//| Type=SignalAdvanced                                              |
//| Name=MyCustomIndicator                                           |
//| ShortName=MyCustomIndicator                                      |
//| Class=CSampleSignal                                              |
//| Page=signal_envelopes                                            |
//| Parameter=q,int,12,Parametr_q                                    |
//| Parameter=r,int,6,Parametr_r                                     |
//| Parameter=s,int,9,Parametr_s                                     |
//| Parameter=u,int,24,Parametr_u                                    |
//| Parameter=ul,int,8,Parametr_ul                                   |
//+------------------------------------------------------------------+
// wizard description end

Tabii ki parametre değerlerini tavandan ayarlıyorum. Bu değerler sadece örnek içindir.