Hatalar, hatalar, sorular - sayfa 1699

 
Karputov Vladimir :
Her yanlış programlama stilini hata olarak yazamazsınız.

Bu nasıl bir KATILIM?! Açık bir hatayı işaret ediyorum, ancak erişte hakkında "stil" hakkında konuşuyorum.

A100 ve Meat'in peşindeyim, aya yürümek gibi. Onları anlamasam da böcekleri gösteriyorlar. Ama "tarzım" ile tırmanmıyorum.

 
fxsaber :
Çalışmıyor.

İşte tam kod:

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots    1

double Buffer[];

int handle= INVALID_HANDLE ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   SetIndexBuffer ( 0 ,Buffer, INDICATOR_DATA );

   handle= ChartIndicatorGet ( 0 , 1 , ChartIndicatorName ( 0 , 1 , 0 ));
  }

#define TOSTRING(A) #A + " = " + ( string )A + "\n"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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[])
  {
//if(handle!=INVALID_HANDLE)
   if (prev_calculated!= 0 )
     {
      Buffer[rates_total- 1 ]= MathRand ();

       double BufferCopy[];
       Print ( __FUNCTION__ );
       if ( CopyBuffer (handle, 0 , 0 , 1 ,BufferCopy)> 0 )
         Print (TOSTRING(BufferCopy[ 0 ])+TOSTRING(Buffer[rates_total- 1 ]));
     }

   return (rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int Reason)
  {
   Print ( "#1 OnDeinit" );
   if (handle!= INVALID_HANDLE )
     {
       Print ( "#2 OnDeinit" );
       IndicatorRelease (handle);
       Print ( "#3 OnDeinit" );
     }
   Print ( "#4 OnDeinit" );
   return ;
  }
//+------------------------------------------------------------------+

ve çıktı:

 2016.09 . 23 12 : 34 : 03.318 2 (SBRF- 12.16 ,M1)       OnCalculate
2016.09 . 23 12 : 34 : 03.318 2 (SBRF- 12.16 ,M1)       BufferCopy[ 0 ] = 265.0
2016.09 . 23 12 : 34 : 03.319 2 (SBRF- 12.16 ,M1)       Buffer[rates_total- 1 ] = 18992.0
2016.09 . 23 12 : 34 : 03.319 2 (SBRF- 12.16 ,M1)       
2016.09 . 23 12 : 34 : 03.502 2 (SBRF- 12.16 ,M1)       OnCalculate
2016.09 . 23 12 : 34 : 03.502 2 (SBRF- 12.16 ,M1)       BufferCopy[ 0 ] = 265.0
2016.09 . 23 12 : 34 : 03.502 2 (SBRF- 12.16 ,M1)       Buffer[rates_total- 1 ] = 12498.0
2016.09 . 23 12 : 34 : 03.502 2 (SBRF- 12.16 ,M1)       
... экономия бумаги :)
2016.09 . 23 12 : 34 : 31.804 2 (SBRF- 12.16 ,M1)       
2016.09 . 23 12 : 34 : 33.159 2 (SBRF- 12.16 ,M1)       OnCalculate
2016.09 . 23 12 : 34 : 33.159 2 (SBRF- 12.16 ,M1)       BufferCopy[ 0 ] = 614.0
2016.09 . 23 12 : 34 : 33.159 2 (SBRF- 12.16 ,M1)       Buffer[rates_total- 1 ] = 5343.0
2016.09 . 23 12 : 34 : 33.159 2 (SBRF- 12.16 ,M1)       
2016.09 . 23 12 : 34 : 36.870 2 (SBRF- 12.16 ,M1)       OnCalculate
2016.09 . 23 12 : 34 : 36.870 2 (SBRF- 12.16 ,M1)       BufferCopy[ 0 ] = 614.0
2016.09 . 23 12 : 34 : 36.870 2 (SBRF- 12.16 ,M1)       Buffer[rates_total- 1 ] = 17815.0
2016.09 . 23 12 : 34 : 36.870 2 (SBRF- 12.16 ,M1)       
2016.09 . 23 12 : 34 : 38.445 2 (SBRF- 12.16 ,M1)       # 1 OnDeinit
2016.09 . 23 12 : 34 : 38.445 2 (SBRF- 12.16 ,M1)       # 2 OnDeinit
2016.09 . 23 12 : 34 : 38.445 2 (SBRF- 12.16 ,M1)       # 3 OnDeinit
2016.09 . 23 12 : 34 : 38.445 2 (SBRF- 12.16 ,M1)       # 4 OnDeinit
Dosyalar:
2.mq5  3 kb
 
Karputov Vladimir :

İşte tam kod:

ve çıktı:

Benim için çalışmıyor - OnDeinit'e bile ulaşmıyor.

Ve dikkat edin, benim günlüğümde sayılar aynı, ama sizinkinde değiller. günlüğüm

PP       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)     OnCalculate
FE       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    BufferCopy[ 0 ] = 13573.0
IQ       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    Buffer[rates_total- 1 ] = 13573.0
CF       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    
JO       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)     OnCalculate
QI       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    BufferCopy[ 0 ] = 25434.0
NM       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    Buffer[rates_total- 1 ] = 25434.0
MJ       0        12 : 41 : 08.169     Test3 (RTS- 12.16 ,H1)    
DJ       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)     OnCalculate
QO       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)    BufferCopy[ 0 ] = 9469.0
HK       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)    Buffer[rates_total- 1 ] = 9469.0
CM       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)    
JF       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)     OnCalculate
OS       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)    BufferCopy[ 0 ] = 1887.0
NG       0        12 : 41 : 08.187     Test3 (RTS- 12.16 ,H1)    Buffer[rates_total- 1 ] = 1887.0
Terminalimde çalışan tek bir gösterge ve danışmanım yok.
 
fxsaber :

Benim için çalışmıyor - OnDeinit'e bile ulaşmıyor.

Ve dikkat et, günlüğümde sayılar eşleşiyor, ama sen uymuyorsun. günlüğüm

Terminalimde çalışan tek bir gösterge ve danışmanım yok.

Bu yapılandırmaya sahibim:

 2016.09 . 23 12 : 25 : 34.874 Terminal        MetaTrader 5 x64 build 1430 started (MetaQuotes Software Corp.)
2016.09 . 23 12 : 25 : 34.876 Terminal        Windows 10 Pro (x64 based PC), IE 11.00 , UAC, Intel Core i3- 3120 M  @ 2.50 GHz, RAM: 2446 / 8077 Mb, HDD: 40118 / 233310 Mb, GMT+ 02 : 00
2016.09 . 23 12 : 25 : 34.876 Terminal        C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

(Terminali yeniden başlattıktan sonra, "Log" sekmesi, ilk üç satır)

 
Karputov Vladimir :

Bu yapılandırmaya sahibim:

(Terminali yeniden başlattıktan sonra, "Log" sekmesi, ilk üç satır)

 2016.09 . 23 12 : 42 : 22.405 Terminal        C:\Program Files\BCS Broker MetaTrader 5 Terminal
2016.09 . 23 12 : 42 : 22.405 Terminal        Windows 7 Ultimate (x64 based PC), IE 09.00 , Intel Core i7- 2700 K  @ 3.50 GHz, RAM: 8098 / 16301 Mb, HDD: 6387 / 30000 Mb, GMT+ 02 : 00
2016.09 . 23 12 : 42 : 22.405 Terminal        BCS Broker MetaTrader 5 Terminal x64 build 1430 started (BCS Broker)
 
fxsaber :

belirsiz. x32 makinesinde:

 2016.09 . 23 13 : 23 : 55.052 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
2016.09 . 23 13 : 23 : 55.052 Terminal        Windows 10 Home (X86 based PC), IE 11.00 , UAC, Intel Atom  Z3740 @ 1.33 GHz, RAM: 607 / 1931 Mb, HDD: 20500 / 49784 Mb, GMT+ 02 : 00
2016.09 . 23 13 : 23 : 55.049 Terminal        MetaTrader 5 build 1430 started (MetaQuotes Software Corp.)


çalışmıyor.

 
Andrey Barinov :
"Düşerler", ancak onları çağırmaya çalıştığınızda bir derleme hatası olacaktır.

Yani buna gerek yok, gelecekte hayatımı kolaylaştırmak için çok fazla iş yapmaya çalışıyorum.

Sorunumun üstesinden geldim, böylece ebeveynde her şey korunur ve miras, korumalı daha fazla geçersiz kılma altına girer.

 
Karputov Vladimir :

belirsiz. x32 makinesinde:


çalışmıyor.

Sık sık yapmaktan bıkmama rağmen başvuru formunu doldurdum.
 
fxsaber :

Göstergedeki grafikteki tutamacınızı nasıl bulabilirim? ChartIndicatorName aracılığıyla uygun değildir, çünkü kısa adı döndürür. Ve aynı adla, farklı giriş parametrelerine sahip aynı gösterge zaten çalışıyor olabilir.

Göstergenin kendisini grafikten ve hesaplamalardan çıkarabilmesi için buna ihtiyacım var.

Bu konuyu zaten ele almış olabilirsiniz, ancak her ihtimale karşı açıklığa kavuşturacağım. Gösterge tutamacı aslında sadece onu oluşturan program içindeki göstergenin açıklamasının bir adresidir (yani Uzman Danışman, gösterge, komut dosyası), bunun bir tür "sayı" olduğunu varsayabiliriz. Bundan, bu "sayı"nın, göstergeyi oluşturan (tutamacını alan) programın dışında bir anlamı olmadığı sonucu çıkar. Ve ChartIndicatorGet() işlevini çağıran program bile bazı genel gösterge tanıtıcıları almaz, yalnızca bu göstergenin bir tanımını oluşturur ve adresleme için bu açıklamanın "numarasını" tahsis eder. Terminalin tamamında benzersiz olan küresel bir gösterge tanıtıcısı yoktur.

Kısa adın kullanımı örneklerde görülebilir. Bu şekilde mümkündür:

   string short_name= "unknown ma" ;
   switch (InpMAMethod)
     {
       case MODE_EMA :  short_name= "EMA" ;   break ;
       case MODE_LWMA : short_name= "LWMA" ; break ;
       case MODE_SMA :  short_name= "SMA" ;   break ;
       case MODE_SMMA : short_name= "SMMA" ; break ;
     }
   IndicatorSetString ( INDICATOR_SHORTNAME ,short_name+ "(" + string (InpMAPeriod)+ ")" );

" Diğer giriş parametreleriyle aynı gösterge zaten çalışıyor " sorunu çözüldü.

Ve hangi göstergenin işe yaradığı görsel olarak daha net:


 
Anton :

Bu konuyu zaten ele almış olabilirsiniz, ancak her ihtimale karşı açıklığa kavuşturacağım. Gösterge tutamacı aslında sadece onu oluşturan program içindeki göstergenin açıklamasının bir adresidir (yani Uzman Danışman, gösterge, komut dosyası), bunun bir tür "sayı" olduğunu varsayabiliriz. Bundan, bu "sayı"nın, göstergeyi oluşturan (tutamacını alan) programın dışında bir anlamı olmadığı sonucu çıkar. Ve ChartIndicatorGet() işlevini çağıran program bile bazı genel gösterge tanıtıcıları almaz, yalnızca bu göstergenin bir tanımını oluşturur ve adresleme için bu açıklamanın "numarasını" tahsis eder. Terminalin tamamında benzersiz olan küresel bir gösterge tanıtıcısı yoktur.

Kısa adın kullanımı örneklerde görülebilir. Bu şekilde mümkündür:

" Diğer giriş parametreleriyle aynı gösterge zaten çalışıyor " sorunu çözüldü.

Ve hangi göstergenin işe yaradığı görsel olarak daha net:

Teşekkürler, stringo bunu bana bir süre önce açıkladı. Tanıtıcının "bana" ait olduğunu belirlemenin birkaç yolunu buldum:

  1. Gösterge arabelleğinin uç değerini değiştirir ve karşılık gelen CopyBuffer değeriyle karşılaştırırım. Eşleşirse, "Ben" dir. Bu fikir üzerine, kaldırılamaz bir gösterge elde edildi.
  2. ShortName'i değiştiriyorum ve ChartIndicatorName ile karşılaştırıyorum.