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

 
Kim bilir - siparişin bir kısmını kapatırsanız, büyüsü veya yorumları kaybolacak mı?
 
Renat Akhtyamov :
Kim bilir - siparişin bir kısmını kapatırsanız, büyüsü veya yorumları kaybolacak mı?

Sihir devam edecek, sipariş bileti değişecek ve #xxxxxxxxx'ten gelen ebeveyn sipariş bileti yoruma eklenecek. Çocuğun bileti ebeveyn siparişine girilecektir: to#xxxxxxxxx

 
Artyom Trishkin :

Sihir devam edecek, sipariş bileti değişecek ve #xxxxxxxxx'ten gelen ebeveyn sipariş bileti yoruma eklenecek. Çocuğun bileti ebeveyn siparişine girilecektir: to#xxxxxxxxx

TAMAM. Teşekkür ederim!
 
geratdc :


Evet, bu K ayrıca üst başlıktaki harici değişkenlerde de gösteriliyor, belki bu bir fonksiyonun dönüş değeridir ...


Alexey, sorunum hakkında ne söyleyebilirsin? Durdurma iptali emirlerine bağlanmaya çalışırken izleniyor. Bununla tanıştınız mı?

Ve bu problemle ilgili bir şeye cevap verebilmek için problemin kendisini anlamanız gerekir. Ve bundan

geratdc :

Yardıma ihtiyacım var - Durdurma iptalleri var - 3 sipariş, ancak video eğitimlerinden takip eden bir örnek :) sadece alakasız siparişler için, ancak benim için bir algoritma ile bağlılar, yani kar al üç siparişin toplamı ile hesaplanır , ya da hemen trendi yakalarsa. Şey, bir şey buldum, ancak danışman daha fazla kazanmadı - aynı miktarı kazanmaya başladı, ancak bir öncekine kıyasla 2-3 kat daha az işlem takip etmeden elde edildi. Genel olarak, izim yok, ancak bir tür bulanıklık var. İlgili siparişler için nasıl yapabilirim bana fikir verebilecek olan var mı? Korkarım başka bir şey bulamayacağım, işte "sondaki" sonucumun sonucu - mavi renkle vurgulanmış:

1. testin sonucu ektedir. Takip eden bir durak var mı, yok mu? Anlamıyorum. Aynı döneme ait kâr miktarı neden artmadı? Ve sadece işlem sayısı 2-3 kat azaldı?


Hiçbir şey anlayamıyorum. En tuhafı ise " Eh, ben bir şey buldum " ama ne bulduğunu anladın mı? Bir de " Bunu bağlantılı siparişler için nasıl yaparım " var. Ama yine de " Korkarım başka bir şey düşünmeyeceğim " anlaşılır ifadeler var.

 
Alexey Viktorov :

Ve bu problemle ilgili bir şeye cevap verebilmek için problemin kendisini anlamanız gerekir. Ve bundan

Hiçbir şey anlayamıyorum. En tuhafı ise " Eh, ben bir şey buldum " ama ne bulduğunu anladın mı? Bir de " Bunu bağlantılı siparişler için nasıl yaparım " var. Ama yine de " Korkarım başka bir şey düşünmeyeceğim " anlaşılır ifadeler var.


Anladığım kadarıyla, takip emirlere doğru bir şekilde uygulanamıyor, bu nedenle bu CalculateProfit işlevine, yani 3 siparişin hepsinin kâr toplamı eşitse siparişlerin kapatıldığı "op" değişkenine daha yakından bakmanız gerekiyor. TakeProfit'e ve bu değişkeni takip etmeye çalışın. Bu yönde bir şeyler bulmaya çalışacağım. Eh, üçüncü taraf abraCODabras'ı keşfetmenin zor olduğunu anlıyorum)))
 
geratdc :

Anladığım kadarıyla , takip emirlere doğru bir şekilde uygulanamıyor, bu nedenle bu CalculateProfit işlevine, yani 3 siparişin hepsinin kâr toplamı eşitse siparişlerin kapatıldığı "op" değişkenine daha yakından bakmanız gerekiyor. TakeProfit'e ve bu değişkeni takip etmeye çalışın. Bu yönde bir şeyler bulmaya çalışacağım. Eh, üçüncü taraf abraKODabras'ı keşfetmenin zor olduğunu anlıyorum)))
neden başvurmuyorsun??? Başka birinin işlevine bir şey eklemek veya icat etmek değil, sizin istediğiniz her şeyi yerine getirmeleri için kendinizinkini yazmak gerekir. Peki, sorun ne olabilir? Ne kadar emir olursa olsun, ortalama fiyatı hesaplayın ve ondan takibe başlayın... Eğer bir koşul sağlanırsa, bir döngüdeki tüm emirleri geçerek, hepsinin ortalama fiyatından hesaplanan stoplarını yeni bir seviyeye yeniden düzenleyin. tek yönde mevcut siparişler.
 
//+------------------------------------------------------------------+
//|                                     BLACKJACK&HOOKERS TrailX.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern double   Lots           = 0.01 ;
extern double   TakeProfit     = 1 ;
extern int      Step           = 1 ;

extern double   TrailXStep     = 1 ;
extern double   TrailXStop     = 1 ;

extern int      MaPeriod       = 100 ;
extern int      MaShift        = 1 ;

extern int      Magic          = 123 ;
extern int      Slippage       = 5 ;

int timeprev= 0 ;

extern double price,op,cn,tp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 )
       //TakeProfit     *= 10;
      Step           *= 10 ;
       //TrailXStep     *= 10;
       //TrailXStop     *= 10;
      Slippage       *= 10 ;

      
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
   if (timeprev == Time [ 0 ]) return ;
   timeprev = Time [ 0 ];
   double maprice= iMA ( Symbol (), 0 ,MaPeriod,MaShift, MODE_SMA , PRICE_CLOSE , 1 ); 
   op=CalculateProfit();
   cn=CountTrades();
   tp=TakeProfit;
   if (tp>TakeProfit)
   {
      TakeProfit+=tp;
   }
   
 

 
   if (cn== 0 && CountBuy() + CountSell() == 0 && Ask > maprice)
   {
       if ( OrderSend ( Symbol (), OP_BUY , Lots, Ask , Slippage, 0 , 0 , "" , Magic, 0 , Blue)< 0 )
             Print ( "Не удалось открыть ордер на покупку" );
            
   }
   
   if (cn== 0 && CountBuy() + CountSell() == 0 && Bid < maprice)
   {
       if ( OrderSend ( Symbol (), OP_SELL , Lots, Bid , Slippage, 0 , 0 , "" , Magic, 0 , Red)< 0 )
             Print ( "Не удалось открыть ордер на продажу" );
            
   }
   

   
   if (cn== 1 && CountBuy()== 1 ) 
   {
      price=FindLastBuyPrice();
       if ((price- Ask )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
             Print ( "Не удалось открыть ордер на продажу" );
      }
   }
   else if (cn== 1 && CountSell()== 1 ) 
   {
      price=FindLastSellPrice();
       if (( Bid -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
      }
   }
   
   
   
   if (cn== 2 && CountBuy()== 1 && CountSell()== 1 ) 
   {
      price=FindLastSellPrice();
       if ((price- Bid )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
               Print ( "Не удалось открыть ордер на продажу" );
               
      }
       else 
      price=FindLastSellPrice();
       if (( Bid -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
           
      }
   }
   else if (cn== 2 && CountSell()== 1 && CountBuy()== 1 ) 
   {
      price=FindLastBuyPrice();
       if (( Ask -price)>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_BUY ,Lots, Ask ,Slippage, 0 , 0 , "" ,Magic, 0 ,Blue)< 1 )
               Print ( "Не удалось открыть ордер на продажу" );
               
      }
       else 
      price=FindLastBuyPrice();
       if ((price- Ask )>=Step* Point )
      {
         if ( OrderSend ( Symbol (), OP_SELL ,Lots, Bid ,Slippage, 0 , 0 , "" ,Magic, 0 ,Red)< 1 )
             Print ( "Не удалось открыть ордер на покупку" );
           
      }
   }
   
   Trailing();

   if (op>=tp)
   {
         CloseAll();    
   }


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }
//---------------------------------------------------------------------------------------
double CalculateProfit()
  {
   double oprofit= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL )
              {
               oprofit+= OrderProfit ();
              }
           }
        }
     }
   return (oprofit);
  }
//--------------------------------------------------------------------------------------
void CloseAll()
  {
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage))
                   Print ( "Не удалось закрыть ордер на покупку" );
              }
             if ( OrderType ()== OP_SELL )
              {
               if (! OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage))
                   Print ( "Не удалось закрыть ордер на продажу" );
              }
           }
        }
     }
  }
//---------------------------------------------------------------------------------------------------
double FindLastBuyPrice()
  {
   int oldticket,ticket= 0 ;
   double oldopenprice = 0 ;
   for ( int cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
     {
       if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY )
           {
            oldticket= OrderTicket ();
             if (oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice= OrderOpenPrice ();
              }
           }
        }
     }
   return (oldopenprice);
  }
//---------------------------------------------------------------------------------------------------
double FindLastSellPrice()
  {
   int oldticket,ticket= 0 ;
   double oldopenprice = 0 ;
   for ( int cnt= OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
     {
       if ( OrderSelect (cnt, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL )
           {
            oldticket= OrderTicket ();
             if (oldticket>ticket)
              {
               ticket=oldticket;
               oldopenprice= OrderOpenPrice ();
              }
           }
        }
     }
   return (oldopenprice);
  }
//----------------------------------------------------------------------------------------------
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_BUY )
            count++;
        }
     }
   return (count);
  }
//----------------------------------------------------------------------------------------------
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }
//+---------------------------------------------------------------------------------+
int CountTrades()
{
     int count= 0 ;
     for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
      {  
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
               if ( OrderType () == OP_BUY || OrderType () == OP_SELL )
                  count++; 
         }
      }
       return (count);
}
//----------------------------------------------------------------------------------+
int FindLastOrderType()
{
       for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
      {
         if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         {
             if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
             return ( OrderType ());
         } 
      }
       return (- 1 );
}
//----------------------------------------------------------------------------------+

Bu, şimdi CalculateProfit() işlevini kullanan takip seçeneğidir, ticarette her iki takip seçeneği de aynı göstergelere sahiptir - hem işlem sayısı hem de kar açısından. Çok az kar var - şimdi göstergeleri sabitleyeceğim - oynaklık ve daha doğru bir giriş. Aynı göstergenin bu sorunları çözebileceğini düşünüyorum, değil mi? Diyelim ki bu, son 5 çubuğu veya bunun gibi bir şeyi analiz ediyor. Bu tür çubuk göstergelerinin nasıl çağrıldığını söyle. Ve en iyi zaman dilimi nedir? Lütfen düşüncelerinizi paylaşın, bir taşla iki kuş göstergesine nasıl sahip olabilirim ... o :)

Takip eden danışmanın nasıl olduğunu burada görebilirsiniz

 
Alexey Viktorov :
neden başvurmuyorsun??? Başka birinin işlevine bir şey eklemek veya icat etmek değil, sizin istediğiniz her şeyi yerine getirmeleri için kendinizinkini yazmak gerekir. Peki, sorun ne olabilir? Ne kadar emir olursa olsun, ortalama fiyatı hesaplayın ve ondan takibe başlayın... Eğer bir koşul sağlanırsa, bir döngüdeki tüm emirleri geçerek, hepsinin ortalama fiyatından hesaplanan stoplarını yeni bir seviyeye yeniden düzenleyin. tek yönde mevcut siparişler.

Kaydedildi, teşekkürler. Hala böyle düşünemiyorum. Kodlardan ve fonksiyonlardan kafanızda bir kütüphane olması gerekiyor ve orada olduğumuz video eğitimlerinde ben öyle geçtim ve şimdilik kullanıyorum. Orada bir alt usta gibi görünüyorsun ve tavsiyeni uygulayacağım. Ama bugün ortaya çıkardığım şey, bir trol gibi görünüyor mu? Pek iyi değil, danışman takip ediyor, bu raporlardan anlaşılıyor ama yine de bunun ne kadar doğru olduğunu bilmiyorum çünkü yanlış bir iz sadece tahliye olasılığını artıracaktır, şimdiden değerler arıyorum ​​test cihazı ayarlarında danışman en azından bir şeyler kazanır))) ama gerçek için hala erken tabii. 0.9 olasılıkla boşaltma, bunun gibi bir şey))) Dairelerden çok korkuyor ve gösterge şimdi zayıf - aptalca trende katılıyoruz ve 3 emir olduğunda ve piyasa aniden yön değiştirip bir düşüş verdiğinde - bir boşaltmak.
 
geratdc :

Kaydedildi, teşekkürler. Hala böyle düşünemiyorum. Kodlardan ve fonksiyonlardan kafanızda bir kütüphane olması gerekiyor ve orada olduğumuz video eğitimlerinde ben öyle geçtim ve şimdilik kullanıyorum. Orada bir alt usta gibi görünüyorsun ve tavsiyeni uygulayacağım. Ama bugün ortaya çıkardığım şey, bir trol gibi görünüyor mu? Pek iyi değil, danışman takip ediyor, bu raporlardan anlaşılıyor ama yine de bunun ne kadar doğru olduğunu bilmiyorum çünkü yanlış bir iz sadece tahliye olasılığını artıracaktır, şimdiden değerler arıyorum ​​test cihazı ayarlarında danışman en azından bir şeyler kazanır))) ama gerçek için hala erken tabii. 0.9 olasılıkla boşaltma, bunun gibi bir şey))) Dairelerden çok korkuyor ve gösterge şimdi zayıf - aptalca trende katılıyoruz ve 3 emir olduğunda ve piyasa aniden yön değiştirip bir düşüş verdiğinde - bir boşaltmak.

Pekala, eğitiminize akarımı eklemeye çalışacağım.

Gönderdiğimde sizinle iletişime geçeceğim. İşaretçinin bir anlık görüntüsü var ...

Lütfen söyleyin, bir işlevi tek tıkla 5 kez çağırmak yanlış görünmüyor mu? Ama bu sorunun yarısı. Bu işlev tüm siparişleri yineler. Ve tüm bunlar tek seferde 5 kez... Ve böyle 4 fonksiyon saydım.Bütün siparişlerin bir numaralandırma döngüsü ile bir döngüde 3 fonksiyon daha eklemek için beyni zorlamak değil.

İşte onlardan ikisi.

 if (cn== 0 && CountBuy() + CountSell() == 0 && Ask > maprice)
 if (cn== 0 && CountBuy() + CountSell() == 0 && Bid < maprice)
 if (cn== 1 && CountBuy()== 1 )


else if (cn== 1 && CountSell()== 1 ) 
if (cn== 2 && CountBuy()== 1 && CountSell()== 1 ) 


else if (cn== 2 && CountSell()== 1 && CountBuy()== 1 )

Bu

Trailing();


}    
//---------------------------------------------------------------------------------------
void Trailing()           
            {  

               if (op > (TakeProfit+TrailXStep))
               {
                  tp=(TakeProfit+TrailXStep);
               }
               if (op > (TakeProfit+TrailXStep-TrailXStop) && op < (TakeProfit+TrailXStep+TrailXStop))
               {
                  tp=(TakeProfit+TrailXStep-TrailXStop);
               }
               
            }


takip yakın bile gelmiyor.

Bunu anlamak için, takip etmenin ne olduğunun tanımını açıkça anlamanız gerekir. Kelimenin tam anlamıyla hatırlamıyorum, ama şöyle bir şey: "Olası bir kaybı azaltmak veya "garantili" bir karı artırmak için fiyatı takip eden StopLoss seviyesini hareket ettirmek."


Ama bu

 extern double price,op,cn,tp;

EA başlatıldığında nasıl görünüyor? Muhtemelen dört satır... gerekli mi?


Ve bugün için son şey: Kafanızda bir kütüphane olmasına gerek yok. Belgelerinizin olması ve kullanabilmeniz yeterlidir. Hala bellek için tüm iMA(_Symbol, _Period, ,,,,,) parametrelerini yazamıyorum ve yalnızca belgelere baktıktan sonra yazıyorum. Ve böylece neredeyse tüm fonksiyonlar. Ama neyse ki, çok uzun zaman önce çok fazla tasarruf etmeyen araç ipuçları yaptılar. Belirli numaralandırmaların nasıl yazıldığını hatırlamaya çalışmıyorum. Bu yüzden her seferinde belgelere gitmelisiniz.

 

Lütfen bana bu onay kutusunun durumunu hangi işlevin kontrol ettiğini söyler misiniz?