Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 191

 
yan720 :

Cevap için teşekkürler. Böyle bir sorunun ortaya çıkmasına bile şaşırdım. Yine de, belki de gördüklerimi ve soruya neyin sebep olduğunu yanlış anladım.

Şimdi, belirli algoritmaların hangi yollarla (benimkinden farklı ve belki daha verimli) uygulandığını görmek için başka birinin koduna bakıyorum. Şimdi kötü şöhretli Ilan 1.6 EA'ya bakıyorum (ekli). Farklı parçalardan bir araya getirildiği ve daha sonra yeniden birleştirildiği görülebilir. Ancak burada, 337 satırında, özel bir takip eden durdurma işlevi bildirilir (her ne kadar kullanımı için bayrak en başta sıfıra zorlanmış olsa da). Bu işlev 52. satırda çağrılır.

Sorum, yukarıda bahsedilen takip eden durdurmanın açık emirleri (ve birkaç tane olabilir) zararı durdurarak, orijinal kar almalarını koruyarak değiştirmesi, ANCAK bu emirleri açılış fiyatı (OrderModify işlevinin ikinci parametresi) aynı değer (AveragePrice) olarak ayarlaması nedeniyle ortaya çıktı. , 173 ve 178 satırlarında hesaplanmıştır).

Veya bir açık emri değiştirirken, bu parametre (açık fiyat) sunucu tarafından basitçe dikkate alınmaz ve herhangi bir fiyat ayarlanabilir mi?

Bir piyasa pozisyonunu değiştirirken, fiyat ayarlanmalı ve pozisyon açılış fiyatına eşit olmalıdır: OrderOpenPrise()

PS Yerinde olsam, bu kodda "verimli algoritmalar" aramazdım - görünüşe göre insanlar kodu orada yazmış, orada ne yaptığını gerçekten anlamamışlar ...

 
Nate
 Alert ( "Исполнение программы" );
     double p[ 100 ];
     int i = 0 ;
     int n = OrdersTotal ();
     int t = 0 ;
    
     for (i= 0 ; i<=n+ 1 ; i++)
    {
    
     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )
     {
     
      p[i+ 1 ] = OrderProfit();       // р - це прибуток ордера
     
     } 
    }
     for (i= 0 ; i<=n+ 1 ; i++)
    {
     if (p[i+ 1 ]> 0 )                   // якщо ордер прибутковий, то його 
    {
       Alert ( "Є прибуток ордер " ,i+ 1 );
       OrderSelect (i+ 1 ,SELECT_BY_POS,MODE_TRADES); 
       Alert ( "Маємо помилку " , GetLastError ());
       Alert ( "Вибрали ордер " ,i+ 1 );
       double ld_Price;
       if (OrderType() == 0 ) ld_Price = NormalizeDouble (Bid, Digits );
       else ld_Price = NormalizeDouble (Ask, Digits );
      OrderClose (OrderTicket(), OrderLots(), ld_Price, 2 );   // треба зачинити 
       Alert ( "Маємо помилку " , GetLastError ());
       Alert ( "Закрили ордер " ,i+ 1 ); 
       if ( OrderType()==OP_BUY)                               //  в залежності від того, якого типу ордер ми зачинили
       { 
         Alert ( "Ордер типу бай" );
         OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );   // змінюється порядок відкривання наступних ордерів
         Alert ( "Відкрили ордер типу селл" );
         Sleep ( 10000 );
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );
         Alert ( "Відкрили ордер типу бай" );
        } else
      {
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );
         Alert ( "Відкрили ордер типу бай" );
         Sleep ( 10000 );
         OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );    
         Alert ( "Відкрили ордер типу селл" );
      }
    } 
   } 
     Alert ( "Последняя ошыбка " , GetLastError ()); 
//----
   return ( 0 );
  }

Bu "aptallığı" bulmak için kibar olun, Pascal tarafından eziyet edilen insanlara acıyın.

 
artmedia70 :
Bir piyasa pozisyonunu değiştirirken, fiyat ayarlanmalı ve pozisyon açılış fiyatına eşit olmalıdır: OrderOpenPrise()

O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?

 void TrailingAlls( int pType, int stop, double AvgPrice) {
   int profit;
   double stoptrade;
   double stopcal;
   if (stop != 0 ) {
       for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) {
         if ( OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)) {
             if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
             if (OrderSymbol() == Symbol () || OrderMagicNumber() == MagicNumber) {
               if (OrderType() == OP_BUY) {
                  profit = NormalizeDouble ((Bid - AvgPrice) / Point , 0 );
                   if (profit < pType) continue ;
                  stoptrade = OrderStopLoss();
                  stopcal = Bid - stop * Point ;
                   if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Aqua);
               }
               if (OrderType() == OP_SELL) {
                  profit = NormalizeDouble ((AvgPrice - Ask) / Point , 0 );
                   if (profit < pType) continue ;
                  stoptrade = OrderStopLoss();
                  stopcal = Ask + stop * Point ;
                   if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Red);
               }
            }
             Sleep ( 1000 );
         }
      }
   }
}
 
Merhaba, 3 mum stratejisi için bir danışman yazmanız gerekiyor.Ticaret, piyasa gürültüsünden arındırılmış Renko çizelgelerinde gerçekleştirilir.Bir yönde ardışık üç çubukla, alım veya satım emri açın, zararı durdur ön çubuğun üst kısmı, mumu kapattıktan sonra, stop loss'u önde gelen çubuğa taşıyın
 
artmedia70 :

PS Yerinde olsam, bu kodda "verimli algoritmalar" aramazdım - görünüşe göre insanlar kodu orada yazmış, orada ne yaptığını gerçekten anlamamışlar ...

Evet, kod çok fazla fazlalık ve daha fazlasıyla çok spesifik. Ancak ben algoritmalarla pek ilgilenmiyorum, temel fikri uygulama yaklaşımıyla ilgileniyorum. Genel resme veya başka bir şeye bakıyorum. Ayrı işlevlerde ne alınır, benimkinin aksine aynı izlemenin nasıl uygulandığı vb. Kendi kendimi yetiştirdim ve bu sadece benim için faydalı :)
 
artmedia70 :
Doğru yerde - hangisi?


mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim
 
yan720 :

O zaman bu işlev sizce çalışmayacak mı? Test etmedim, ama bana öyle geliyor ki, çalışan bir kodun parçası (bu Ilan, en azından hata ayıklanmış bir şeyden açıkça yeniden oluşturuldu). Yoksa hala sakar kod mu?

Şey... kod gerçek değil. En azından.

 
Sevgili programcılar, birinin birkaç boş dakikası varsa, lütfen yanıt verin. işin püf noktası şu. Standart MACD basit Uzman Danışmanını yeniden yapmak istiyorum, ancak programlamada tam bir 0'ım.
Ve danışman danışmanın tek bir siparişle değil, bir ızgara, durma ve sihirle çalışması için değiştirmek istiyorum.
Eklemek istediğim değişkenler şunlardır:
Stoploss = tüm şebeke için aynı seviyede bulunur, örneğin EUR / USD = 200pp'ye eşittir. ve ızgaradaki tüm siparişler için 1.3450 seviyesinde bulunur
MaxOpenOrder = ızgaradaki maksimum sipariş sayısı, örneğin if=3, ardından ızgarada maks. sipariş sayısı 3 olacak
Dist = siparişler arasındaki mesafe (ertelenmiş)

Lommmultiplicator = sonraki grid sırasının lot artış faktörü.

büyü=sihirli sayı

İşlemden çıkış, kaynak koddaki gibi gerçekleştirilir, yani. tüm ızgara siparişleri, 1. sıranın kapatıldığı anda kapatılır.

aslında hepsi bu
Birisi cevap verirse çok minnettar olacağım!
Belki birisi zaten sahiptir. hayata geçirilen hazır bir Uzman Danışman da işe yarayacaktır.
 
sannin :

mesela 1200 puanlık yerde zaten bir sipariş var.. ve mesela fiyat düşüyordu ve yıldızlar öyle sıralanmış ki bu yere sipariş vermeniz gerekiyor.. ve sipariş zaten verilmiş ayakta ve bakiyeyi gerekli olanın altına düşürmemek için tek seferde 2 sipariş vermemek için diyelim

Bunun gibi bir şey:

 //+----------------------------------------------------------------------------+
bool ExistOrdersByPrice( string sy, int op, int mn, double pp) {
   int i, k= OrdersTotal ()- 1 ;
   for (i=k; i>= 0 ; i--) {
       if ( OrderSelect (i,SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue ;
         if (OrderSymbol()!=sy)         continue ;
         if (OrderType()!=op)           continue ;
         if ( MathAbs (OrderOpenPrice()-pp)< 0.5 * Point ) return ( true );
         }
       else Print ( "FUNC ExistOrdersByPrice() : ошибка выбора ордера " + GetLastError ());
      }
   return ( false );
}
//+----------------------------------------------------------------------------+

Magic ile 1.35000 fiyatında mevcut sembol üzerinde BuyStop emri olup olmadığını kontrol etmek için fonksiyonu çağırıyoruz:

 //+----------------------------------------------------------------------------+
   if (!ExistOrdersByPrice( Symbol (), OP_BUYSTOP, Magic, 1.35000 )) {
       // тут код, если нет такого ордера
      }
   else {
       // тут код, если есть такой ордер
      }
//+----------------------------------------------------------------------------+
 
atztek :

Dokümantasyondan bahsediyorsak, MetEditor'da kelimeyi seçin ve F1'e basın. Veya çevrimiçi, örneğin:
https://docs.mql4.com/en/customind/SetLevelStyle

Tabii ki teşekkürler, ama soruyu okuyamayacak kadar tembelsen, o zaman cevap vermenin anlamı ne? Göstergedeki seviyelerle çalışmak için mevcut olan iki fonksiyonda bunların değerini, kalınlığını, rengini ve stilini değiştirebilirim. Ama açıklamaya erişimim yok. Yine, cevabı bilen var mı? Belki karşı karşıya?

Neye ihtiyacım olduğunu görebilmeniz için bir resim ekledim.

Neden: