[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 524

 
sss2019 :

Benim terminalimde danışman üç emir açar, bir noktada üç emri de kapatması gerekir, ancak nedense sadece ikisini kapatır, herhangi bir hata vermez.

Bu, anlaşmaları kapatması gereken parça

Sorunun ne olduğunu ve neden sadece iki anlaşmanın kapatıldığını anlamıyorum. Bana kimin bildiğini söyle.

 if (OrderSelect(i, SELECT_BY_POS) == false ) continue ;
 
Vinin :


Döngüyü farklı yapın


Gerçi bu da yardımcı olmadı. Döngüyü yeniden düzenlememek, devam ettirmemek yardımcı olmadı, sanki danışman kendi üç emrini görmüyor ve sadece ikisini siliyormuş gibi.

 
Döngü yeniden hesaplama yönünü değiştirin
 
Al ve kullan.
Dosyalar:
 
Bazen her şey çok anlaşılmaz, hiç mantıklı değil, bana öyle geliyor ki terminal ortamında da hatalar var.
 
sss2019 :
Bazen her şey çok anlaşılmaz, hiç mantıklı değil, bana öyle geliyor ki terminal ortamında da hatalar var.
Daha az görünmesi için, ders kitabını ve el kitabını inceleyerek başlamanız gerekir. Ardından forumda benzer soruların açıklamasını bulmaya çalışın.
 
sss2019 :

Danışmanın maksimum düşüşünü organize etmenin nasıl daha doğru olacağını söyleyin, çalışmayı durdurduğuna ulaştığında, kayıp miktarını biriktirecek statik bir değişken ayarlayabilir misiniz?

Danışmanın çalışmayı durdurması, ancak yeniden başlattıktan veya parametreleri değiştirdikten sonra tekrar çalışmaya başlaması gerekir.


Bir Expert Advisor'ı başlatırken, mevcut bakiyeyi statik bir değişkene kaydedebilirsiniz. Ve başlatma işlevinde, mevcut bakiyenin ilk bakiyeden yüzde kaçının düştüğünü kontrol edin, yüzde izin verilenden büyükse ticaret yasaktır. Bu kısaca, kodsuz. Yeniden başlatmanın ardından, Expert Advisor yeni başlangıç bakiyesini hatırlayacaktır...
 
MrSoros :

Expert Advisor'ı başlatırken, mevcut bakiyeyi statik bir değişkene kaydedebilirsiniz. Ve başlatma işlevinde, mevcut bakiyenin ilk bakiyeden yüzde kaçının düştüğünü kontrol edin, yüzde izin verilenden büyükse ticaret yasaktır. Bu kısaca, kodsuz. Yeniden başlatmanın ardından, Expert Advisor yeni başlangıç bakiyesini hatırlayacaktır...

Soruya girdin mi
 
MrSoros :

1. Expert Advisor'ı başlatırken, mevcut bakiyeyi statik bir değişkene kaydedebilirsiniz. Ve başlatma işlevinde, mevcut bakiyenin ilk bakiyeden yüzde kaçının düştüğünü kontrol edin, yüzde izin verilenden büyükse ticaret yasaktır. Bu kısaca, kodsuz.

2. Yeniden başlatmanın ardından, EA yeni başlangıç bakiyesini hatırlayacaktır...

1. Yapabilirsin. Bu seçeneğe sahibim (kodlu) - değişkenleri kendiniz başlatacaksınız:

 extern int MaxLoss = 90 ;           // Максимально допустимая просадка в процентах от баланса
int   orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                         // Номер ордера
double orderLots;                   // Lots   
double orderProfit;                 // Profit
double Price;                       // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double   TP;                         // Значение TakeProfit ордера
static datetime prevtime = 0 ;       // по ценам открытия
int start()
{  
   if (IsExpertStopped)
   {
       Comment ( "Не удалось инициализировать советник!" );
       return ( 0 );
   }
   
   if (IsExpertFailed)
   {
       Comment ( "Критическая ошибка! Советник остановлен." );
       return ( 0 );
   }
      Level_new= MarketInfo ( Symbol (),MODE_STOPLEVEL );    
 
   int orderCount = 0 ;  
       // ------------------------------------------------Учет ордеров только ЭТОГО ЭКСПА---------------------------

   int orderType;
   for (orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
     {  
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ;
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != magic))     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 ();
                    }
           // Проверка на предельную просадку      
       double loss = - ((orderProfit * 100.0 ) / AccountBalance ());
       if (loss > MaxLoss)
      {
         Print ( "MaxLoss" );
         CloseAllOrders(magic);
         IsExpertFailed = true;
         return ( 0 );
      }        
         
      orderCount++;                     // считаем ордера (не больше i)                   
     
    }   

2. Hayır. Bu EXPA'nın başlangıcından önceki denge seviyesini ilk kez hatırlamayacak. Bir değişkende sadece mevcut seviyeyi hatırlayacaktır

 AccountBalance ()

.Bu hesap için.

 

Güzel gün! Ondan önce Excel'de alıntıların doğru sunumu ile ilgili bir sorum vardı. Bu sorunun cevabını aldım bu pahalılık için teşekkürler. Şimdi bir sorum var, bunu (MQL5 ve dll olmadan) verinin birkaç para birimi için daha yüklenmesi için yapmak mümkün mü? Şematik görünüm aşağıda "..." yerine karşılık gelen tarih değerleri, kapanış fiyatı değerleri ve cari dönem gösterilmiştir.

Sorunun cevabının kodumda olası ayarlamaları içereceğini varsayıyorum. Kapanış fiyatlarının değerlerini tek tek yazan danışmanın mevcut fin kodunu dosyaya ekliyorum. alet.

 #property copyright "S.I.Shlikov"
#property link       ""
int init()  
  {
   string Name= Symbol ();
   int h= FileOpen ( Symbol ()+ "-" + Period ()+ ".csv" , FILE_CSV | FILE_WRITE | FILE_READ , ";" );
     if (h< 1 )
      {
       Print ( "Файл не найден : " , GetLastError ());
       return (false);
      }
   FileSeek (h, 0 , SEEK_END );
   FileWrite (h, "Date" ,Name, "Period" , Period ());
   FileClose (h);        
  }
int start()
  {
   int h= FileOpen ( Symbol ()+ "-" + Period ()+ ".csv" , FILE_CSV | FILE_WRITE | FILE_READ , ";" );
     if (h< 1 )
      {
       Print ( "Файл не найден : " , GetLastError ());
       return (false);
      }
   string Wtime= TimeToStr ( TimeCurrent (),TIME_DATE|TIME_MINUTES);
   FileSeek (h, 0 , SEEK_END );
   FileWrite (h,Wtime, NormalizeDouble (Close[ 0 ], Digits ));
   FileClose (h);   
   return ( 0 );
  }