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

 
FOReignEXchange :


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.


Şartname:

 bool OrderSelect( int index, int select , int pool=MODE_TRADES) 

doğru veya yanlış döndürür

yardımda okuyun https://docs.mql4.com/ru/basis/operators/if

İfade doğruysa, ifade1 yürütülür ve kontrol, ifade2'yi izleyen ifadeye aktarılır (yani, ifade2 yürütülmez). İfade yanlışsa, ifade2 yürütülür.

 if (ifade)
     operatör1
başka
     operatör2

if ifadesinin else kısmı atlanabilir. Bu nedenle, başka bir bölümü atlanmış iç içe if ifadeleri belirsiz olabilir. Bu durumda, else , aynı blokta başka bir parçası olmayan en yakın önceki if ifadesine bağlanır.

yani, OrderSelect()==true karşılaştırması gerekli değildir - sadece OrderSelect()==false yerine OrderSelect() veya !OrderSelect() kullanın

 

Evet, bundan bahsetmiyorum.

Bir sipariş seçtiğimde her zaman tam olarak yazarım

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

Gerçek olmadan olduğunu hiç görmedim.

abolk :
то есть сравнение OrderSelect ()==true делать не обязательно - достаточно просто использовать OrderSelect () или ! OrderSelect () вместо OrderSelect ()==false

Anladım

 
FOReignEXchange :

Gerçek olmadan olduğunu hiç görmedim.


yanlış kişilerin kodlarına bakın.
 
FOReignEXchange :

Evet, bundan bahsetmiyorum.

Sadece bir sipariş seçtiğimde, her zaman tam olarak yazarım.

Gerçek olmadan olduğunu hiç görmedim.

Anladım


iki tamamen eşdeğer kayıt - bir kayıt diğerinden daha kötü ve daha iyi değil - her biri alışkın olduğu gibi daha iyi anladığı gibi kendisi için uygun olanı yapar
 
sergeev :

yanlış kişilerin kodlarına bakın.


Bu arada, FOReignEXchange'e haraç ödemeliyiz.

normal " Hareketli Ortalama .mq4" dosyasını açtı ve şunu gördü:

       if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)== false ) break ;
 
abolk :


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?


Vay canına! )) Sunulan işlevdeki global_trailing_SP değişkeninin değerini Print() aracılığıyla görüntülersem, günlükte benim için tamamen beklenmedik bir değer görüyorum (sarı ile vurgulanmıştır). Bundan önce, bu işlevin dışında doğru şekilde görüntülenir (kırmızı noktanın karşısında).

global_trailing_SP global değişken. Start() işlevinin dışında bildirildi,

 double global_trailing_SP = 0.0 ; 

Takip eden durdurma işlevi, ana konumun değerini başarıyla değiştirdikten sonra, ayrı bir döngüde, global_trailing_SP değişkeni, ana konumun durdurma kaybı değerine ayarlanır.

   for (count = OrdersTotal ()- 1 ; count >= 0 ; count--)
      {   OrderSelect (count,SELECT_BY_POS,MODE_TRADES);
         if (OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble (OrderStopLoss(),dgt); Print ( "global_trailing_SP: " ,DoubleToStr(global_trailing_SP, 5 ));  }
      }
Bu değer, yukarıda kırmızı bir nokta ile işaretlenmiştir.

Daha sonra bu değer, çeşitli emir değişikliklerinin gerçekleştiği fonksiyona iletilir. Ancak sonuç olarak, günlükte benim için öngörülemeyen bir değer görüntülenir ve stop-loss değeri elbette değiştirilmez. Bu sorun nasıl çözülebilir? İlk bakışta göründüğü gibi her şeyin her zaman mantıklı olmadığı ortaya çıkıyor.)))

 

Ama burada, SELLSTOP nerede yapmak daha iyi değil mi?

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

Böylece her şey SATIŞ'takiyle tamamen aynı.

 
FOReignEXchange :

Ama burada yapmak daha iyi değil mi, SELLSTOP nerede?

Böylece her şey SATIŞ'takiyle tamamen aynı.


Bu durumda, bu sorun görünmüyor. Daha fazla detay yukarıda.
 
tol64 :


Vay canına! )) Sunulan işlevdeki global_trailing_SP değişkeninin değerini Print() aracılığıyla görüntülersem, günlükte benim için tamamen beklenmedik bir değer görüyorum (sarı ile vurgulanmıştır). Bundan önce, bu işlevin dışında doğru şekilde görüntülenir (kırmızı noktanın karşısında).

global_trailing_SP global değişken. Start() işlevinin dışında bildirildi,

Takip eden durdurma işlevi, ana konumun değerini başarıyla değiştirdikten sonra, ayrı bir döngüde, global_trailing_SP değişkeni, ana konumun durdurma kaybı değerine ayarlanır.

Bu değer, yukarıda kırmızı bir nokta ile işaretlenmiştir.

Daha sonra bu değer, çeşitli emir değişikliklerinin gerçekleştiği fonksiyona iletilir. Ancak sonuç olarak, günlükte benim için öngörülemeyen bir değer görüntülenir ve stop-loss değeri elbette değiştirilmez. Bu sorun nasıl çözülebilir? İlk bakışta göründüğü gibi her şeyin her zaman mantıklı olmadığı ortaya çıkıyor.)))


global_trailing_SP global değişkenini nasıl okuduğunuzu gösterin
 

Yani anlamadım. Ana siparişin değiştirildiği sırada bekleyen bir sipariş var mı ?

Varsa, ana siparişin değiştirilmesi ve bekleyen siparişin değiştirilmesi bir blokta gerçekleşir. Ve eğer ana emir değiştirildiyse, o zaman, eğer öyle istiyorsanız, bekleyen emir de değiştirilmelidir.

Başka bir şey, planlananın işe yaramadığıdır. Yani durumda bir hata var. Yukarıda gösterdiğim gibi, ana sırayı değiştirme koşuluyla her şeyi aynı şekilde yapmaya çalışın. Bana mantık hatası gibi geliyor. Şaşırtıcı değil. Bir şey senin için zor. Yapması daha kolay.

Neden: