[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 484

 

İşlem işlevine yanlış parametreler, örneğin geçersiz bir sembol, tanınmayan bir işlem , olumsuz bir fiyat toleransı, mevcut olmayan bir bilet numarası vb. iletildi. Programın mantığını değiştirmek gerekiyor.


İkinci parametreyi sıfır yerine OrderOpenPrice() olarak ayarlamayı deneyin

 
sergeev :

bir hata oluştuğunda kendisiyle ilgili olabilecek tüm parametreleri yazdırma alışkanlığı edinin.

if (!OrderModify(...)) { Print(GetlastError()+.... parametre listesi OrderModify ); }



Evet, bu iyi bir alışkanlık. Teşekkürler.)))

Döviz 07/03/2011 18:35

İkinci parametreyi sıfır yerine OrderOpenPrice() olarak ayarlamayı deneyin

Evet kesinlikle. )) Ve bazı nedenlerden dolayı, değiştirilmesi gereksiz olan parametreleri ayarlamanın imkansız olduğundan emindim, çünkü bu başka bir hataya yol açacaktır. Bahsettiğim şeye benzer bir şey var mı?

Kafamda şöyle bir şey var:

İşlev, parametreyi aynı değere değiştirmeye çalışır.

 
tol64 :


Ve nedense, değiştirilmesi gereksiz olan parametreleri ayarlamanın imkansız olduğundan emindim, çünkü bu başka bir hataya yol açacaktı. Bahsettiğim şeye benzer bir şey var mı?

Kafamda şöyle bir şey var:

İşlev, parametreyi aynı değere değiştirmeye çalışır.


Yalnızca bir parametreyi değiştirebilir ve gerisini değiştirmeden bırakabilirsiniz ve her yerde OrderOpenPrice (), OrdsrStopLoss () vb. yazın.
 
Merhaba! Belirli bir fiyat seviyesinden belirli bir adımla takip etme örneği olan var mı? Teşekkür ederim!
 

İşte başka bir sorum var. Yukarıda bahsettiğim kod örneğinde (tol64 07/03/2011 18:20).

Program her zaman farklı pozisyonların stop kayıplarını senkronize etmez. Yani pozisyon seçilir, koşul karşılanır, ayrıca loga kaydedilir, ancak stop loss değiştirilmez.

Yukarıdaki şekilde, bilet 4'lü pozisyon için stop loss'un değiştirilmiş olması ve bilet 1'li pozisyonla aynı değeri alması gerekirdi. Program bu yere bir baskı ile ulaşır, ancak daha sonra yürütme engellenmiş gibi görünür.

   for (count = 0 ; count < OrdersTotal (); count++)
      {  
         if ( OrderSelect (count,SELECT_BY_POS,MODE_TRADES)) 
            Print ( "Ticket: " ,OrderTicket(), ", Type: " ,OrderType(), ", Magic: " ,OrderMagicNumber(), ", StopLoss: " ,OrderStopLoss());

         double Op_Price = NormalizeDouble (OrderOpenPrice(), Digits );
         double Stp_Loss = NormalizeDouble (OrderStopLoss(), Digits );
         
         if (OrderMagicNumber() == Magic_SP01)
            {   if (OrderType() == OP_SELLSTOP)
                  {   if (Low_1 < SP_Level_01 && new_val > Op_Price && new_val < Open_0)  
                        {  OrderModify(OrderTicket(),new_val,OrderStopLoss(), 0 , 0 , DeepPink );  }

                     if (!(global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) Print ( "Условие не выполняется!" );   else
                        {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP, 0 , 0 , DeepPink );
                           Print ( "Условие ModifyOrder исполнилось: global_trailing_SP: " ,global_trailing_SP, ", Stop Loss: " ,OrderStopLoss());  }
                  }
               if (OrderType() == OP_SELL)
                  {   if (global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)  
                       {  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP, 0 , 0 , DeepPink );  }
                  }
            }

         ...

Koşulun sağlanmadığı seçenek de günlükte görüntülenmediğinden. Pek çok farklı kombinasyon denedim ama hiçbiri işe yaramadı. Lütfen yardım et.

 

Ve burada

 if ( OrderSelect (count,SELECT_BY_POS,MODE_TRADES)) 

Bu gerekli değil mi?

 if ( OrderSelect (count,SELECT_BY_POS,MODE_TRADES)=true) 
 
FOReignEXchange :

Ve burada

Bu gerekli değil mi?


gerek yok. o ve böylece bool döner.
 
tol64 :

İşte başka bir sorum var. Yukarıda bahsettiğim kod örneğinde (tol64 07/03/2011 18:20).

Program her zaman farklı pozisyonların stop kayıplarını senkronize etmez. Yani pozisyon seçilir, koşul karşılanır, ayrıca loga kaydedilir, ancak stop loss değiştirilmez.

Yukarıdaki şekilde, bilet 4'lü pozisyon için stop loss'un değiştirilmiş olması ve bilet 1'li pozisyonla aynı değeri alması gerekirdi. Program bu yere bir baskı ile ulaşır, ancak daha sonra yürütme engellenmiş gibi görünür.

Koşulun sağlanmadığı seçenek de günlükte görüntülenmediğinden. Pek çok farklı kombinasyon denedim ama hiçbiri işe yaramadı. Lütfen yardım et.


Global_trailing_SP değişkeninin değerini doğrudan sağladığınız işlevde yazdırın() .

Bu değişkenin değerini nerede okuyorsunuz?

ve koddaki sıfırı (vurgulanan) değiştirin:

OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP, 0 , 0 , DeepPink )

OrderTakeProfit() işlevine

 
FOReignEXchange :

Peki ya koşullar mevcut değilse bu koşul ne için? Ve bu siparişler daha sonra kullanılmaz.


o zaman bana hangi kodun daha iyi olduğunu söyle

 if ( OrderSelect (count,SELECT_BY_POS,MODE_TRADES)) 

olarak yaz:

 if (! OrderSelect (count,SELECT_BY_POS,MODE_TRADES)) continue ;
 
abolk :


o zaman bana hangi kodun daha iyi olduğunu söyle

olarak yaz:


Anlamadın mı? Sadece yardıma bakıyorum, orada OrderSelect() bir koşul kullanıyor. Ve gerçek olmadan, hiçbir yerde görmedim.

if bir koşul ifadesidir. Ve parantez içinde bir koşul olmalıdır. Bu bana daha mantıklı geliyor. Fark olmasa bile.