Lütfen yayılma konusunda bana yol gösterin - sayfa 4

 
deysmacro :
Yine de hatırlamalısın. EA yalnızca devam eden işlemleri kapatır. Ticareti kendin açmalısın.

%100, sorun yok, tam olarak başarmaya çalıştığım şey bu .. EA'nın herhangi bir işlem açmasını istemiyorum, bu BENİM işim .. Sadece 2'den fazla sipariş X kârda açıksa kapatmasını istiyorum ve yayılmayı düşünmeli! Yavaş yavaş ona doğru yaklaşıyorum.. bu programlama işinin okullarda öğretilmesi gerekirdi.. hehe çok kötü 80'lerdenim, geçmek zorunda kalacağımı hiç düşünmemiştim ama daha çok yardım dosyasını okudum, daha çok buluyorum ve daha ilgi çekici .. ayrıca, bu forumda sizin gibi adamlar sayesinde bir sürü yardım var.
 
tatyawinchu :

ya bir IF döngüsü ekleyebilir ve ardından döngüyü başlatan kodun geri kalanını aşağıya yapıştırabilirsem?

EĞER koşulu, tüm açık siparişleri yayılmadan sonra X kârda kapatmak için kontrole geçilmesi için Sipariş Toplamını => 2 olarak kontrol etmelidir.



" IF koşulu, Sipariş Toplamını => 2 olarak kontrol etmelidir, böylece tüm açık siparişleri yayılmadan sonra X kârda kapatmak için kontrol geçilir"

ama denersen gerçekten kötü bir şey olmayacağına eminim. Ve işe yaramazsa, kaybedecek bir şey yok. En azından denedin.

 
tatyawinchu :

%100, sorun yok, tam olarak başarmaya çalıştığım şey bu .. EA'nın herhangi bir işlem açmasını istemiyorum, bu BENİM işim .. Sadece 2'den fazla sipariş X kârda açıksa kapatmasını istiyorum ve yayılmayı düşünmeli! Yavaş yavaş ona doğru yaklaşıyorum.. bu programlama işinin okullarda öğretilmesi gerekirdi.. hehe çok kötü 80'lerdenim, geçmek zorunda kalacağımı hiç düşünmemiştim ama daha çok yardım dosyasını okudum, daha çok buluyorum ve daha ilgi çekici .. ayrıca, bu forumda sizin gibi adamlar sayesinde bir sürü yardım var.

Toplam kâra yayılmayı dahil edin.
 
thrdel :


" IF koşulu, Sipariş Toplamını => 2 olarak kontrol etmelidir, böylece tüm açık siparişleri yayılmadan sonra X kârda kapatmak için kontrol geçilir"

ama denersen gerçekten kötü bir şey olmayacağına eminim. Ve işe yaramazsa, kaybedecek bir şey yok. En azından denedin.


" IF koşulu, Sipariş Toplamını => 2 olarak kontrol etmelidir, böylece tüm açık siparişleri yayılmadan sonra X kârda kapatmak için kontrol geçilir"

Hmm.. Tamam demek istediğim bu

EĞER .. toplam açık sipariş sayısı 2'ye eşit veya daha fazlaysa .. ancak o zaman devam edin ve kodun geri kalanını takip edin..

EĞER toplam açık sipariş sayısı .. [ OrdersTotal() ?? ] .. 2'den küçüktür .. bu, 1 veya 0 olduğu anlamına gelir, o zaman hiçbir şey yapmayın ..

Şimdi, burada benim için bir sorun var, mql 4 yardım dosyası OrdersTotal()'ın tüm emirleri, piyasayı VE bekleyen emirleri saydığını söylüyor. Zaten bir seferde en fazla 2 işlemim olduğu için matematiksel olarak hesaplanabilir.

Bu açıklama daha net mi?

Bana verdiğin süre için tx dostum.

 

thrdel önce denemenizi ve ne olacağını görmenizi istiyor, ancak ne olacağından oldukça eminim.

 
deysmacro :

thrdel önce denemenizi ve ne olduğunu görmenizi istiyor.



evet, sadece açık emirler veren uygun işlevi bulmak için yardım dosyasını gözden geçirin.
 
Tamamlamayı başardığınızda bize kodunuzu gösterin, elimizden geldiğince size yardımcı olacağız.
 
deysmacro :
Tamamlamayı başardığınızda bize kodunuzu gösterin, elimizden geldiğince size yardımcı olacağız.

Anlaşıldı ! cok tesekkurler..

..

ve sadece açık işlemleri döndüren bir fonksiyon bulamadım.. Sorun değil, bu yüzden IF döngüsünü aşağıdaki gibi ekledim..

 //+------------------------------------------------------------------+
//|                    CloseTrades_After_Account_Profit_Reached.mq4  |
//|                                     Copyright © 2007, Tradinator |
//|                                          tradinator.fx@gmail.com |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2007, Tradinator"
#property link        "tradinator.fx@gmail.com"


                                       
extern double My_Money_Profit_Target= 100 ;     //The amount of money profit at which you want to close ALL open trades.
extern string Profit_Target= "Enter above To Close all OPEN trades when amount of profit is Reached in Account and not per OPEN trade! " ;
                                          
int Slippage= 5 ;
int i;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()

//+------------------------------------------------------------------+
//| This is just the single line of code that I have added
//+------------------------------------------------------------------+
{ 
 if ( OrdersTotal ()>= 2 )

 {
   if ( AccountProfit ()>= My_Money_Profit_Target)
   {
     for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       {
       OrderSelect (i, SELECT_BY_POS );
       int type   = OrderType ();
               
       bool result = false ;
              
       switch (type)
          {
           //Close opened long positions
           case OP_BUY   : result = OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_BID ),Slippage,Pink);
                         break ;
               
           //Close opened short positions
           case OP_SELL : result = OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK ),Slippage,Pink);
                          
          }
          
       if (result == false )
          {
             Sleep ( 0 );
          }  
       }
       Print ( "Account Profit Reached. All Open Trades Have Been Closed" );
       return ( 0 );
   }  
   
   Comment ( "Balance: " , AccountBalance (), ", Account Equity: " , AccountEquity (), ", Account Profit: " , AccountProfit (),
           "\nMy Account Profit Target: " ,My_Money_Profit_Target);
   
   return ( 0 );
   }
 }

EĞER koşulunu başlangıçta ekledim, if ( OrdersTotal ()>= 2 ) .. [Yorumla birlikte yukarıdaki kodda vurgulanmıştır]

Şimdi, ilk denemede denediğim gibi {} kapatılırken bir sorun oluştu.

{ 
 if ( OrdersTotal ()>= 2 )
}

 {
   if ( AccountProfit ()>= My_Money_Profit_Target)
   {
     for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
       { .. etc etc 
     

bu yüzden temelde ilk kez kodlayıcı olarak, İLK kontrol edilecek koşul varsa .. derlemedi ..

Böylece {} içindeki koşulu alarak kapattım.. şimdi sadece 2 uyarı ve hata olmadan derlendi..

'OrderSelect' dönüş değeri kontrol edilmelidir Test kodu 1.mq4 56 8

tüm kontrol yolları bir değer döndürmez Test kodu 1.mq4 86 2

Yani derliyor .. mantıksal olarak doğru mu?

[Ayrıca, telif hakkı bilgisini kaldırmıyorum, sadece bir satır ekliyorum, ayrıntılarını kaldırmak benim açımdan tamamen haksızlık olur.. bununla ilgili kural nedir? ]

 
tatyawinchu :

evet, sadece açık emirler veren uygun işlevi bulmak için yardım dosyasını gözden geçirin.


Gerçekten üzgünüm dostum, daha önce de söylediğim gibi, açıklamakta pek iyi değilim. Sadece açık alım satım emirlerini sayacak bir fonksiyon bulmak istediğini anlıyorum, koduma bakmanı istedim, elimden geldiğince açıkladım ve atladığım kadar iyi değildi.

Bu kod hakkında bahsettiğim ilk adımı hatırlıyor musunuz?

Şuydu: CountMyOrders. Şimdi, sana sorduğum gibi koda bakarsan, bulacağın şey şu:

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CountMyOrders()
  {
   myOrders= 0 ;
   for ( int cnt= OrdersTotal ()- 1 ;cnt>= 0 ;cnt--)
     {
       if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES )== false )
         Print ( "Failed to select order, error : " +ErrorDescription(GetLastError()));
       //skip orders placed by other EA's
       if ( OrderMagicNumber ()> 0 ) continue ;
       if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
        {
         myOrders++;
        }
     }
   return (myOrders);
  }

Diyor ki :

 if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )

OP_BUY ve OP_SELL'in ne anlama geldiğini bilmelisiniz.

Bekleyen emir sayısı yok, açık alım durdurma yok, açık satış durdurma yok, alım limiti veya satış limiti yok, sadece açık alım ve satım açık.

Bu kod parçasını ve ne yaptığını daha iyi nasıl açıklayabilirim?

Belgeleri aramaya devam edebilir ve aşina olabilirsiniz, ancak size söyleyebilirim ki, aradığınız işlev orada değil.

EA'm henüz sipariş yoksa bekleyin diyor:

 if (myOrders< 1 )

2 sipariş için beklemenizi istiyorsunuz. Söylediklerime biraz dikkat etseydin, muhtemelen tek yapman gerekenin şu olduğunu fark ederdin:

 if (myOrders< 2 )

işte. Şimdi 2 emrin gerçekleşmesini bekliyor - bekleyen yok, sadece al veya sat !

Lütfen kodu, açık işlemleri yönetmenin bir yolunu arayan ve belirli bir amaç için tasarlanmış o kadar da özel olmayan bir yol arayan diğer kişilere uyacak şekilde bir araya getirmeye çalıştığımı anlayın.

Örnek olması amaçlanmıştır, iyi olduğunu düşündüğünüzü alın, gerisini bir kenara bırakın, geliştirin, değiştirin, yapabiliyorsanız ondan öğrenin ve onunla denemeler yapın.

Umarım mantıklıdır.

 
thrdel :


Gerçekten üzgünüm dostum, daha önce de söylediğim gibi, açıklamakta pek iyi değilim. Sadece açık alım satım emirlerini sayacak bir fonksiyon bulmak istediğinizi anlıyorum, koduma bakmanızı istedim, elimden geldiğince açıkladım ve atladığım kadar iyi değildi.

Bu kod hakkında bahsettiğim ilk adımı hatırlıyor musunuz?

Şuydu: CountMyOrders. Şimdi, sana sorduğum gibi koda bakarsan, bulacağın şey şu:

Diyor ki :

OP_BUY ve OP_SELL'in ne anlama geldiğini bilmelisiniz.

Bekleyen emir sayısı yok, açık alım durdurma yok, açık satış durdurma yok, alım limiti veya satış limiti yok, sadece açık alım ve satım açık.

Bu kod parçasını ve ne yaptığını daha iyi nasıl açıklayabilirim?

Belgeleri aramaya devam edebilir ve aşina olabilirsiniz, ancak size söyleyebilirim ki, aradığınız işlev orada değil.

EA'm henüz sipariş yoksa bekleyin diyor:

2 sipariş için beklemenizi istiyorsunuz. Söylediklerime biraz dikkat etseydin, muhtemelen tek yapman gerekenin şu olduğunu fark ederdin:

işte. Şimdi 2 emrin gerçekleşmesini bekliyor - bekleyen yok, sadece al veya sat !

Lütfen kodu, açık işlemleri yönetmenin bir yolunu arayan ve belirli bir amaç için tasarlanmış o kadar da özel olmayan bir yol arayan diğer kişilere uyacak şekilde bir araya getirmeye çalıştığımı anlayın.

Örnek olması amaçlanmıştır, iyi olduğunu düşündüğünüzü alın, gerisini bir kenara bırakın, geliştirin, değiştirin, yapabiliyorsanız ondan öğrenin ve onunla denemeler yapın.

Umarım mantıklıdır.

Çok teşekkürler.. Birincisi, sen değilsin! hepsi benim! hehe ben burada acemiyim .. açıklamaların mükemmel ! adım adım ilerlediğim için şu anda sindirmek biraz zor .. yardım dosyaları arasında kelime kelime =) ve takıldığım için yardım istiyorum .. Daha doğrusu, şimdi kodunuz nedeniyle yardım bölümünde FONKSİYON bölümünü okuyorum dosya ! ! Ayrıca, yukarıda yapıştırdığım kodu en sonunda derleyip bu EĞER koşulunun mantığında yanlış bir şey olup olmadığına bakar mısınız? Şimdi tüm emirleri saydığını atlayalım .. diyelim ki bu EA hiçbir emir açık değilken yürütülürse, ilk emir açılır ve bir süre sonra başka bir emir tetiklenir .. bu EĞER koşulunun mantık akışı doğru mu? Ayrıca, artık bu kodun yalnızca bir düzeltme satırına veya buna benzer bir şeye ihtiyacı olduğundan neredeyse eminim [ Ayrıca, bunu bir iş olarak gönderme fikrinden vazgeçtim.. ] , diğer EA'lar çünkü benim için bu çalışan tek EA olacak, bu yüzden her siparişe özel olarak sihirli numara atamak zorunda değilim vs... şimdi sadece IF'min mantığının doğru olup olmadığını öğrenmem gerekiyor ^^