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

 

DiPach , yardımın için tekrar teşekkürler. Örneklerinizi inceledik. Başlangıç kodunuzda değişiklikler yapıldı. Bu ortaya çıktı:

 void OnStart ()
  {
int awd1[];
ArrayResize (awd1, 6 , 7 );
   for ( int i= 0 ;i<= 5 ;i++)
   {
   awd1[i]=i+ 10 ;
   Print ( "awd1[" , i, "]=" , awd1[i]);
   }
   Alert ( "awd1[0]=" , awd1[ 0 ], ", awd1[1]=" , awd1[ 1 ], ", awd1[2]=" , awd1[ 2 ], 
   ", awd1[3]=" , awd1[ 3 ], ", awd1[4]=" , awd1[ 4 ], ", awd1[5]=" , awd1[ 5 ]);
  }

Ne değişti:

1. Dizinin bildirimi ile satırı hareket ettirin int awd1[]; OnStart() işlevinin içinde

2. ArrayResize (awd1,6,7) işlevi eklendi ;

3. Senaryo kazandı.

Sonuç çıkarmaya çalışacağım. Komut dosyalarında, OnStart() işlevi içinde dizileri bildirmek doğrudur. Bir dizi bildirildikten sonra, ArrayResize() işlevi tarafından belirlenmelidir, aksi takdirde derleyici yemin eder. Çıkarımlarım doğru mu? Değilse, lütfen bana doğru yorumu söyleyin.

 
silachara :

DiPach , yardımın için tekrar teşekkürler. Örneklerinizi inceledik. Başlangıç kodunuzda değişiklikler yapıldı. Bu ortaya çıktı:

Ne değişti:

1. Dizinin bildirimi ile satırı hareket ettirin int awd1[]; OnStart() işlevinin içinde

2. ArrayResize(awd1,6,7) fonksiyonu eklendi;

3. Senaryo kazandı.

Sonuç çıkarmaya çalışacağım. Komut dosyalarında, OnStart() işlevi içinde dizileri bildirmek doğrudur. Bir dizi bildirildikten sonra, ArrayResize() işlevi tarafından belirlenmelidir, aksi takdirde derleyici yemin eder. Çıkarımlarım doğru mu? Değilse, lütfen bana doğru yorumu söyleyin.

Genel olarak, evet. Ve en azından sessizce ama özellikle yemin edecek. :)

Şu noktalara açıklık getirelim:

1. Sıradan değişkenleri ve dizileri bildirirken, bu betiğin (veya danışmanın/göstergenin) ne yapacağından ve bu değişkenlerin/dizilerin neye yönelik olduğundan yola çıkmanız gerektiğini düşünüyorum.

Eklediğiniz betiğin şeması, inanıyorum ki, değişkenlerin programın genel düzeyinde değil, yerel olarak bildirilmesine izin veriyor. Yani, bir dizinin bildirimi bir kerelik gerçekleşir. Ve bahsettiğimiz kodda Start () gövdesinde, örneğin for () döngüsünün başlangıcından önceki bölümde ve örneğin, ihtiyacınız varsa, gereksiz tekrarlanan (döngülenmiş) bildirimler yoktur. for() {}'dan çıktıktan sonraki bölümde bazı değişkenleri daha fazla bildirin:


Buna göre, dizinin bir kerelik programın global değişkenleri düzeyinde değil, OnStart() gövdesinde, ancak for() döngü operatöründen önce bildirilmesi, böyle bir şemada oldukça kabul edilebilir. program.

Benim bakış açıma göre, global program değişkenleri düzeyinde bir şey beyan etmeye gerek yoksa, bu fırsatı kullanmak ve yerel olarak neyin mümkün olduğunu beyan etmek daha iyidir.

2. Koda göre şunları açıklayacağım:

 void OnStart ()
  {
   int awd1[];
   ArrayResize (awd1, 6 , 7 );
   for ( int i= 0 ;i< 6 ;i++)
     {
      awd1[i]=i+ 10 ;
       Print ( "awd1[" ,i, "]=" ,awd1[i]);
     }
   string text= StringConcatenate ( "awd1[0]=" ,awd1[ 0 ], ", awd1[1]=" ,awd1[ 1 ], ", awd1[2]=" ,awd1[ 2 ],
                                 ", awd1[3]=" ,awd1[ 3 ], ", awd1[4]=" ,awd1[ 4 ], ", awd1[5]=" ,awd1[ 5 ]);
   Alert (text);
  }

Demek istediğim:

  • için <= (eşittir) oturumunu kullanmayın. Yani neredeydi (i=0 ; i<=5 ;i++). Sadece < (küçüktür) işaretini ve 5 yerine 6 rakamını koyun:
 for ( int i= 0 ;i< 6 ;i++)

Bu durumda, 5 aşağıdakiler için uygun olacaktır:

 for ( int i= 5 ;i>= 0 ;i--)
  • Daha önce, Stringconcatenate işlevinin uzun metnin daha hızlı işlenmesini teşvik ettiği bir bilgiyle tanıştığımı hatırlıyorum. Bu yüzden genellikle kendim kullanırım. Her ihtimale karşı buraya da ekledim.


P./S.: Her ihtimale karşı bir açıklama daha, ArrayResize() kullanımı dinamik diziler içindir. Bu işlevin belgelerinde, bu işlevle dinamik dizileri yeniden boyutlandırmanın mümkün olmadığı bir bilgi vardır .

 
Best_ATS :
Neden arkadaş ekleyemiyorum?
Ve iş yerinde, onu kişisel olarak tanımayan bir arkadaşı nasıl hayal edersiniz?
 

Tünaydın! İlk önce yeni fiyatın gösterilmesini ve önceki fiyatın düşmesini ve bu şekilde devam etmesini nasıl sağlayabilirim? Açıklığa kavuşturmak için bir örnek yaptım.

 double NN= 0 ;
double NN1= 0 ;
double NN2= 0 ;
double NN3= 0 ;
void OnTick ()
  {
//---
if (Ask>NN)NN=Ask;
if (NN>NN1)NN1=NN;
if (NN1>NN2)NN2=NN1;
if (NN2>NN3)NN3=NN2;
         Comment ( ""        
             + "1.   " + "Buy: " " Max: " + DoubleToStr(NN, 5 )
             + "\n"   
             + "2.   " + "Buy: " " Max: " + DoubleToStr(NN1, 5 )
             + "\n"   
             + "3.   " + "Buy: " " Max: " + DoubleToStr(NN2, 5 )
             + "\n"   
             + "4.   " + "Buy: " " Max: " + DoubleToStr(NN3, 5 )
             + "\n"
             + "------------------------------------------------" );
           
  }
 
abeiks :

Tünaydın! İlk önce yeni fiyatın gösterilmesini ve önceki fiyatın düşmesini ve bu şekilde devam etmesini nasıl sağlayabilirim? Açıklığa kavuşturmak için bir örnek yaptım.

Ben bir örnek yaptım, az çok şartlarla anlayacaksınız:

 double bda_Price[ 4 ];
void OnTick ()
{
       int li_int;
//---
     if (Ask > bda_Price[ 0 ])
    {
        ArrayInitialize (bda_Price, 0.);
        bda_Price[ 0 ] = Ask;
         double lda_Price[ 3 ];
         ArrayCopy (lda_Price, bda_Price, 0 , 1 );
        for ( int li_int = 1 ; li_int < 4 ; li_int++)
        {bda_Price[li_int] = lda_Price[li_int- 1 ];}
    }
     string ls_txt;
     StringInit (ls_txt, 100 );
     for (li_int = 0 ; li_int < 4 ; li_int++)
    {ls_txt = StringConcatenate (ls_txt, ( string ) li_int, ".   Buy:  Max: ", DoubleToStr (bda_Price[li_int], Digits ), "\n" );
    ls_txt = StringConcatenate (ls_txt, "------------------------------------------------" );
     Comment (ls_txt);
//---
}
 
TarasBY :

Ben bir örnek yaptım, az çok şartlarla anlayacaksınız:


Teşekkür ederim!
 
abeiks :

Tünaydın! İlk önce yeni fiyatın gösterilmesini ve önceki fiyatın düşmesini ve bu şekilde devam etmesini nasıl sağlayabilirim? Açıklığa kavuşturmak için bir örnek yaptım.

İşte tamamen ilkel bir kod.

 double Price1, Price2, Price3, Price4;

void OnTick ()
  {
Price4=Price3;
Price3=Price2;
Price2=Price1;
Price1=Ask;
Comment (Price1, "\n" , Price2, "\n" , Price3, "\n" , Price4);
  }
 
silachara :

İşte tamamen ilkel bir kod.




Teşekkür ederim!
 

Merhaba. Temel bir komut dosyası kullanarak strateji test cihazında bir ticaret emri açmaya çalıştım ama işe yaramadı.

int başlangıç()

{

//----

iç;

double ask=Kapat[0]+MarketInfo(_Symbol,MODE_SPREAD)*Nokta;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,"",0,0,Mavi);

if(res>-1)Alert("Siparişin biletle açılması ",res);

//----

dönüş(0);

}

Komut dosyasını görselleştirme modunda test cihazı çizelgesine atıyorum, ancak ticaret emri MT4 terminalinde açılıyor.

Ayrıca strateji test cihazında SimpleFXTester_v2.ex4 kullanılarak açık siparişler hakkında bilgi alamaz.

Anlamaya yardımcı olmak için büyük istek.

 
kosmos0975 :

Merhaba. Temel bir komut dosyası kullanarak strateji test cihazında bir ticaret emri açmaya çalıştım ama işe yaramadı.

int başlangıç()

{

//----

iç;

double ask=Kapat[0]+MarketInfo(_Symbol,MODE_SPREAD)*Nokta;

res=OrderSend(Symbol(),OP_BUY,0.1,ask,3,0,0,"",0,0,Mavi);

if(res>-1)Alert("Siparişin biletle açılması ",res);

//----

dönüş(0);

}

Komut dosyasını görselleştirme modunda test cihazı çizelgesine atıyorum, ancak ticaret emri MT4 terminalinde açılıyor.

Ayrıca strateji test cihazında SimpleFXTester_v2.ex4 kullanılarak açık siparişler hakkında bilgi alamaz.

Anlamaya yardımcı olmak için büyük istek.

Test cihazındaki komut dosyaları çalışmıyor.