[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 53

 

Görünüşe göre bir şeyler açıklığa kavuştu... Durum şu: global değişken double Delete_Level bildirildi. if ifadesinin gövdesinde yeni bir değer atanır:

Delete_Level = MA3

Ve gövdeden ayrılırken, global düzeyde Delete_Level değeri değişmez. Soru: if ifadesinin gövdesinden çıkarken global Delete_Level değişkeninin değeri nasıl değiştirilir?

 
vovan-gogan :

Üzgünüm, ama herhangi bir şekilde daha kolay mı?) Hatanın ne olduğunu anlamama yardım et


Kesinlikle gerçek eşitliğin ASLA gerçekleşmeyecek olması gerçeği - bu, belirli bir süreç, işlem vb. için belirli hataların ve toleransların olduğu gerçek dünya, gerçek dünyadır. "Temel" öğrenin ... :-R Daha kolay - hiçbir yerde. Önerdiğiniz gibi yapın, yazın - durum işe yaradı mı? En ilginç. Sayesinde.


 
vovan-gogan :

Görünüşe göre bir şeyler açıklığa kavuştu... Durum şu: global değişken double Delete_Level bildirildi. if ifadesinin gövdesinde yeni bir değer atanır:

Ve gövdeden ayrılırken, global düzeyde Delete_Level değeri değişmez. Soru: if ifadesinin gövdesinden çıkarken global Delete_Level değişkeninin değeri nasıl değiştirilir?


Nasıl değişmiyor? Tabii ki öyle. Kodu baskılarla kaplayın ve F12 aracılığıyla "Günlük" sekmesine bakın - görselleştirme modunda adım adım bir test.
 
sergeev :

MQL anlayışınızda ve anlayışınızda bir tarih nedir?
Sipariş vermeden önce kontrol etmek istiyorum. Diyelim ki seans 10-30'da başlıyor, ardından 10-35'te bir satın alma emri açmak için tüm koşullar karşılanıyor, ancak mevcut zaman 10-45'e eşit veya daha büyük olana kadar yerleştirilmemelidir.
 
Roman. :

Nasıl değişmiyor? Tabii ki öyle.


Bunun gibi. Örneğin Expert Advisor'da önce global değişkeni int Orders ilan ediyorum ve daha sonra bekleyen emir verilmesi durumunda int Orders değerinin aşağıdaki gibi değişmesi gerekiyor:

 int Orders;
if (MA2_2<MA1_2 && MA2_1>MA1_1)//пересечение МА
{
   if ( OrdersTotal ()>= 1 )
   {
   return ;
   }
         SL = 30;
         TP = 12;
         S_Price = Low[ 1 ] - 1 * Point ;
         if ( OrderSend ( Symbol (), OP_SELLSTOP, Lots, S_Price, 0 , SL, TP, "My order" , Magic)> 0 )
            {
               Orders++;
               Alert ( "Ордер выставлен. Orders =" ,Orders );
            }
}           

Ama Emirlerde herhangi bir değişiklik yok. Ve her seferinde "Sipariş verildi. Siparişler =1" mesajı görüntüleniyor.

 
vovan-gogan :


Bunun gibi. Örneğin Expert Advisor'da ilk önce global değişken olan int siparişlerini beyan ediyorum ve daha sonra bekleyen bir emir verilmesi durumunda int emirlerinin değerinin aşağıdaki gibi değişmesi gerekiyor:

Ama siparişlerde bir değişiklik yok. Ve her seferinde "Sipariş verildi. Siparişler =1" mesajı görüntüleniyor.


Orada global değil , yerel bir f-ii başlangıcına ihtiyacınız var. O zaman dene

 int start()                             // Спец. функция start
  {
     int Orders= 0 ;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)   //пересечение МА
        {
           if ( OrdersTotal ()>= 1 ) return ( 0 );   
          SL = 30 ;
          TP = 12 ;
          S_Price = Low[ 1 ] - 1 * Point ;
           if ( OrderSend ( Symbol (), OP_SELLSTOP, Lots, S_Price, 0 , SL, TP, "My order" , Magic)> 0 )
            {
               Orders++;
               Alert ( "Ордер выставлен.Orders = " ,Orders );
            }
        }   
       Alert ( "Ордеров нет. Orders = " ,Orders );    
//----------------------------------------------------------------  
   return ;                             // Выход из start()
  }
 
Roman. :


Orada global değil, yerel bir f-ii başlangıcına ihtiyacınız var. O zaman dene


Benim örneğimde de aynı değil mi? Fark ne? Başlatma işlevini eklemediğim sürece.
 
vovan-gogan :

Benim örneğimde de aynı değil mi? Fark ne? Başlatma işlevini eklemediğim sürece.

Benim versiyonumu dene.
 
Roman. :

Benim versiyonumu dene.

Ama denemek için bir fark görmüyorum. Lütfen bana neyi yanlış yaptığımı söyle.
 
M30 periyoduna sahip bir grafiği (gerçek zamanlı) açtığımda ve int shift=iBarShift(NULL , PERIOD_M5 ,some_time); parametresiyle bir gösterge uyguladığımda bana nedenini söyleyin. vardiya olması gerektiği gibi olacak ama aynı göstergeyi M30 periyodu ile test cihazından çalıştırdığımda vardiya hesaplanmıyor mu?
Neden: