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

 
Hey!!! Numaralandırma veri türünü sınıf yöntemlerine nasıl geçireceğimi söyleyebilir misiniz? Diyelim ki bir zaman dilimi aktarmak istiyorum. Danışman başlığında bir numaralandırma oluşturuyorum
   enum frame1 // перечисление именованных констант
     {
       PERIOD_M1 ,
       PERIOD_M5 ,
       PERIOD_M15 ,
       PERIOD_M30 ,
       PERIOD_H1 ,
       PERIOD_H4 ,
       PERIOD_D1 ,
       PERIOD_W1 ,
       PERIOD_MN1
     };


Ardından, yöntemi sınıfta ilan ediyorum.
 public :
                     Signal_Line();
                    ~Signal_Line();
   double                Time_Frame( double &Trend_Line_Down[][], int Frame, int Down);

   int                Short_Proboy( double &Trend_Line_Down[][], string Name_Static, int Down, ENUM_TIMEFRAMES );
Ve Expert Advisor'dan metodu çağırırken, numaralandırma - çerçeve - PERIOD_M30'dan üçüncü değeri geçmem gerekirse, aşağıdaki kod sorularına ne girmeliyim?
         Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, ???);     // Флаг пробоя трендовой нулевой свечой
 
Bir düşünürsen, oraya yazmak için yalvarıyor gibi görünüyor.
 Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, frame1 3);     // Флаг пробоя трендовой нулевой свечой

ancak derlerken bir hata yazıyor. Amaç ne?

 
Kira27 :
Hey!!! Numaralandırma veri türünü sınıf yöntemlerine nasıl geçireceğimi söyleyebilir misiniz? Diyelim ki bir zaman dilimi aktarmak istiyorum. Danışman başlığında bir numaralandırma oluşturuyorum
Ardından, yöntemi sınıfta ilan ediyorum.
Ve Expert Advisor'dan metodu çağırırken, numaralandırma - çerçeve - PERIOD_M30'dan üçüncü değeri geçmem gerekirse, aşağıdaki kod sorularına ne girmeliyim?

Soru 1: Standart bir ENUM_TIMEFRAMES varsa NEDEN kendi numaralandırmanızı oluşturun

 

Kene fiyatı hakkında soru.

Bu maliyet hangi sözleşme büyüklüğü (lot büyüklüğü) için dikkate alınır?

Örneğin, EURUSD döviz çifti için bu komut dosyası aynı olan değerleri verir, ancak metaller için fark 10 kattır. Nerede, neden, nasıl öğrenilir?

 int OnStart ()
  {
//---
     // цена тика для символа
     double symb_tick_price = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_VALUE );
     // рассчитаная цена символа (для Forex, CFD - формула из справки)
     // Profit  = (close_price - open_price) * Contract_Size * Lots
     // т.е. берем размер тика и считаем по этой формуле
     // -> TickPrice  = TickSize * Contract_Size * Lots
     double symb_lot_size = 1.0 ;
     double symb_tick_size = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_TICK_SIZE );
     double symb_contract_size = SymbolInfoDouble ( _Symbol , SYMBOL_TRADE_CONTRACT_SIZE );
     double calc_symb_tick_price = symb_tick_size * symb_contract_size * symb_lot_size;
     PrintFormat ( "Цена тика SYMBOL_TRADE_TICK_VALUE=%f, Цена тика ВЫЧИСЛЕННАЯ=%f" , symb_tick_price, calc_symb_tick_price);
//---
   return ( INIT_SUCCEEDED );
  }


NG       0        13 : 31 : 42.450     testTickPrice (EURUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 1.000000 , Цена тика ВЫЧИСЛЕННАЯ= 1.000000
OE       0        13 : 31 : 56.924     testTickPrice (XAGUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 0.500000 , Цена тика ВЫЧИСЛЕННАЯ= 5.000000
CE       0        13 : 40 : 00.848     testTickPrice (XAUUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE = 0.100000 , Цена тика ВЫЧИСЛЕННАЯ= 1.000000
 
Kira27 :
Bir düşünürsen, oraya yazmak için yalvarıyor gibi görünüyor.

ancak derlerken bir hata yazıyor. Amaç ne?

Böyle bir numaralandırma yaparsanız

 enum frame1 // перечисление именованных констант
 {
  m1  = PERIOD_M1 ,
  m5  = PERIOD_M5 ,
  m15 = PERIOD_M15 ,
  m30 = PERIOD_M30 ,
  h1  = PERIOD_H1 ,
  h4  = PERIOD_H4 ,
  d1  = PERIOD_D1 ,
  W1  = PERIOD_W1 ,
  MN1 = PERIOD_MN1
 };

o zaman şöyle yazmayı deneyebilirsin

 Trend_Line_Down[Timer_Down][ 1 ]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, ( ENUM_TIMEFRAMES )m30);     // Флаг пробоя трендовой нулевой свечой
 
Alexey Viktorov :

Böyle bir numaralandırma yaparsanız

o zaman şöyle yazmayı deneyebilirsin

... ve sonra bir ay içinde ne anlama geldiğini anlamaya çalışacaksınız)))

böyle bir kod yazarsanız, en azından onu int'ye getirin

 enum frame1 // перечисление именованных констант
 {
  m1  = ( int ) PERIOD_M1 ,
  m5  = ( int ) PERIOD_M5 ,
  m15 = ( int ) PERIOD_M15 ,
  m30 = ( int ) PERIOD_M30 ,
  h1  = ( int ) PERIOD_H1 ,
  h4  = ( int ) PERIOD_H4 ,
  d1  = ( int ) PERIOD_D1 ,
  W1  = ( int ) PERIOD_W1 ,
  MN1 = ( int ) PERIOD_MN1
 };

böylece en azından yazarın çıktıda ne elde edeceğini anlayabilirsiniz.

... sapıklık hala öyle olsa da))))

 
Igor Makanu :

... ve sonra bir ay içinde ne anlama geldiğini anlamaya çalışacaksınız)))

böyle bir kod yazarsanız, en azından onu int'ye getirin

böylece en azından yazarın çıktıda ne elde edeceğini anlayabilirsiniz.

... sapıklık hala öyle olsa da))))

Neden int'ye çevirelim? Gerçekten de, mql5'te, H1'den başlayarak , numaralandırmanın değeri dakika sayısına eşit değildir. Ve bence, tam tersine, sürekli yanlış anlamalara yol açacaktır.

 
Alexey Viktorov :

Neden int'ye çevirelim? Gerçekten de, mql5'te, H1'den başlayarak , numaralandırmanın değeri dakika sayısına eşit değildir. Ve bence, tam tersine, sürekli yanlış anlamalara yol açacaktır.

çünkü numaralandırma 4 baytlık sabitler olarak adlandırılır = int

dakika sayısı değil

 
Vladimir Karputov :

Soru 1: Standart bir ENUM_TIMEFRAMES varsa NEDEN kendi numaralandırmanızı oluşturun

Cevap)) 30. grafikte bir grafik nesne çizdikten sonra, nesne adı bu nesnenin nerede oluşturulduğunu gösteren M30 alt dizesini içeriyor ve nesne verilerini double diziye yazarken, adı alt dizelere bölerek, 0 indeksini karşılaştırıyorum. diziyle yinelenerek, bozuk ada sahip dizinin

//____________________string Массив таймфреймов______________________________
   NameFrame_Trend_Line[1]="M1";
   NameFrame_Trend_Line[2]="M5";
   NameFrame_Trend_Line[3]="M15";
   NameFrame_Trend_Line[4]="M30";
   NameFrame_Trend_Line[5]="H1";
   NameFrame_Trend_Line[6]="H4";
   NameFrame_Trend_Line[7]="Daily";
   NameFrame_Trend_Line[8]="Weekly";
   NameFrame_Trend_Line[9]="Monthly"; 

Bir dizideki eşit bir dizenin dizinini bulma

NameFrame_Trend_Line

dizini int dizisiyle ilişkilendir

 //___________________int Массив таймфреймов__________________________________________
   TimeFrame[ 1 ]= 1 ;
   TimeFrame[ 2 ]= 5 ;
   TimeFrame[ 3 ]= 15 ;
   TimeFrame[ 4 ]= 30 ;
   TimeFrame[ 5 ]= 60 ;
   TimeFrame[ 6 ]= 240 ;
   TimeFrame[ 7 ]= 1440 ;
   TimeFrame[ 8 ]= 10080 ;
   TimeFrame[ 9 ]= 43200 ;

Elde edilen değeri, grafiğin özelliklerini saklayan bir çift diziye yazarım. nesneler. Ayrıca, hattın kopmasını, sabitlenmesini ve test edilmesini izlemek için, satırlar farklı zaman dilimlerinde oluşturulduğu için zaman dilimi parametresini kaydedilen çift diziden geçirmeniz gereken yöntemi kullanıyorum, koparmanın hesaplanması, konsolidasyon , test, bu nesnelerin oluşturulduğu zamana göre, dışarıda o anda grafikte hangi periyotta olduğuna bağlı olarak hesaplanmalıdır. Dizi değerini ilişkilendirmek için planlandı

TimeFrame

dizi özellikleri grafiğinde yazılmıştır. nesneler, diziden dizine göre çekin

   enum frame1 // перечисление именованных констант
     {
       PERIOD_M1 ,
       PERIOD_M5 ,
       PERIOD_M15 ,
       PERIOD_M30 ,
       PERIOD_H1 ,
       PERIOD_H4 ,
       PERIOD_D1 ,
       PERIOD_W1 ,
       PERIOD_MN1
     };
ve arızayı hesaplama, sabitleme ve test etme yöntemine iletin.
 
Igor Makanu :

çünkü numaralandırma 4 baytlık sabitler olarak adlandırılır = int

dakika sayısı değil

Ne olmuş? ENUM_TIMEFRAMES numaralandırmasında başka bir şey var mı? Yoksa hafıza eksikliği korkusu mu var? Ben böyle uğraşamam...


not; Oh, ne kadar yavaş yazıyorum…)))) Bir satır yazarken Kira27 ne kadar yazdı……… Ve şüphelendiğim bir şey, mql4'te kullanılacak.