köylüler kazanmayı öğrenin [Bölüm 2]! - sayfa 102

 
BeerGod :

Manuel ticaretin üçüncü günü, ticaret bugün için sona erdi


Tebrikler! Bir geri dönüşte euro üzerinde bir sürü satışım var - kapalı, sterlin üzerinde - hayır ...

50 000 cent - atladı - şimdiden iyi! :-)

 

Selamlar.

belki birisi bu kodu biliyordur:

 //-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0 ,
Time_at_History_Previos = 0 ;     
 
 if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 )
                   break ;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0 ) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
         if (BuyLots  > SellLots)money = BuyLots * 10 ;
         if (BuyLots  < SellLots)money = SellLots * 10 ;
   if ((( AccountEquity () + Sum_Loss + (Sum_Loss / money)) >= AccountBalance ()) && (((totalSell > 0 ) && (totalBuy < 1 )) || ((totalSell < 1 ) && (totalBuy > 0 )))) { // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0 ;
           

Anlaşma negatifte kapatıldığında, bir döngü açılacak ve bir sonraki sipariş sıfırdan fazla, yani pozitif bir bakiye, ancak negatiften daha az kapanırsa, o zaman bir ekleyeceğimiz hiçbir şey yapamam. artı eksi ve zaten daha küçük olan yeni bir negatif değer elde ederiz.

 if ( OrderProfit () >= 0 && Sum_Loss < 0.0 )
                   double lastLoss_two = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss_two;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
               }

ve bir sinyalde negatiften fazlaysa, siparişi kapatırız ve döngüyü baştan başlatırız.

 
belck :

Selamlar.

belki birisi bu kodu biliyordur:

Evet. Bu benim kodum. Flip martin'imde kullandığımı size daha önce şöyle yazmıştım:

Son anlaşma (pozisyon) bir artı ile kapatılmışsa, çevirme sayısını (Yineleme) sıfırlayın ve eksi ise başlangıç lotu ile başlayın,

daha sonra art arda kaybedilen işlemlerin sayısını göz önünde bulundurur ve artan hacimle ters yönde açarız.

Bu, Avalanche'ın ağ versiyonudur ( aynı adı taşıyan şubeye bakın), yani. piyasa emri kapatılır (konum artan hacimlerde tersine çevrildiğinde) ve tamamlama planına bağlı olarak daha büyük hacimlerde karşı piyasa emri açılır. İşte benim çalışma kod parçam. Benzer bir expa algoritmanız varsa ihtiyaçlarınıza göre düzenleyin. Sorunuzdan gerçekten bir şey anlamadım. Durum ne olursa olsun, "Herhangi bir acemi sorusu ..." şubesine ilgi duyabilirsiniz, sorunuzu daha ayrıntılı olarak açıklayın, aksi takdirde hiçbir şey (en azından benim için) net değil - hiç.

   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям
   datetime 
  Time_at_History_Current = 0 ,
  Time_at_History_Previos = 0 ;      
   if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;              
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 ) 
                   break ;
               }
            }
         }
      }
   }
 //Print("Iteration at History = ",  Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS),
 //      " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
       
     //-----------------------------------------------------расчет динамического канала----------------------------    
     if ( Symbol () == "GBPJPY" || Symbol () == "EURJPY" || Symbol () == "USDJPY" || Symbol () == "CHFJPY" ||   Symbol () == "NZDJPY" )  
       // || Symbol() == "XAUUSD" || Symbol() == "XAGUSD" || Symbol() == "EURGBP")   StopLossPips = StopLoss;    // т.к. волатильность (по АТР) другая (выше)
         {                 
           channel = ( iATR ( Symbol (), PERIOD_D1 ,Period_ATR, 1 )* 1000 )*Mul_Sl;                 
           StopLossPips = NormalizeDouble (channel, 0 );                                                                                                         
         }       
     else
         {                 
           channel = 10 * ( iATR ( Symbol (), PERIOD_D1 ,Period_ATR, 1 )* 10000 / 3 )*Mul_Sl;                 
           StopLossPips = NormalizeDouble (channel, 0 );                                                                                                         
         }               
   TakeProfitPips= NormalizeDouble (StopLossPips*Mul_TP, 0 );   // расчет уровня тейка для всех инструментов по заданному значению динамического стопа        
                          
   // ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for ( int orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ; // если ордер не выбран, то идем на следующий открытый
       if ( OrderCloseTime ()!= 0 ) continue ;                     // если тикет принадлежит закрытому ордеру, то берем следующий открытый
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != MagicNumber)) continue ;
      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера          
           if (ticket> 0 )                                     // Если позиция открылась
              {
                 while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                 Sleep ( 100 );                                 
                 double OpenPrice= OrderOpenPrice ();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                 if (orderType == OP_BUY) 
                   {                
                     V_StopLossPips = NormalizeDouble (OpenPrice  - (StopLossPips * Point ), Digits );
                     V_TakeProfitPips = NormalizeDouble (OpenPrice + (TakeProfitPips * Point ), Digits );
                   }
            
                 if (orderType == OP_SELL) 
                   {        
                     V_StopLossPips = NormalizeDouble (OpenPrice  + (StopLossPips * Point ), Digits );
                     V_TakeProfitPips = NormalizeDouble (OpenPrice - (TakeProfitPips * Point ), Digits );
                   }   
                            
              }
             
     // Проверка на предельную просадку      
       double loss = - ((orderProfit * 100.0 ) / AccountBalance ());
       if (loss > MaxLoss)
      {
         Print ( "MaxLoss" );
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return ( 0 );
      }
    
       // Проверка закрытия открытой позиции (ордера) по стоп-лоссу           
       if ( V_StopLossPips != 0 )
        {
           if (orderType == OP_BUY && Bid <=  V_StopLossPips)  { CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips); }             
           if ( OrderType ()== OP_SELL && Ask >=  V_StopLossPips){ CloseAllOrders(MagicNumber); Print ( "V_StopLossPips закрываем по сл = " , V_StopLossPips); }  
        }         
        
         // Проверка закрытия открытой позиции (ордера) по тейку        
         if ( V_TakeProfitPips != 0 && MathAbs (orderProfit) > MathAbs (Sum_Loss))
        {
           if (orderType == OP_BUY && Bid >=  V_TakeProfitPips)  { CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips); }             
           if ( OrderType ()== OP_SELL && Ask <=  V_TakeProfitPips){ CloseAllOrders(MagicNumber); Print ( "V_TakeProfitPips закрываем по ТР = " , V_TakeProfitPips); }  
        }        
      
      
       // Если тралить, то с соответствующего номера итерации при выполнении НЕОБХОДИМОГО УСЛОВИЯ соответствующим 
       // выбранному видом трала      
      
       if (UseTrailing== 1 ) if ((Iteration >= k)&& ( MathAbs (orderProfit) > ( MathAbs (Sum_Loss))))
         switch (type)
          {
           case 0 :   // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов)
                   if (orderType == OP_BUY)  SampleTrailing_texbook ( 0 , V_StopLossPips, V_TakeProfitPips); // если бай
                   if (orderType == OP_SELL) SampleTrailing_texbook ( 1 , V_StopLossPips, V_TakeProfitPips); // если селл
                   break ;
           //трал по фракталам + отступ (Indent)
           case 1 : TrailingByFractals_LAVINA(ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break ; 
             //трал по теням N свечей + отступ (Indent)       
           case 2 : TrailingByShadows  (ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss);   break ;   
          }           
       

not Şu anda ellerinden yemek yediğim tüm savaş robotumu benden alacaksın. Eylül 2010'dan beri aralıklı olarak üzerinde çalışıyorum ve ilgili algoritmalara ulaşıyorum. Şubeye bakın - Çığ.

 

Fragmandaki kodun devamı, çünkü büyük boy:

 
     
Dosyalar:
itdakxijrxj.mq4  11 kb
 
Roman. :

Evet. Bu benim kodum. Flip martin'imde kullandığımı size daha önce şöyle yazmıştım:

Son anlaşma (pozisyon) bir artı ile kapatılmışsa, çevirme sayısını (Yineleme) sıfırlayın ve eksi ise başlangıç lotu ile başlayın,

daha sonra art arda kaybedilen işlemlerin sayısını göz önünde bulundurur ve artan hacimle ters yönde açarız.

Bu, Avalanche'ın ağ versiyonudur ( aynı adı taşıyan şubeye bakın), yani. piyasa emri kapatılır (konum artan hacimlerde tersine çevrildiğinde) ve tamamlama planına bağlı olarak daha büyük hacimlerde karşı piyasa emri açılır. İşte benim çalışma kod parçam. Benzer bir expa algoritmanız varsa ihtiyaçlarınıza göre düzenleyin. Sorunuzdan gerçekten hiçbir şey anlamadım. Durum ne olursa olsun, "Herhangi bir acemi sorusu ..." şubesine ilgi duyabilirsiniz, sorunuzu daha ayrıntılı olarak açıklayın, aksi takdirde hiçbir şey (en azından benim için) net değil - hiç.

not Şu anda ellerinden yemek yediğim tüm savaş robotumu benden alacaksın. Eylül 2010'dan beri aralıklı olarak üzerinde çalışıyorum ve ilgili algoritmalara ulaşıyorum. Şubeye bakın - Çığ.


"Herhangi bir acemi sorusu" şubesine zaten değindim ve sessizlik var.

Durum şu ki, bu kod bir anlaşmayı kayıpla kapattığında, eksi bakiyeyi hatırlar ve bir artı ile bir anlaşmayı kapattığında ve aynı zamanda artı bakiyeden daha az olduğunda, Sum_Loss'u sıfırlar ve ihtiyacım var sıfırlamak için değil, biçmek için.

yani, şimdi şöyle çalışıyor:

kapalı bir emri kontrol eder, eğer kapalı bir emrin karı sıfırdan azsa, bu kar Sum_Loss'a eklenir ve açık bir anlaşmanın karı Sum_Loss'u geçene (daha fazla olacak) kadar, anlaşmaya ulaşıldığında, anlaşma kapatılır ve Sum_Loss sıfırlanır ve döngü yeniden başlar.

Ve ihtiyacım var:

emir kırmızı ile kapandı, negatif karı Sum_Loss'a eklendi, sonra bir sonraki işlem pozitif bir karla kapandıysa, Sum_Loss miktarını karlı kardan alınan miktar kadar düşürürüz, bu da bir sonraki açık sipariş Sum_Loss'un alacağı anlamına gelir daha küçük bir miktarla ve siparişlerden elde edilen kâr Sum_Loss'tan daha büyük olana kadar böyle devam eder ve ardından Sum_Loss'u sıfırlar ve yeni bir döngü başlatırız.

toplam_kayıp = 0;

1. kapalı emir: kar (-50) < 0

Sum_Loss + kar (Sum_Loss + (-50))

Toplam_Kayıp = -50;

2. kapalı emir: kar(+40) > 0 ve Sum_Loss < 0

Sum_Loss + kar (Sum_Loss + 40)

Toplam_Kayıp = -10

 
belck :

1. "Herhangi bir acemi sorusu" şubesine zaten değindim ve sessizlik var.

Durum şu ki, bu kod bir anlaşmayı kayıpla kapattığında, eksi bakiyeyi hatırlar ve bir artı ile bir anlaşmayı kapattığında ve aynı zamanda artı bakiyeden daha az olduğunda, Sum_Loss'u sıfırlar ve ihtiyacım var sıfırlamak için değil, biçmek için.

2. yani, şimdi şöyle çalışıyor:

kapalı bir emri kontrol eder, eğer kapalı bir emrin karı sıfırdan azsa, bu kar Sum_Loss'a eklenir ve açık bir anlaşmanın karı Sum_Loss'u geçene (daha fazla olacak) kadar, anlaşmaya ulaşıldığında, anlaşma kapatılır ve Sum_Loss sıfırlanır ve döngü yeniden başlar.

3. ama ihtiyacım var:

emir kırmızı ile kapandı, negatif karı Sum_Loss'a eklendi, sonra bir sonraki işlem pozitif bir karla kapandıysa, Sum_Loss miktarını karlı kardan alınan miktar kadar düşürürüz, bu da bir sonraki açık sipariş Sum_Loss'un alacağı anlamına gelir daha küçük bir miktarla ve siparişlerden elde edilen kâr Sum_Loss'tan daha büyük olana kadar böyle devam eder ve ardından Sum_Loss'u sıfırlar ve yeni bir döngü başlatırız.

toplam_kayıp = 0;

1. kapalı emir: kar (-50) < 0

Sum_Loss + kar (Sum_Loss + (-50))

Toplam_Kayıp = -50;

2. kapalı emir: kar(+40) > 0 ve Sum_Loss < 0

Sum_Loss + kar (Sum_Loss + 40)

Toplam_Kayıp = -10

1. Tekrar iletişime geçin - orada insanlar kesinlikle yardımcı olacaktır ... kodunuzu o şubeye gönderdikten sonra ... (nedir)

2. Bu doğru, çünkü. bu temel Çığ algoritmasıdır.

3. Bütün bunlar ve acemi dalında bu algoritma için kodunuzla boyayın. İnsanlar düzeltecek. MKL4'e kendiniz tutarlı ve sakin bir şekilde kod yazmaya başlayın.

Kendi başınıza baş edemiyorsanız, beşinci forumdaki "İş" bölümüne başvurun - orada yemek için yazıyorlar ...

SADECE kişisel bir çıkar varsa, kod sıfırdan ücretsiz olarak yazılacaktır!

Her şey.

 

Nefes alabilirsin... :-)

Bu sefer sipariş paketleri... :-) kârla kapandı!

Baykuşlar DoublePlus ve vse_dlya_sela_J_OsMA_kh + versiyonum (ayrıca aracın açıklamasıyla birlikte) ayarlarla - şubede.

 
Roman. :

Nefes alabilirsin... :-)

Bu sefer sipariş paketleri... :-) kârla kapandı!

Baykuşlar DoublePlus ve vse_dlya_sela_J_OsMA_kh + versiyonum (ayrıca aracın açıklamasıyla birlikte) ayarlarla - şubede.


Kişisel olarak nasıl programlanacağını biliyor musun?

Programlamada kötüyüm.

yine de kodu tamamlamama yardım edebilir misin?

 
Roman. :

Nefes alabilirsin... :-)

Bu sefer sipariş paketleri... :-) kârla kapandı!

Ve lotların kârdan önce eklenmediğine pişman mısınız? :))
 
belck :

Programlamada kötüyüm.

yine de kodu tamamlamama yardım edebilir misin?

Kendinizi boğmazsınız - mql5.com'daki "İşler" servisiyle iletişime geçin - tüm kaprislerinizi çabucak gerçekleştireceklerdir.