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

 
vovan-gogan :

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


Ve bu şekilde daha da iyi.

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 ;
           int ticket = OrderSend ( Symbol (), OP_SELLSTOP, Lots, S_Price, 0 , SL, TP, "My order" , Magic);     
           if (ticket> 0 )               // Если ордер установлен
             while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)   Sleep ( 100 ); // Если ордер выбран         
          Orders++;
           Alert ( "Ордер выставлен.Orders = " ,Orders );
             
        }   
       Alert ( "Ордеров нет. Orders = " ,Orders );    
//----------------------------------------------------------------  
   return ;                             // Выход из start()
  }


                 
         
      
 
vovan-gogan :

Ama denemek için bir fark görmüyorum. Lütfen bana neyi yanlış yaptığımı söyle.

Deneyip sonucu yazarsın. Sipariş verirken gerekli kontroller yapılmadığı için durumunuza göre sipariş verilemeyebilir. Ek olarak, bir nedenden dolayı kurulmadığında bir hata işleyici eklemek zarar vermez, kayma> 0 yapın - bu hemen görünen ilk şeydir.
 
Bekleyen bir siparişte kaymayı mı kastediyorsunuz?
 
vovan-gogan :
Bekleyen bir siparişte kaymayı mı kastediyorsunuz?


text'u ile hata bulmayın - koyun ve bu kadar ... Kontrol edin.

En azından test cihazında her şey böyle çalışmalı - eğer küçük bir mesafe nedeniyle sipariş vermezseniz, bir dahaki sefere kurulacak - sorunuz şimdi başka bir sorudaydı - o zaman diğer her şeyi bitireceksiniz - kontrol edin olduğu gibi, test cihazında.

 
Roman. :


text'u ile hata bulmayın - koyun ve bu kadar ... Kontrol edin.

En azından test cihazında her şey böyle çalışmalı - eğer küçük bir mesafe nedeniyle sipariş vermezseniz, bir dahaki sefere kurulacak - sorunuz şimdi başka bir sorudaydı - o zaman diğer her şeyi bitireceksiniz - kontrol edin olduğu gibi, test cihazında.


Yardım etme isteğiniz için teşekkür ederim, ancak bu özel durumda, ilk etapta hatamı anlamama yardım etmenizi istiyorum. Sürekli olarak başkaları tarafından derlenen çözümleri kullanır ve hatalarımı fark etmezsem, bir programcı olarak büyümem pek olası değildir. Umarım buna katılıyorsunuzdur
 
vovan-gogan :

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


Yerel ve global değişkenler kavramını yeniden okuyun. Ayrıca bu tasarım sayesinde

 if ( OrdersTotal ()>= 1 ) return ( 0 );  

Aynı işlem hesabında manuel olarak veya başka bir uzman tarafından pozisyonlar açılırsa, bekleyen bir emir vermek için işlem koşulu tetiklendiğinde bu uzman artık bekleyen bir emir vermez, ancak bu seçenek bir strateji test cihazı için uygundur.

Genel durumda, algoritmanızın mantığına bağlı olarak bu uzman tarafından açılan veya belirlenen siparişler üzerinde bir döngü düzenlemek gerekir - TS, bekleyen bir emir yoksa, ayarlayın ve sipariş sayacını artırın, bilgileri yazdırın.

 
vovan-gogan :

Yardım etme isteğiniz için teşekkür ederim, ancak bu özel durumda, ilk etapta hatamı anlamama yardım etmenizi istiyorum. Sürekli olarak başkaları tarafından derlenen çözümleri kullanır ve hatalarımı fark etmezsem, bir programcı olarak büyümem pek olası değildir. Umarım buna katılıyorsunuzdur


Kabul ediyorum. İstemci terminalinin yerel ve global değişkenleri kavramını yeniden okuyun.



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 ;
           int ticket = OrderSend ( Symbol (), OP_SELLSTOP, Lots, S_Price, 0 , SL, TP, "My order" , Magic);     
           if (ticket> 0 )               // Если ордер установлен
             while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)   Sleep ( 100 ); // Если ордер выбран         
          Orders++;
           Alert ( "Ордер выставлен.Orders = " ,Orders );
             
        }   
         
//----------------------------------------------------------------  
   return ;                             // Выход из start()
  }
 
vovan-gogan :

Yardım etme isteğiniz için teşekkür ederim, ancak bu özel durumda, ilk etapta hatamı anlamama yardım etmenizi istiyorum.


Şimdiden bir soru sorun... :-P

Önceki mesajımdaki seçeneği deneyin.

Ders kitabına ve belgelere ek olarak burada okuyun - Henüz hiçbir yerde daha ayrıntılı çiğnenmiş kıyma görmedim.

 
Küresel ve yerel değişkenler hakkındaki tavsiyeler için teşekkürler) Hemen okumaya başlayacağım)
 
Alexandr24 :
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?

Böyle bir sorunun nasıl çözüleceğini bilen var mı?