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

 
Alexey Viktorov :

Tek yol

Teşekkürler, tam da ihtiyacınız olan şey!

 

Tünaydın!

Lütfen bu konuda tavsiyede bulunun:

Bekleyen bir sipariş verilir:

 bool send1= OrderSend ( Symbol (), OP_BUYSTOP ,Lots,Price, 3 ,SL,TP, NULL ,MagicNumber, 0 , clrGreen );

Ve sonra açtıktan sonra üzerinde bir iz bırakmaya çalışıyorum:

 {
 for ( int i= 0 ; i< OrdersTotal (); i++) 
  {
   if ( OrderSelect (i, SELECT_BY_POS ))
   if ( OrderSymbol ()== Symbol ()|| OrderMagicNumber ()==MagicNumber)
   if ( OrderType ()== OP_BUY )
   {
   if (TrailingStop> 0 )  
    {                 
   if ( Bid - OrderOpenPrice ()>TrailingStop)
     {
   if ( OrderStopLoss ()< Bid -TrailingStop)
      {
     OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TrailingStop, OrderTakeProfit (), 0 , clrRed );
      }
     }
    }
   }
  }
 }

Sonuçta sipariş açıldıktan sonra OP_BUY oluyor değil mi? Sorun nedir, bu varyantta neden takip çalışmıyor?

 
YanSay :

Tünaydın!

Lütfen bu konuda tavsiyede bulunun:

Bekleyen bir sipariş verilir:

Ve sonra açtıktan sonra üzerinde bir iz bırakmaya çalışıyorum:

Sonuçta sipariş açıldıktan sonra OP_BUY oluyor değil mi? Sorun nedir, bu varyantta neden takip çalışmıyor?

100500 neden. Bid-TrailngStop'un normalleştirilmediği açık. Durma seviyesine daha da yakın olabilir ve sonra da whoops.
 
YanSay :

Tünaydın!

Lütfen bu konuda tavsiyede bulunun:

Bekleyen bir sipariş verilir:

Ve sonra açtıktan sonra üzerinde bir iz bırakmaya çalışıyorum:

Sonuçta sipariş açıldıktan sonra OP_BUY oluyor değil mi? Sorun nedir, bu varyantta neden takip çalışmıyor?

Pip cinsinden TrailingStop? O zaman Nokta ile çarpmanız gerekir.
 

Yanlış soruyu sordum, özür dilerim. Bağlamdan çıkarıldı.

Özellikle takip edenleri kontrol etmek için bir kod yaptım, anlaşmalar açılıyor ama takip çalışmıyor, bükülmediği anda çıkmazda (

 //Вводные
#define MagicNumber 150
double SL= 0 ;                         //Stop Loss
input int Trailing= 100 ;             //Трэйлинг

//Код

void OnTick ()
{
 if ( OrdersTotal ()== 0 )
 {
   if ( TimeCurrent ()> StrToTime ( "17:59" )&& TimeCurrent ()< StrToTime ( "18:01" ))
  {
SL = Low [ 1 ]- Point ; //Стоп лосс
bool send1= OrderSend ( Symbol (), OP_BUY , 1 , Bid , 30 ,SL, 0 , NULL ,MagicNumber, 0 , clrNONE );
  }
 }
 if ( OrdersTotal ()> 0 )
   {
       for ( int i= 0 ; i< OrdersTotal (); i++)
    {
   bool select1= OrderSelect (i, SELECT_BY_POS );
   if ( OrderMagicNumber () == MagicNumber && OrderSymbol () == Symbol ())
     {
   if ( OrderType ()== OP_BUY )
      {
     if ( NormalizeDouble ( Ask - OrderStopLoss (), Digits )> NormalizeDouble (Trailing, Digits ))
     bool modify1= OrderModify ( OrderTicket (), 0 , Ask -Trailing, OrderTakeProfit (), 0 ,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay :

Yanlış soruyu sordum, özür dilerim. Bağlamdan çıkarıldı.

Özellikle takip edenleri kontrol etmek için bir kod yaptım, anlaşmalar açılıyor ama takip çalışmıyor, bükülmediği anda çıkmazda (

Yukarıdaki sorunuza cevap verdi.
 
Vladislav Andruschenko :
Sorunuzu yukarıda yanıtladı.
Çok teşekkür ederim, yardımcı oldu!
 
YanSay :
Çok teşekkür ederim, yardımcı oldu!

Orada hala sorunlarınız var.

Döngü doğrudandır, ancak tersine çevrilmelidir - doğrudan olanda, pozisyonlardan biri takip edilerek kapatıldıktan sonra pozisyonlar atlanır

Minimum durma mesafesini kontrol etme (StopLevel) - stop fiyata izin verilen minimum mesafeden daha yakınsa değişiklik hataları olacaktır (değişken yayılmayı unutmayın)

Belki başka bir şey - çapraz olarak baktım - zaten cevapladığınızdan beri.

not. Daha fazla baktı:

 if ( NormalizeDouble ( Ask - OrderStopLoss (), Digits )> NormalizeDouble (Trailing, Digits ))

böyle bir kontrol, her iki değeri de normalleştirdiğiniz için normalleştirmeli bir kontrolün anlamından yoksundur ve kontrol ederken sonuç tekrar normalleştirilmez.

İki çift değerin normalleştirilmiş farkını kontrol etmemiz gerekiyor. İki normalleştirilmiş değeri karşılaştırıyorsunuz.

 
Artyom Trishkin :

Orada hala sorunlarınız var.

Döngü doğrudandır, ancak tersine çevrilmelidir - doğrudan olanda, pozisyonlardan biri takip edilerek kapatıldıktan sonra pozisyonlar atlanır

Minimum durma mesafesini kontrol etme (StopLevel) - stop fiyata izin verilen minimum mesafeden daha yakınsa değişiklik hataları olacaktır (değişken yayılmayı unutmayın)

Belki başka bir şey - çapraz olarak baktım - zaten cevapladığınızdan beri.

not. Daha fazla baktı:

böyle bir kontrol, her iki değeri de normalleştirdiğiniz için normalleştirmeli bir kontrolün anlamından yoksundur ve kontrol ederken sonuç tekrar normalleştirilmez.

İki çift değerin normalleştirilmiş farkını kontrol etmemiz gerekiyor. İki normalleştirilmiş değeri karşılaştırıyorsunuz.

Bunun gibi?

for (int i = OrdersTotal() - 1; i >= 0; --i)
 if ( NormalizeDouble (( Ask - OrderStopLoss ()>Trailing* Point ), Digits ))
 
the size of local variables is too large (more than 512 kb)
hata ne anlama geliyor?


İki nesneli bir işlevim var:

 bool               CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                       int dir);

Sınıflardan biri 4000'den fazla alana (çoğunlukla enums) sahip bir yapıya sahiptir.

Bu hatayla ne yapmalı?