Döngü Operatörü 'için' soruları - sayfa 11

 
WhooDoo22 :


Sanırım amacımı kaçırıyorsun. . . biraz parantez eklersem belki daha net olur. . . bunu yaptın . . .

Bunu yapmak istediğime inanıyorum...

Çünkü bu şartı diledim...

kodun parantez içindeki bölümüne (" { } ") uygulanacak.

Öyleyse neden kodunuzun en son sürümünde bu değişikliği yapmadınız? . . . yapmak istediysen neden yapmadın?

 
WhooDoo22 :

Simon,


Resminizdeki 0 muhtemelen . . .


Hayır! ;)

Dokümantasyon şeridinde bir yolculuğa çıkalım mı? Hahaha.

tarihsaat OrderCloseTime ( )
Halihazırda seçili olan sipariş için kapanış zamanını döndürür. Emir kapanış saati 0 değilse emir seçilmiş ve kapatılmış ve hesap geçmişinden alınmıştır. Açık ve bekleyen emirlerin kapanma süresi 0'a eşittir.

Not: Sıra, OrderSelect() işlevi tarafından önceden seçilmelidir.


İlk olarak, ikimiz de son zamanlarda kodladığım OrderClose() fonksiyon kod bloğuna bir göz atalım...

Ardından, 'Uzmanlar' bölmesinin bir anlık görüntüsünde gösterilen sonuca bir göz atalım...

Aaah, elimizde ne var? :)

Burada hangi noktaya değinmeye çalıştığınızdan emin değilim, lütfen açıklayabilir misiniz? Print(OrderCloseTime()) açıkça yanlıştır ama yine de kodunuzda var, neden? Önerdiğim 2 satırlık kodu eklediğinizde ne oldu?
 

Simon,

Öyleyse neden kodunuzun en son sürümünde bu değişikliği yapmadınız? . . . yapmak istediysen neden yapmadın?

Bana bir saniye ver. bir göz atmak için lütfen.

Bunu daha önce kodlamak istedim ama şimdi bunu kodlamak istemiyorum. Bunu kodlamak için hiçbir sebep yok ...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
       {
       if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
       if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
       if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
         Print (OrderCloseTime());
         GetLastError ();
         }
       }

Bunun yerine bunu kodlayabildiğimde ...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
       Print (OrderCloseTime());
     }

Tüm 'if' koşulları, parantezlerin ("{}") içindekiler için geçerlidir. Bu kod bloğuna parantez eklemek (kodlamak istediğim şekilde) verimsizdir ve hiçbir amaca hizmet etmez.


Teşekkür ederim.

 

Simon,


Burada hangi noktaya değinmeye çalıştığınızdan emin değilim, lütfen açıklayabilir misiniz?

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
       Print (OrderCloseTime());
     }

// replace above code block with...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
//      Print(OrderCloseTime());
     }

EA'ya bir demo hesabındaki terminalde (Print() işlevi olmadan) çok hızlı bir şekilde bir dönüş yapın, ardından 'Uzmanlar' bölmesini tıklayın ve 'Uzmanlar'daki sonuçların geri kalanında sıfır (0) olmadığını görselleştirin ' bölmesi.

0 olmadığına dikkat edin. Hmm, değil mi? ;)

Şimdi EA'ya bir şans verin (Print() işlevi dahil).

'Uzmanlar' bölmesinde 0 olduğuna dikkat edin.


Daha önce 'Uzmanlar' bölmesi sonuçlarında neden sıfır olduğu konusunda eğitimli bir tahminde bulundunuz ve haklıydınız (mesajın başındaki "Yok-uh-uh! ;)".

Resminizdeki 0 muhtemelen . . .

 Print (OrderCloseTime());

Unutma? Elbette yaparsın. :)


Print(OrderCloseTime()) açıkça yanlıştır ama yine de kodunuzda var, neden?

Lütfen neden yanlış olduğuna inandığınızı açıklayın.

Size bir noktayı göstermek için kodumda var. Mesele şu ki: Bu kod parçasının kodda olması nedeniyle 'Uzmanlar' bölmesinde sıfır çıkıyor.


Önerdiğim 2 satırlık kodu eklediğinizde ne oldu?

Şu anda bunun üzerinde verimli bir şekilde çalışıyorum. :)


Teşekkür ederim

 
WhooDoo22 :

Print(OrderCloseTime()) açıkça yanlıştır ama yine de kodunuzda var, neden?

Lütfen neden yanlış olduğuna inandığınızı açıklayın.

Size bir noktayı göstermek için kodumda var. Mesele şu ki: Bu kod parçasının kodda olması nedeniyle 'Uzmanlar' bölmesinde sıfır çıkıyor.


Gönderdiğiniz son resim USDJPY Emrinin 01:45:35'te kapatıldığını gösteriyor. . . siparişi kapatan satırı takip eden sonraki kod satırı Print(OrderCloseTime()); ve 0 değeriyle sonuçlanır. . . 0 tarihi olarak 1 Ocak 1970 Gece yarısıdır, bu, Siparişi kapattığınız zaman değildir, OrderCloseTime() öğesinden 0 dönüş değerini doğru bir şekilde belirttiğiniz gibi, Sipariş açıkken veya bekleyen bir Sipariş olduğunda da olabilir. Siparişiniz kapandı, biliyorsunuz kapandı, son görseliniz bunu kanıtladı. . . peki 0 değeri nasıl doğru olabilir? cevap doğru olamaz, yani bu yanlış olduğu anlamına gelir.

 

Simon,

Şu anda bunun üzerinde çalışıyorum...

   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))       
   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}           
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
       int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );
      
       OrderSelect (ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

       Print (OrderCloseTime());
       GetLastError ();
     }

Teşekkür ederim.

 
WhooDoo22 :

Simon,

Öyleyse neden kodunuzun en son sürümünde bu değişikliği yapmadınız? . . . yapmak istediysen neden yapmadın?

Bana bir saniye ver. bir göz atmak için lütfen.

Bunu daha önce kodlamak istedim ama şimdi bunu kodlamak istemiyorum. Bunu kodlamak için hiçbir sebep yok ...

Bunun yerine bunu kodlayabildiğimde ...

Tüm 'if' koşulları, parantezlerin ("{}") içindekiler için geçerlidir. Bu kod bloğuna parantez eklemek (kodlamak istediğim şekilde) verimsizdir ve hiçbir amaca hizmet etmez.

Tamam, bu koda bakıyorum. . . .

 if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))                                   // 1.
if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}                   // 2.
if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}                   // 3.
if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );                   // 5.
       Print (OrderCloseTime());                                                     // 6.
     }

Tartışmayı kolaylaştırmak için satırları numaralandırdım.

1. satıra bakıldığında, OrderStopLoss() ve OrderTakeProfit() her ikisi de 0 ise, diğer numaralı kod satırlarından hangisi yürütülür?

 

Simon,

Sabit, bu yüzden amaçlandığı gibi çalışıyor.

 if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}                   // 2.
if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}                   // 3.
if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))                                   // 1.
if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );                   // 5.
       Print (OrderCloseTime());                                                     // 6.
     }

2. ve 3. satırlar.

Teşekkür ederim.

 

Simon,

   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {
       int ClosedTicketNum=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );

       OrderSelect (ClosedTicketNum,SELECT_BY_TICKET);
      
       Print (OrderCloseTime());
     }

Sonuç:

&#39;Uzmanlar&#39; bölmesi sonucu.

Sipariş kapatma zamanı neden böyle bir biçimde temsil ediliyor (1357306061)?

Print() işlevinin çalışmasının nedeni, OrderSelect() işlevinin (köşeli ayraçlar içinde) açık bir sipariş DEĞİL, kapalı düzeni seçmesi gerektiği midir? Bu parantez içinde yapılmalı değil mi? ;) Zor, zor.

Teşekkür ederim.

 

Simon,

İşte geliyor... BAM!

   if (OrderType()==OP_BUY){bid_ask=MarketInfo( "USDJPY" ,MODE_BID);}
   if (OrderType()==OP_SELL){bid_ask=MarketInfo( "USDJPY" ,MODE_ASK);}
   if ((OrderStopLoss()!= 0 )&&(OrderTakeProfit()!= 0 ))
   if (( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )&&(OrderSymbol()== "USDJPY" ))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask, 3 , CLR_NONE );

       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== true )
      
       Print (OrderCloseTime());
     }

Daha iyi! hahaha ;)

Teşekkür ederim.

Dosyalar:
Neden: