Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 349

 
Pyro :

Başlatma, Global Değişkenler dışındaki her şeyi sıfırlar
Ve bilgisayarı kapatırsanız veya sunucu hangi danışmana kilitlenir?
 
artmedia70 :
Ve burada GV'nin bir danışman değil, terminal değişkenler olduğunu açıklığa kavuşturmak gerekiyor.

Okumaya ve çalışmaya başladım. Artık global değişkenlerin ve Global Değişkenlerin farklı şeyler olduğunu biliyorum.

Bu arada, size çok sık sorulan hata 129 pahasına. Gerçek şu ki, beş basamaklı bir DC'm var,

ve danışman uyku 2, büyük olasılıkla danışman bu yüzden fiyata ayak uyduramadı. Şimdi 15 puan koyacağım.

 
artmedia70 :
Ve burada GV'nin bir danışman değil, terminal değişkenler olduğunu açıklığa kavuşturmak gerekiyor.


Demek istediğim, danışman sadece başlatma sırasında (dahil) değerleri kaydetmek için onlarla çalışabilir.
 
Forexman77 :
Ve bilgisayarı kapatırsanız veya sunucu hangi danışmana kilitlenir?


Burası ilginç. Global Değişkenler bazı durumlarda önbelleğe alınır ve bir dosyaya yazılır. Belli bir süre sonra veya sıfırlama sırasında gibi görünüyor. Gerçek çalışma sırasında, bilgisayarın keskin bir şekilde yeniden başlatılması sırasında gvariables.dat'ın (Global Değişkenler değerlerini depolayan dosya) kaybolduğu durumlar vardı. Çalışırken bu dikkate alınmalıdır. Ya da diske önbellekten kaydolmak için zamanları yoktu. Yani, zaten diskte olduklarının ve önbellekte olmadıklarının garantisi yoktur. Yanlışsam düzelt.


Forexman77 :

Okumaya ve çalışmaya başladım. Artık global değişkenlerin ve Global Değişkenlerin farklı şeyler olduğunu biliyorum.

Bu arada, size çok sık sorulan hata 129 pahasına. Gerçek şu ki, beş basamaklı bir DC'm var,

ve danışman uyku 2, büyük olasılıkla danışman bu yüzden fiyata ayak uyduramadı. Şimdi 15 puan koyacağım.


Neredeyse bu yüzden. Beş basamaklı bir değerim var. Her şey normal şekilde açılıyor. Hatırladığım kadarıyla, komisyoncular bir pip'in hala her yerde kabul edilen bir temel pip (sıfırdan sonraki 4. basamak) ve pip kesrinin bir kesir olduğu konusunda anlaştılar. Böylece daha sonra 6.7 ve 8 haneli sayılar girildiğinde, her seferinde "nokta" kavramının anlamı değişmez.
 
Pyro :

Burası ilginç. Global Değişkenler önbellekte saklanır ve bazı durumlarda bir dosyaya yazılır. Belli bir süre sonra olduğu gibi. Gerçek çalışma sırasında, bilgisayarın keskin bir şekilde yeniden başlatılması sırasında gvariables.dat'ın (Global Değişkenler değerlerini depolayan dosya) kaybolduğu durumlar vardı. Çalışırken bu dikkate alınmalıdır. Ya da diske önbellekten kaydolmak için zamanları yoktu. Yani, zaten diskte olduklarının ve önbellekte olmadıklarının garantisi yoktur. Yanlışsam düzelt.
Belki kaydetmeyi deneyebilir, ardından bilgisayarı kapatabilirsiniz. Ve açtığınızda, müsaitlik durumu için Alert to call'u deneyin. Yalan söylemeyecek olsam da şimdilik sadece statik değişkenler ve bayraklar kullanıyorum ve Global Değişkenler hakkında kesin bir şey söyleyemem.
 
Forexman77 :
Belki kaydetmeyi deneyebilir, ardından bilgisayarı kapatabilirsiniz. Ve açtığınızda, müsaitlik durumu için Alert to call'u deneyin. Yalan söylemeyecek olsam da şimdilik sadece statik değişkenler ve bayraklar kullanıyorum ve Global Değişkenler hakkında kesin bir şey söyleyemem.


-> Tools -> Global Variables menüsüne bakmanız yeterli. Orada bir liste var. Peki veya GlobalVariableCheck. Yine de her şeyi fiziksel bir dosyaya kaydetmenin daha iyi olduğunu deneyimlerimden öğrendim.
 
Merhaba!
Lütfen mantığımdaki hataları bulun.

İkinci gün, bir gösterge oluşturmaya, yani ana pencereye iliştirilmiş ek bir pencerede bir satır görüntülemeye uğraşırken sona eriyor. Bence sayılamayan çubuklar üzerinde hesaplamalar yapmak ve hesaplama sonuçlarının değerlerini tampona vermek gerekiyor. Bu sefer örnek olarak daha karmaşık kodlar kullanıyorum (nispeten büyük kodlarla çalışmaktan zevk alıyorum). İşte "yaratıcılığın temizlenmesi":

 //+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum - 10
#property indicator_maximum 10
#property indicator_buffers 1
#property indicator_color1 Blue
extern double N = 1 ;
//+--------------------------------------------+
//Deklaration                                  |
//+--------------------------------------------+
double A; double C;       
double M; double D;
double L; double I;
double B; double F;
double K; double Buf_0[];
double G; 
//+--------------------------------------------+
int init(){
SetIndexBuffer ( 0 ,Buf_0);
SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 );
return ; }
//+--------------------------------------------+
int start() {
//Level 1
A = iRSI ( Symbol (), 0 , 10 , 0 , 0 );
M = iRSI ( Symbol (), 0 , 20 , 0 , 0 );
L = iRSI ( Symbol (), 0 , 15 , 0 , 0 );
B = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 0 , 0 );
K = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 1 , 0 );
C = iADX ( Symbol (), 0 , 10 , 0 , 0 , 0 );
D = iADX ( Symbol (), 0 , 10 , 0 , 1 , 0 );
I = iADX ( Symbol (), 0 , 10 , 0 , 2 , 0 );
F = iRVI ( Symbol (), 0 , 10 , 0 , 0 );
   //Level 2
  Buf_0[ 0 ] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   return ; } 
//+-------------------------------------------+ 

.

"Bu temizlemede" tamponun değerinin "0" olduğu açıkça görülmektedir, yani. bu gösterge, ticaret platformunun başlatıldığı andan itibaren yalnızca bir çizgi çizecektir. Ve geçerli verilere ek olarak geçmiş verilere de ihtiyacım var.

Bu kodda açıklanan bilgileri kullandım (MQ4 eğitiminden alınmıştır):

 //--------------------------------------------------------------------
// separatewindow.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
#property indicator_separate_window // Отображение в отдельном окне
#property indicator_buffers 1        // Количество буферов
#property indicator_color1 Blue     // Цвет первой линии
#property indicator_color2 Red       // Цвет второй линии
 
extern int History  = 50 ;             // Колич.баров в расчётной истории
extern int Aver_Bars= 5 ;             // Количество баров для расчёта
 
double Buf_0[];                     // Объявление индикаторного массива
//--------------------------------------------------------------------
int init()                           // Специальная функция init()
  {
   SetIndexBuffer ( 0 ,Buf_0);         // Назначение массива буферу
   SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 ); // Стиль линии
   return ;                           // Выход из спец. ф-ии init()
  }
//--------------------------------------------------------------------
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                     // Количество просчитанных баров 
   double
   Sum_H,                           // Сумма значений High за период
   Sum_L;                           // Сумма значений Low  за период
//--------------------------------------------------------------------
   Counted_bars= IndicatorCounted (); // Количество просчитанных баров 
   i= Bars -Counted_bars- 1 ;           // Индекс первого непосчитанного
   if (i>History- 1 )                 // Если много баров то ..
      i=History- 1 ;                   // ..рассчитывать заданное колич.
   while (i>= 0 )                       // Цикл по непосчитанным барам
     {
      Sum_H= 0 ;                       // Обнуление в начале цикла
      Sum_L= 0 ;                       // Обнуление в начале цикла
       for (n=i;n<=i+Aver_Bars- 1 ;n++) // Цикл суммирования значений 
        {
         Sum_H=Sum_H + High [n];     // Накопление суммы макс.значений
         Sum_L=Sum_L + Low [n];       // Накопление суммы мин. значений
        }
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars; // Знач. 0 буфера на i-ом баре
      i--;                           // Расчёт индекса следующего бара
     }
//--------------------------------------------------------------------
   return ;                           // Выход из спец. ф-ии start()
  }
//--------------------------------------------------------------------
İhtiyacım olanı seçip alacağım...
 extern int History  = 50 ;             // Колич.баров в расчётной истории
extern int Aver_Bars= 5 ;             // Количество баров для расчёта
double Buf_0[];                     // Объявление индикаторного массива
int start()                         // Специальная функция start()
  {
   int i,                           // Индекс бара
   n,                               // Формальный параметр
   Counted_bars;                     // Количество просчитанных баров 
   Counted_bars= IndicatorCounted (); // Количество просчитанных баров 
   i= Bars -Counted_bars- 1 ;           // Индекс первого непосчитанного
   if (i>History- 1 )                 // Если много баров то ..
      i=History- 1 ;                   // ..рассчитывать заданное колич.
      Buf_0[i]=(Sum_H-Sum_L)/Aver_Bars; // Знач. 0 буфера на i-ом баре
      i--;  

Ardından, yorumları kaldırarak ve mantıksal olarak bölerek "ön görünüme" getiriyorum:

 //|+--------------------------------------+
//|Inputs                                 |
//|+--------------------------------------+
extern int History  = 50 ;
//|+--------------------------------------+
//|Declaration                            |
//|+--------------------------------------+
double Buf_0[];
int i;
int n;
int Counted_bars;
//|+--------------------------------------+
//| Start?                                |
//| Yes, babe!                            |
//|+--------------------------------------+
int start(){
//+-----------+
//Level 1 
//+-----------+
Counted_bars= IndicatorCounted ();
i= Bars -Counted_bars- 1 ;
   //+-----------+
   //Level 2
   //+-----------+
   if (i>History- 1 ) i=History- 1 ;
     //+------------+
     //Level 3 
     //+------------+
    Buf_0[i]= 
    i--;  
//+---------------------------------------+

Böylece "ana" kodla sentezlenmesi gereken nesnelerle baş başa kaldım. Birleştirmeden sonra aşağıdaki kodu alıyorum:

 //+--------------------------------------------+
#property indicator_separate_window
#property indicator_minimum - 10
#property indicator_maximum 10
#property indicator_buffers 1
#property indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1 ;
extern int History  = 50 ;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer ( 0 ,Buf_0);
SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 );
return ; }
//|+--------------------------------------------+
int start() {
       //|+-----------+
       //|Level 1     |
       //|+-----------+
       A = iRSI ( Symbol (), 0 , 10 , 0 , 0 );
       M = iRSI ( Symbol (), 0 , 20 , 0 , 0 );
       L = iRSI ( Symbol (), 0 , 15 , 0 , 0 );
B = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 0 , 0 );
K = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 1 , 0 );
       C = iADX ( Symbol (), 0 , 10 , 0 , 0 , 0 );
       D = iADX ( Symbol (), 0 , 10 , 0 , 1 , 0 );
       I = iADX ( Symbol (), 0 , 10 , 0 , 2 , 0 );
       F = iRVI ( Symbol (), 0 , 10 , 0 , 0 );
   Counted_bars= IndicatorCounted ();
              i= Bars -Counted_bars- 1 ;
         //+-----------+
         //Level 2     |
         //+-----------+
         if (i>History- 1 ) i=History- 1 ;
         Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
         return ; } 
//+-------------------------------------------+
Programlama sırasında "ana" kodu dekoratif olarak değiştirdim ve "alt" koddan bazı değerleri kaldırdım. Kodu çalıştırdıktan sonra, özel göstergede kullanılan teknik göstergeler, işlevi çizen değerleri uzun bir süre boyunca veremediğinden, muhakeme sırasında bir hata olduğunu gösteren yatay bir çizgi fark ettim. "y = x".

Referans.
Benim adım John (Eugene, ama Amerikan tarzında).

15 yaşındayım, 5 gündür ticaret yapıyorum ve döviz ticareti, yani gösterge analizi ve grafik analiz (kısaca, yani :)) alanlarında büyük bir ilerleme hissediyorum.
"Manuel ticaretin" giderek daha az umut verici hale geldiğini hissediyorum, bu yüzden hemen "otomatik ticarete" geçmeye karar verdim.

TÜM YETERSİZ KARARLARA "TAKİPTE KALIN"! Daha fazlasını bilmek istiyorum ve yorumlarınız bana yardımcı olacak.

 
Link_x :
Merhaba!
Lütfen mantığımdaki hataları bulun.

İkinci gün, bir gösterge oluşturmaya, yani ana pencereye iliştirilmiş ek bir pencerede bir satır görüntülemeye uğraşırken sona eriyor. Bence sayılamayan çubuklar üzerinde hesaplamalar yapmak ve hesaplama sonuçlarının değerlerini tampona vermek gerekiyor. Bu sefer örnek olarak daha karmaşık kodlar kullanıyorum (nispeten büyük kodlarla çalışmaktan zevk alıyorum). İşte "yaratıcılığın temizlenmesi":

.

"Bu temizlemede" tamponun değerinin "0" olduğu açıkça görülmektedir, yani. bu gösterge, ticaret platformunun başlatıldığı andan itibaren yalnızca bir çizgi çizecektir. Ve geçerli verilere ek olarak geçmiş verilere de ihtiyacım var.

Bu kodda açıklanan bilgileri kullandım (MQ4 eğitiminden alınmıştır):

İhtiyacım olanı seçip alacağım...

Ardından, yorumları kaldırarak ve mantıksal olarak bölerek "ön görünüme" getiriyorum:

Bu yüzden "ana" kodla sentezlenmesi gereken nesnelerle kaldım. Birleştirmeden sonra aşağıdaki kodu alıyorum:

Programlama sırasında "ana" kodu dekoratif olarak değiştirdim ve "alt" koddan bazı değerleri kaldırdım. Kodu çalıştırdıktan sonra, özel göstergede kullanılan teknik göstergeler uzun bir süre boyunca grafiği oluşturan değerleri veremediğinden, muhakeme sırasında bir hata olduğunu gösteren yatay bir çizgi fark ettim. "y = x" fonksiyonunun

Referans.
Benim adım John (Eugene, ama Amerikan tarzında).

15 yaşındayım, 5 gündür ticaret yapıyorum ve döviz ticareti, yani gösterge analizi ve grafik analiz (kısaca, yani :)) alanlarında büyük bir ilerleme hissediyorum.
"Manuel ticaretin" giderek daha az umut verici hale geldiğini hissediyorum, bu yüzden hemen "otomatik ticarete" geçmeye karar verdim.

TÜM YETERSİZ KARARLARA "TAKİPTE KALIN"! Daha fazlasını bilmek istiyorum ve yorumlarınız bana yardımcı olacak.

İyi başladı.

Geçmiş değişkenine dikkat edin, yerine başka bir değer koymayı deneyin.

//                Джон(Евгений).mq4 

//+--------------------------------------------+
#property indicator_separate_window
//#property indicator_minimum -10
//#property indicator_maximum 10
#property indicator_buffers 1
#property indicator_color1 Blue
//|+--------------------------------------------+
//|Inputs                                       |
//|+--------------------------------------------+
extern double N = 1 ;
extern int History  = 50 ;
//|+--------------------------------------------+
//|Deklaration                                  |
//|+--------------------------------------------+
double A; double C;       int i;
double M; double D;
double L; double I;       int Counted_bars;
double B; double F;
double K; double Buf_0[];
double G; 
//|+--------------------------------------------+
int init(){
SetIndexBuffer ( 0 ,Buf_0);
SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 );
return ; }
//|+--------------------------------------------+
int start()
{
       //|+-----------+
       //|Level 1     |
       //|+-----------+
 for ( i= 0 ; i<History; i++)
    {    
       A = iRSI ( Symbol (), 0 , 10 , 0 ,i);
       M = iRSI ( Symbol (), 0 , 20 , 0 ,i);
       L = iRSI ( Symbol (), 0 , 15 , 0 , 0 );
       B = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 0 ,i);
       K = iStochastic ( Symbol (), 0 , 10 , 6 , 6 , 0 , 0 , 1 ,i);
       C = iADX ( Symbol (), 0 , 10 , 0 , 0 ,i);
       D = iADX ( Symbol (), 0 , 10 , 0 , 1 ,i);
       I = iADX ( Symbol (), 0 , 10 , 0 , 2 ,i);
       F = iRVI ( Symbol (), 0 , 10 , 0 ,i);
    Buf_0[i] = N *(((B + F) / K) - ((D + I) / C) + ((A + M) / L));
   }
 return ;
} 
//+-------------------------------------------+
 
Link_x :
Merhaba!
Lütfen mantığımdaki hataları bulun.

İkinci gün, bir gösterge oluşturmaya, yani ana pencereye iliştirilmiş ek bir pencerede bir satır görüntülemeye uğraşırken sona eriyor. Bence sayılamayan çubuklar üzerinde hesaplamalar yapmak ve hesaplama sonuçlarının değerlerini tampona vermek gerekiyor. Bu sefer örnek olarak daha karmaşık kodlar kullanıyorum (nispeten büyük kodlarla çalışmaktan zevk alıyorum). İşte "yaratıcılığın temizlenmesi":

.

"Bu temizlemede" tamponun değerinin "0" olduğu açıkça görülmektedir, yani. bu gösterge, ticaret platformunun başlatıldığı andan itibaren yalnızca bir çizgi çizecektir. Ve geçerli verilere ek olarak geçmiş verilere de ihtiyacım var.

Bu kodda açıklanan bilgileri kullandım (MQ4 eğitiminden alınmıştır):

İhtiyacım olanı seçip alacağım...

Ardından, yorumları kaldırarak ve mantıksal olarak bölerek "ön görünüme" getiriyorum:

Böylece "ana" kodla sentezlenmesi gereken nesnelerle baş başa kaldım. Birleştirmeden sonra aşağıdaki kodu alıyorum:

Programlama sırasında "ana" kodu dekoratif olarak değiştirdim ve "alt" koddan bazı değerleri kaldırdım. Kodu çalıştırdıktan sonra, özel göstergede kullanılan teknik göstergeler, işlevi çizen değerleri uzun bir süre boyunca veremediğinden, muhakeme sırasında bir hata olduğunu gösteren yatay bir çizgi fark ettim. "y = x".

Referans.
Benim adım John (Eugene, ama Amerikan tarzında).

15 yaşındayım, 5 gündür ticaret yapıyorum ve döviz ticareti, yani gösterge analizi ve grafik analiz (kısaca, yani :)) alanlarında büyük bir ilerleme hissediyorum.
"Manuel ticaretin" giderek daha az umut verici hale geldiğini hissediyorum, bu yüzden hemen "otomatik ticarete" geçmeye karar verdim.

TÜM YETERSİZ KARARLARA "TAKİPTE KALIN"! Daha fazlasını bilmek istiyorum ve yorumlarınız bana yardımcı olacak.


Sonunda neden ihtiyacınız olduğu konusunda döngüler yönünde (for, wile, while do) kazmaya başlayın)))


Geçmiş verilerde değerlere ihtiyacınız varsa - bu verileri bir döngüde yinelemeden hiçbir yolu yoktur;)

Yukarıda, gösterge tarafından işlenecek olan geçmiş çubuklarının sayısını belirleyen Tarih ile bir örnek verdik ve dansın geldiği yer burası.

 


Resimde çıkışın olması gereken yeri ok ile işaretledim. Sorunun ne olduğunu anlamıyorum. Girin, zamanı hatırlayın

daha sonra bir dönemlik bir vardiya ile zaman girişten daha fazla olduğunda ve fiyat 3 günlük MA min'in altında olduğunda çıkıyoruz.

Kod aşağıdaki gibidir:

signal =   MA_6_t - iClose ( Symbol (), Period (), 0 );
MA_2_t= iMA ( NULL , 0 , 3 , 0 , MODE_EMA , PRICE_LOW , 0 ); 
static datetime t;

if   (signal > 0.006 ) 
          {                                          
          Opn_S= true ; 
          t= Time [ 0 ];                      
          }
if   ( Bid <= MA_2_t)
      {
       if ( Time [ 1 ]>t)
          {                                      
          Cls_S= true ;         
          }
      }
Sen ne önerirsin?
Neden: