MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1640

 
EVGENII SHELIPOV # :

Hepinize iyi günler!!!

Grup emirlerinin Takip Eden Durdurma için bir Uzman Danışman için emirler tablosunun ortalama fiyatından bir kod yazıyorum.

Günlükte hata yok, ancak trol de çalışmıyor. İşte kod, lütfen bana hatanın nerede olduğunu söyleyin. Teşekkürler!!!

Trol orada değil!

Bunun gibi bir şey olmalı:

eğer başabaş fiyat+kar-trol!= TakeProfit takip etmeye başla

Bu verileri nereden alıyor?

 //+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))

SiparişAçıkFiyat

Seçilen siparişin açılış fiyatını verir.

doubleOrderOpenPrice ( );

Not:

Sipariş, OrderSelect() işlevi kullanılarak önceden seçilmelidir.

 
MakarFX # :

Teşekkürler.)

 
MakarFX # :

Trol orada değil!

Bunun gibi bir şey olmalı:

eğer başabaş fiyat+kar-trol!= TakeProfit takip etmeye başla

İyi günler Makar!!!!

Anladığım kadarıyla bu hatla ilgili. Bu durumda, siparişleri satın alın:

 if (Bid - NormalizeDouble (price / order_lots, Digits ) > TrailingStopGroupOrder* Point || OrderStopLoss() == 0 )

Makar, mümkünse daha ayrıntılı olarak açıklayın

 
MakarFX # :

Trol orada değil!

Bunun gibi bir şey olmalı:

eğer başabaş fiyat+kar-trol!= TakeProfit takip etmeye başla

Bu verileri nereden alıyor?

Makar Bugün bilmecelerle konuşuyorsun

Belki başka bir soru, neden başabaş fiyatını kontrol etmeden hesapladığımızdır????

 
MakarFX # :

Trol orada değil!

Bunun gibi bir şey olmalı:

eğer başabaş fiyat+kar-trol!= TakeProfit takip etmeye başla

Bu verileri nereden alıyor?

SiparişAçıkFiyat

Seçilen siparişin açılış fiyatını verir.

doubleOrderOpenPrice ( );

Not:

Sipariş, OrderSelect() işlevi kullanılarak önceden seçilmelidir.

Evet, düşündüm ve sen zaten yazdın

 
EVGENII SHELIPOV # :

İyi günler Makar!!!!

Anladığım kadarıyla bu hatla ilgili. Bu durumda, siparişleri satın alın:

Makar, mümkünse daha ayrıntılı olarak açıklayın

Bir sipariş grubunuz var, bir başabaş noktası tanımlıyorsunuz ve bir satır oluşturuyorsunuz, ancak bunu ayrı bir fonksiyon olarak yapmak daha iyi!

    avg_price = NormalizeDouble (price / order_lots, Digits );
     {
     ObjectDelete ( 0 , "AveragePriceLine" );
     ObjectCreate ( 0 , "AveragePriceLine" , OBJ_HLINE , 0 , 0 , avg_price);
     ObjectSet( "AveragePriceLine" , OBJPROP_COLOR , Magenta);
     }

Ardından, almak istediğiniz puan cinsinden kâr değerine sahipsiniz ve avg_price'a ekleyin/çıkarın

     if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder* Point , Digits );
     if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder* Point , Digits );

Ve sonra ayrı bir trol işlevi

satın almalar için: eğer BID > avg_price = OrderModify() ise

satışlar için: ACK < avg_price = OrderModify() ise


Ne yazık ki, kodunuzda mantıklı eylemler görmüyorum (öznel olarak)

 
EVGENII SHELIPOV # :

Evet, düşündüm ve sen zaten yazdın

Gezinmeyi kolaylaştırmak için işlevleri ayırın

İşte bir OnTick() örneği

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*- 1 )
     {
      CloseOrder();
     }
   sl  = MathMax (Stoploss, MarketInfo( _Symbol , MODE_STOPLEVEL)) * Point ();
   SL  = NormalizeDouble (sl* Point (), Digits );
   tp  = MathMax (Takeprofit, MarketInfo( _Symbol , MODE_STOPLEVEL)) * Point ();
   TP  = NormalizeDouble (tp* Point (), Digits );
   //---
   if (CountOrders()== 0 && ObjectGetInteger ( 0 , "lab_Button" , OBJPROP_STATE ))
     {
       if (TradeSignal()>= 0 )
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL( "lab_Торговля" , 0 , 0 , 0 , clrRed , "Торговля запрещена" ); return ;} 
   else
     {DrawLABEL( "lab_Торговля" , 0 , 0 , 0 , clrLime , "Торговля разрешена" );}
  }
//+------------------------------------------------------------------+

Gördüğünüz gibi burada sadece fonksiyon çağrıları var.

 
MakarFX # :

Gezinmeyi kolaylaştırmak için işlevleri ayırın

İşte bir OnTick() örneği

Gördüğünüz gibi burada sadece fonksiyon çağrıları var.

Teşekkürler Makar, düşüncelerimi bir yumrukta toplayacağım ve bu yönde düşüneceğim

 
EVGENII SHELIPOV # :

Teşekkürler Makar, düşüncelerimi bir yumrukta toplayacağım ve bu yönde düşüneceğim

İletişim)
 
Soru: Bir danışmanın vesayetinden bir emir nasıl geri çekilir? Belki de MT4'ün kendisinin bilmediğim bazı ekran görüntüleri veya işlevleri vardır. aydınlatın lütfen. Kullanıcı düzeyinde, plz: mql 3, 4, 5, vb. çalışmak için ne arzu ne de fırsat vardır.