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

 
anton.veksler :

Symbol() MT4 ile ilgili sorun:

Gösterilecek 2 fonksiyon:

İlkini yürütmek boş bir dize verir:

Ve işte ikinci işlev dizisi tanımlayıcısı "EURUSD" (peki, grafiğe bağlıdır, ancak çıktı, işlevin mantığına göre boş bir dize olması gerekse de):

Neyin yanlış olduğunu anlamama yardım et? teşekkürler


Değişkenlerinizi bildirirken ayrılmış adları (değer) kullanamazsınız, _value öğesini çağırın
 
hoz :


İşte yaptığım şey:

Durma ve alma yoktur. Hata 130, ayakların doğru olmadığını söyleyerek günlükte yazılır. Nedenini göremiyorum.

Ve yapmayacaklar!

   double sl = 0 , tp = 0 ;                                           // тут присвоили по нулям
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )           // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 ) // замените на if(sl == 0)                   // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - SL*pt, Digits );   // Если по нулям, тогда выполнится условие!
 

Vitaly , dediğin gibi yaptım ama hiçbir şey değişmedi. Görünüşe göre söve başka bir yere gömülmüş.

Ondan önce, her şey benim için çalıştı (açılış emirleri - önceden belirlenmiş bir fiyat seviyesine ulaştıktan sonra kullanılan değişiklik ve dönüştürme) ve her şey çalıştı. Şöyleydi:

 bool Trade ( int signal)
{
  FindOrders();
  
   double sl = 0 , tp = 0 ;

   if (signal == SIGNAL_BUY)                                                           // Если сигнал на покупку и открытых ордеров нет...
     if (!OpenBuy())                                                           // открываем лимитный ордер на покупку
       return ( false );
        
   if (signal == SIGNAL_SELL)                               // Если сигнал на продажу и открытых ордеров нет..
     if (!OpenSell())                                                           // Открываем лимитный ордер на продажу
       return ( false );
  
   int total = OrdersTotal () - 1 ;
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )                             // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - i_sl*pt, Digits );                     // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() + i_tp*pt, Digits );                     // Получаем значение тейкпрофита для выбранного ордера
      }
       if (g_type == OP_SELL)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }
       if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
    }
  }

   return ( true );
}

Şimdi, her şeyi belirli özel işlevlere ayırdığımda, her şey mükemmel şekilde işlemeyi bıraktı. Ve ben zaten deniyorum, hiçbir şey çıkmıyor. duraklar yerleştirilmemiştir.

 
borilunad :

Ve yapmayacaklar!

 double sl = 0 , tp = 0 ;                                           // тут присвоили по нулям
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )           // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 ) // замените на if(sl == 0)                   // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - SL*pt, Digits );   // Если по нулям, тогда выполнится условие!

Peki, mantık nerede? Çok anlamak istiyorum.. Bir işlevi var:

 void OrdersModifying()
{
   int total = OrdersTotal () - 1 ;
   double sl = 0 , tp = 0 ;
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )                             // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - i_sl*pt, Digits );                     // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() + i_tp*pt, Digits );                     // Получаем значение тейкпрофита для выбранного ордера
      }
       if (g_type == OP_SELL)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }
       if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
    }
  }
}

Sıra, eğer giriş olanlar ise, yani. dur ve al dış değişkenleri ve bunlar i_sl ve i_tp sıfıra eşit değil, o zaman zaten sırada olacak olan dur ve al fiyatlarını alıyoruz ve bunlar sl ve tp . Ondan sonra burada sl ve tp hesaplayıp hesaplamadığımızı kontrol edeceğim (kısaca ise):

 if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }

Değerler elde edilirse, sıfıra eşit olamazlar .. çünkü değişecekler! Bunlar, kod bağlamında sırayla elde ettiğimiz değişkenlerdir.

Ve burada dur kalk değerlerini bulup bulmadığımızı kontrol ettim. Tüm koşullardan sonra nasıl sıfır olabilirler?

 if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
 

İlk önce mantığınızı başlangıçta oluşturun, ardından işlevler, dosyalar vb.

Neden sol elinizle sağ kulağınızın arkasını kaşıyasınız?!

 

Benim işlevim parametrelerin bildirilmesiyle başlar, bkz. Kim!

 void ModifyOrder( int ticket, double pp, double sl, double tp, datetime e, color arrow_cl) 
 
borilunad :

Benim işlevim parametrelerin bildirilmesiyle başlar, bkz. Kim!


Bu benim için?
 
hoz :

Peki, mantık nerede? Çok anlamak istiyorum.. Bir işlevi var:

Sıra, eğer giriş olanlar ise, yani. dur ve al dış değişkenleri ve bunlar i_sl ve i_tp sıfıra eşit değil, o zaman zaten sırada olacak olan dur ve al fiyatlarını alıyoruz ve bunlar sl ve tp . Ondan sonra burada sl ve tp hesaplayıp hesaplamadığımızı kontrol edeceğim (kısaca ise):

Değerler elde edilirse, sıfıra eşit olamazlar .. çünkü değişecekler! Bunlar, kod bağlamında sırayla elde ettiğimiz değişkenlerdir.

Ve burada dur kalk değerlerini bulup bulmadığımızı kontrol ettim. Tüm koşullardan sonra nasıl sıfır olabilirler?


Kahretsin, az önce fark ettim, if (g_type == OP_BUY) değil, if ( OrderType( ) = = OP_BUY   || OrderType( ) == OP_BUY DUR ||   OrderType( ) = = OP_BUY LIMIT ) hangi siparişleri açtığınızı hatırlamıyor
 
hoz :

Bu benim için?
Ama kime?
 
rigonich :

Kahretsin, az önce fark ettim, if (g_type == OP_BUY) değil, if ( OrderType( ) = = OP_BUY   || OrderType( ) == OP_BUY DUR ||   OrderType( ) = = OP_BUY LIMIT ) hangi siparişleri açtığınızı hatırlamıyor
Benim için bu fonksiyon 4 emir tipini ve 2 pozisyon tipini değiştirir, artık mevcut değil!