Hatalar, hatalar, sorular - sayfa 585

 
Sihirbaz tarafından oluşturulan Uzman Danışmanlardan ayrı olarak alım satım sinyali modüllerini kullanmak mümkün müdür? test için yazdım


#include <Expert\Signal\SignalMA.mqh>


CSignalMA  SignalMA;
int        TickCount;
string     Str;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TickCount=0;
 
   SignalMA.Symbol(Symbol());
   SignalMA.Period(PERIOD_H1);
   SignalMA.Weight(0.5);
 
   SignalMA.PeriodMA(20);
   SignalMA.Shift(0);
   SignalMA.Method(MODE_SMA);
   SignalMA.Applied(PRICE_CLOSE);

 
   return(0);
 
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   TickCount++;
   Str = "LongCondition  = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
   Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
   Comment(Str);
 
  }
//+------------------------------------------------------------------+

ama koyu renkle vurgulanan şey CsignalMA sınıfında değil derlenmiş, bir sembol üzerine atmaya çalıştığınızda veriyor


2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Dönem: zaman çerçevesinin değiştirilmesi yasaktır
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Sembol: sembolün değiştirilmesi yasaktır

Standart ticaret sinyalleri için sembol ve zaman çerçevesi nasıl değiştirilir?
Использование прямого и обратного преобразований Фишера для анализа рынков в MetaTrader 5
Использование прямого и обратного преобразований Фишера для анализа рынков в MetaTrader 5
  • 2011.08.16
  • investeo
  • www.mql5.com
Функция распределения рыночных данных не является гауссовой, скорее она похожа на распределение синусоподобной волны. Поскольку большинство индикаторов базируются на предположении о нормальном распределении цен, их нужно "скорректировать". Решением является использование преобразования Фишера, которое преобразует данные таким образом, чтобы они имели распределение, близкое к нормальному. В статье рассмотрена теория прямого и обратного преобразования Фишера и ее применение в трейдинге, разработан модуль торговых сигналов.
 
Konstantin83 :
Ticaret sinyali modülleri , sihirbaz tarafından oluşturulan Uzman Danışmanlardan ayrı olarak kullanılabilir mi? test için yazdım


#include <Expert\Signal\SignalMA.mqh>


CSignalMA  SignalMA;
int        TickCount;
string     Str;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   TickCount=0;
 
   SignalMA.Symbol(Symbol());
   SignalMA.Period(PERIOD_H1);
   SignalMA.Weight(0.5);
 
   SignalMA.PeriodMA(20);
   SignalMA.Shift(0);
   SignalMA.Method(MODE_SMA);
   SignalMA.Applied(PRICE_CLOSE);

 
   return(0);
 
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   TickCount++;
   Str = "LongCondition  = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
   Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
   Comment(Str);
 
  }
//+------------------------------------------------------------------+

ama koyu renkle vurgulanan şey CsignalMA sınıfında değil derlenmiş, bir sembol üzerine atmaya çalıştığınızda veriyor


2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Dönem: zaman çerçevesinin değiştirilmesi yasaktır
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Sembol: sembolün değiştirilmesi yasaktır

Standart ticaret sinyalleri için sembol ve zaman çerçevesi nasıl değiştirilir?
Temel olarak, yapabilirsiniz. Ancak ticaret sinyalleri modülünün başlatılması tam bir "ritüeldir". Korkarım ki "parmaklarda" başlatma sırasının tamamını açıklayamayacağım.
 

Sonraki kod:

RectLabel* GetLabel()
{
   static bool initialized = false ;
   static RectLabel label( "rectlabel sample" , 0 , 0 );
   
   if (!initialized)
   {
      Pos leftTop = { 100 , 100 };
      Rect rect(leftTop, 100 , 50 );
      
      label.Move(rect);
      label.SetBGColor( clrYellowGreen );
      label.SetTooltip( " -- Yuuuu! -- " );
      
      initialized = true ;
   }

   return GetPointer (label);
}

işlev her çağrıldığında etiket için yapıcıyı çağırır.

Документация по MQL5: Основы языка / Функции / Вызов функции
Документация по MQL5: Основы языка / Функции / Вызов функции
  • www.mql5.com
Основы языка / Функции / Вызов функции - Документация по MQL5
 

Aşağıdaki koda göre: İlk durumda gösterge ayarlanır, ancak ikinci durumda değil (eğik çizgi ile geçiş yapıyorum) Hata vermiyor.

 #include <Charts\Chart.mqh>
CChart cc;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   int f_h= iFractals ( _Symbol , _Period );
   
   if (f_h== INVALID_HANDLE ) { Print ( "Ошибка создания индикатора." ); return (- 1 );}
   
   ChartIndicatorAdd ( 0 , 0 ,f_h);   // устанавливает индикатор
   
   //cc.IndicatorAdd(0,f_h);     // НЕ устанавливает индикатор
   
   if ( GetLastError ()> 0 ) { Print ( "Ошибка  (" , GetLastError (), ") " );} ResetLastError ();
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
 { }
 

Bu kütüphaneye göre ikinci seçeneğe göre 0 gösteriyor. Diğer tüm fonksiyonlar çalışıyor gibi görünüyor.

 #include <Trade\SymbolInfo.mqh>
CSymbolInfo si;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   Print ( SymbolInfoDouble ( "EURUSD" , SYMBOL_BID )); // все правильно
   
   si.Name( "EURUSD" );
   Print (si.Bid());             // выводит 0
   
   if ( GetLastError ()> 0 ) { Print ( "Ошибка  (" , GetLastError (), ") " );} ResetLastError ();
   return ( 0 );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
 { 
 }
[Silindi]  
Karlson :

Aşağıdaki koda göre: İlk durumda gösterge ayarlanır, ancak ikinci durumda değil (eğik çizgi ile geçiş yapıyorum) Hata vermiyor.

Anladığım kadarıyla, şu anda üç parametrenin tümü zorunludur.

Bu nedenle, göstergenin görüntüleneceği pencerenin sayısı belirtilmelidir (seçenekler: 0 - ana pencere, ChartIndicatorsTotal() - yeni bir pencere, 0'dan ChartIndicatorsTotal() -1 - belirli bir mevcut pencere).

Hata üretmemesi iyi değildir.

Karlson :

Bu kütüphaneye göre ikinci seçeneğe göre 0 gösteriyor. Diğer tüm fonksiyonlar çalışıyor gibi görünüyor.

Büyük olasılıkla, fiyatı almadan önce yenilemeleri (en azından RefreshRates ) kullanmalısınız.

Doğru olanı şöyle görünmeli

  si.Name( "EURUSD" );
  si.Refresh();
  si.RefreshRates();
  Print (si.Bid());
 

Teşekkürler. Yenilemeyi belirledikten sonra Bid ile gerçekten çalıştı.

Ancak göstergenin çıktısı ile kütüphaneyi kullanarak 2 parametreye ihtiyaç duyar: Bir alt pencere ve bir tutamaç Aksi takdirde, yanlış sayıda parametreye yemin eder.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 
Karlson :

Teşekkürler. Yenilemeyi belirledikten sonra Bid ile gerçekten çalıştı.

Ancak göstergenin çıktısı ile kütüphaneyi kullanarak 2 parametreye ihtiyaç duyar, bir alt pencere ve bir tutamaç.Aksi takdirde yanlış sayıda parametreye yemin eder.hayır.

Kütüphaneyi kullanmak 2 parametre gerektirir. Grafik ve alt pencere .
 
uncleVic :
Kütüphaneyi kullanmak 2 parametre gerektirir. Grafik ve alt pencere .

Kolsuz mu? Ve sistem hangi hindiyi koyacağını nereden biliyor? ..Şimdiye kadar yazılanlara güvendim :) Alt pencere ve tutamaç.

[Silindi]  
Karlson :

Kolsuz mu? Ve sistem hangi hindiyi koyacağını nereden biliyor? ..Şimdiye kadar yazılanlara güvendim :) Alt pencere ve tutamaç.

Kütüphane hakkında (sınıf yardımından)

GöstergeEkle

Belirtilen grafik penceresine belirtilen tutamaçla bir gösterge ekler.

 bool   IndicatorAdd(
   int    sub_win         // номер подокна
   int    handle           // хэндл индикатора
   );

ChartIndicatorAdd'in doğrudan çalışmasıyla ilgili olarak.

GrafikGöstergeEkle

Belirtilen grafik penceresine belirtilen tutamaçla bir gösterge ekler.

 bool    ChartIndicatorAdd (
   long   chart_id,                 // идентификатор графика
   int    sub_window                 // номер подокна
   int    indicator_handle           // хэндл индикатора
   );

CChart sınıfına gelince.

Gereksiz sorulardan kaçınmak için üç temel kurala uymaya çalışıyoruz:

1. Kaynak koduna bakarız, bir şey net değilse belgelere bakarız (unutmayın ki kaynak kod her zaman doğruyu söyleyecektir ve belgeler yalan olabilir);

2. OOP'nin uygulanması bizim için önemliyse, belirli bir sınıfın tanımıyla başlıyoruz ve "doğrudan yürütücüler"e gidiyoruz. "Gerçek iş" önemliyse, OOP en son öğrenilmelidir (yukarıdan aşağıya/yukarıdan aşağıya kod öğrenme);

3. Belgeleri ve kaynakları okuduktan sonra net olmayan bir şey varsa, foruma gidin.

Doğrudan sınıfta IndicatorAdd yönteminin uygulanması üzerine

Kaynağa bakarsanız, alt pencerenin ve tanıtıcının yönteme geçirildiği (yardımda belirtildiği gibi) ve üçüncü parametrenin sınıfın kendisinde depolanan verilerden alındığı anlaşılır (grafikten bahsediyorum) İD).

 class CChart : public CObject
  {
protected :
   long    m_chart_id ; // chart identifier
public :
   //methods for working with indicators
   bool   IndicatorAdd( int subwin, int handle);
  }

bool CChart::IndicatorAdd( int subwin , int handle )
  {
//checking (проверка корректности идентификатора графика)
   if ( m_chart_id <= 0 ) return ( false );
//Непосредственно в обработку выдаются три параметра
   return ( ChartIndicatorAdd ( m_chart_id ,subwin,handle));
  }