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

 
forexman77 :

Yine de, "st" değişkenine yalnızca Alert 'da değil, aynı zamanda hesaplamalar için de ihtiyacım olacak ve derlerken, "tür dönüşümü nedeniyle veri kaybı mümkün" uyarısı beliriyor.

Sanırım 10 basamaklı bir sayı olduğu ve int'de maksimum değer 2 147 483 647 olduğu için şu anda 1 380 758 400 alıyorum. Belki uzun kullanmak mantıklıdır ve muhtemelen danışman çok fazla tüketecektir. Bu kısımda Kaynaklar?

Tip döküm ilkesini gerçekten anlamadın mı? Bu kadar basit:

 int st=( int )tp[ 0 ];
 

Tuval üzerine bir uzman çizmek istiyorum. Böylece tuval üzerindeki resim OnInit, OnTimer, OnTick ve onChartEvent'te yeniden çizilir. CCanvas canvas'ı global değişkenlerde ilan ediyorum ve ihtiyaç duyduğum her yerde canvas.methods'u çağırıyorum. Ancak derleyici, çözümlenmemiş statik değişken 'CCanvas::m_default_colors' (ve renklerin bununla ne ilgisi var?)

bunun gibi kod

#include <Canvas\Canvas.mqh>

CCanvas tuval;

int OnInit()
{
//Kanvas kanvas; burada bildirilirse çizer, ancak OnTick'te nasıl yeniden çizilir?

canvas.CreateBitmapLabel("ProbeGraph", 0, 0, genişlik ,yükseklik, COLOR_FORMAT_ARGB_RAW);

tuval.Çember(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); tuval.Güncelleme();

}

geçersiz OnTick()
{
tuval.Çember(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); tuval.Güncelleme();
}

Derleyici ile nasıl pazarlık yapılır? EA'da tuval ile bir örnek var mı?
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
Virty :

Tuval üzerine bir uzman çizmek istiyorum. Böylece tuval üzerindeki resim OnInit, OnTimer, OnTick ve onChartEvent'te yeniden çizilir. CCanvas canvas'ı global değişkenlerde ilan ediyorum ve ihtiyaç duyduğum her yerde canvas.methods'u çağırıyorum. Ancak derleyici, çözülmemiş böyle bir küresel bildirime yemin ediyor

...

Derleyici ile nasıl pazarlık yapılır? EA'da tuval ile bir örnek var mı?

Yeni değilsin! Kodu düzgün bir şekilde gönderin!

 
DC2008 :

Yeni değilsin! Kodu düzgün bir şekilde gönderin!

İşte kod. Ama içine kazmak çok daha kötü. Ve çalışmıyor. Hata çözülmemiş statik değişken 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9

Ve örtüşen yükseklik ve genişlik değişkenleri hakkında bir sürü uyarı. Genel olarak, anladığım kadarıyla, derleyici global değişkenlerde CCanvas sınıfı yapıcısını çağırmak istemiyor, ancak OnInit'te yapıcıyı çağırmak istiyor. Ve sonra OnInit dışında sınıf örneğine nasıl erişeceğimi anlamıyorum.

Daha. daha önce, Draw işlevinin gövdesi onInit'in içindeydi, ancak Draw'ın kendisi yoktu. Her şey çalıştı, ancak OnInit'in içinde. Global değişkenler aracılığıyla çalışmadığından, Draw işlevine bir sınıf örneğine bir referans iletmeye çalışarak burada zaten saptırmaya başladım.

Genel olarak, kod yazılma sürecindedir, sorun CCanvas sınıfının global bir örneğini oluşturmaktır.


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

#include <Canvas\Canvas.mqh>
int heigth= 500 ;
int width= 500 ;
int Xcentr= round (width/ 2 );
int Ycentr= round (width/ 2 );
int Rmin= 25 ;
int Rmax= round (heigth/ 2 - 1 );


#define ArrayS 100000 
double arrayopen[ArrayS];
CCanvas canvas;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//CCanvas canvas;
   canvas.CreateBitmapLabel( "ProbeGraph" , 0 , 0 ,width,heigth, COLOR_FORMAT_ARGB_RAW );

//Draw(canvas);


//--- create timer
   EventSetTimer ( 60 );

//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
//canvas.Update();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---

  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
//---

  }
//+------------------------------------------------------------------+


int ChartVisibleBars( const long chart_ID= 0 )
  {
//--- подготовим переменную для получения значения свойства
   long result=- 1 ;
//--- сбросим значение ошибки
   ResetLastError ();
//--- получим значение свойства
   if (! ChartGetInteger (chart_ID, CHART_VISIBLE_BARS , 0 ,result))
     {
       //--- выведем сообщение об ошибке в журнал "Эксперты"
       Print ( __FUNCTION__ + ", Error Code = " , GetLastError ());
     }
//--- вернем значение свойства графика
   return (( int )result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Draw(CCanvas *canvas)
  {
   ArrayInitialize (arrayopen, 0 );
   double r;
   double A, Amin= 0 , Amax= 2 * 3.1415 ;
   int x,y, xprev= 0 , yprev= 0 ;

//canvas.Erase(ColorToARGB(clrRed, 115));
   canvas.Circle(Xcentr,Ycentr,Rmin, ColorToARGB ( clrBlue , 115 ));
   canvas.Circle(Xcentr,Ycentr,Rmax, ColorToARGB ( clrBlue , 115 ));

   int Nbars= CopyOpen ( Symbol (), Period (), TimeCurrent (),ChartVisibleBars( 0 ),arrayopen); Print ( "Nbars=" ,Nbars);
   double KursMin= 1000000 ,KursMax= 0 ;
   for ( int i= 0 ; i<Nbars; i++)
     {
       if (KursMin>arrayopen[i]) KursMin=arrayopen[i];
       if (KursMax<arrayopen[i]) KursMax=arrayopen[i];
     };
   Print ( "KursMin=" ,KursMin); Print ( "KurMax=" ,KursMax);

   for ( int i= 0 ; i<Nbars; i++)
     {
       if ((KursMax-KursMin)> 0 ) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin);
       if (Nbars> 0 ) A=Amin+(Amax-Amin)*i/(Nbars);
      x= round (Xcentr-r* MathSin (A));
      y= round (Ycentr+r* MathCos (A));
      canvas.PixelSetAA(x,y, ColorToARGB ( clrGreen , 155 ));
       if (xprev> 0 && yprev> 0 ) canvas.Line(xprev,yprev,x,y, ColorToARGB ( clrBlue , 155 ));
      xprev=x; yprev=y;

     };

   canvas.Update();

  }
//+------------------------------------------------------------------+
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Bir şeyi anlayamıyorum: derleyici yemin ederse, neden hatalar düzeltilmiyor? ANCAK?

 
DC2008 :

Bir şeyi anlayamıyorum: derleyici yemin ederse - neden hatalar düzeltilmiyor? ANCAK?

Bu yüzden nasıl düzelteceğimi bilmiyorum. bu yüzden soruyorum
 
//+------------------------------------------------------------------+
//|                                                   ProbeGraph.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Canvas\Canvas.mqh>
int heigth=500;
int width_1=500;
int Xcentr=int(round(width_1/2));
int Ycentr=int(round(width_1/2));
int Rmin=25;
int Rmax=int(round(heigth/2-1));


#define ArrayS 100000 
double arrayopen[ArrayS];
CCanvas *canvas;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//CCanvas canvas;
   canvas=new CCanvas;
//--- проверка указателя перед его использованием
   if(CheckPointer(canvas)==POINTER_INVALID)
     {
      Print(__FUNCTION__," переменная 'canvas' не инициализирована!");
      return(INIT_SUCCEEDED);
     }
   canvas.CreateBitmapLabel("ProbeGraph",0,0,width_1,heigth,COLOR_FORMAT_ARGB_RAW);

   Draw();

//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
//canvas.Update();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

  }
//+------------------------------------------------------------------+

int ChartVisibleBars(const long chart_ID=0)
  {
//--- подготовим переменную для получения значения свойства
   long result=-1;
//--- сбросим значение ошибки
   ResetLastError();
//--- получим значение свойства
   if(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
     {
      //--- выведем сообщение об ошибке в журнал "Эксперты"
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- вернем значение свойства графика
   return((int)result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Draw()
  {
   ArrayInitialize(arrayopen,0);
   double r=0;
   double A=0, Amin=0, Amax=2*3.1415;
   int x,y,xprev=0,yprev=0;

//canvas.Erase(ColorToARGB(clrRed, 115));
   canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115));
   canvas.Circle(Xcentr,Ycentr,Rmax,ColorToARGB(clrBlue, 115));

   int Nbars=CopyOpen(Symbol(),Period(),TimeCurrent(),ChartVisibleBars(0),arrayopen); Print("Nbars=",Nbars);
   double KursMin=1000000,KursMax=0;
   for(int i=0; i<Nbars; i++)
     {
      if(KursMin>arrayopen[i]) KursMin=arrayopen[i];
      if(KursMax<arrayopen[i]) KursMax=arrayopen[i];
     };
   Print("KursMin=",KursMin); Print("KurMax=",KursMax);

   for(int i=0; i<Nbars; i++)
     {
      if((KursMax-KursMin)>0) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin);
      if(Nbars>0) A=Amin+(Amax-Amin)*i/(Nbars);
      x=int(round(Xcentr-r*MathSin(A)));
      y=int(round(Ycentr+r*MathCos(A)));
      canvas.PixelSetAA(x,y,ColorToARGB(clrGreen,155));
      if(xprev>0 && yprev>0) canvas.Line(xprev,yprev,x,y,ColorToARGB(clrBlue,155));
      xprev=x; yprev=y;

     };

   canvas.Update();

  }
//+------------------------------------------------------------------+
 
barabashkakvn :
Kodu tam olarak kopyaladı. Çözümlenmemiş statik değişken 'CCanvas::m_default_colors' prob1.mq5 21 9 ile aynı hata
 
Virty :
Kodu tam olarak kopyaladı. Çözümlenmemiş statik değişken 'CCanvas::m_default_colors' prob1.mq5 21 9 ile aynı hata

Herhangi bir hatam yok. En son inşa et.

ProbeGrafik

 
Virty :
Kodu tam olarak kopyaladı. Çözümlenmemiş statik değişken 'CCanvas::m_default_colors' prob1.mq5 21 9 ile aynı hata
yani hata senin prob1.mq5 dosyanda.