[Arşivle!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 2. - sayfa 462

 
tol64 :


Teşekkür ederim. Çok anlaşılır. Bu şekilde açıklarsan herkes anlayacaktır.)))

Bir soru daha. Aramada, sorunun birçok benzer varyantını buldum, ancak sorum biraz farklı sorulacak.))

Grafik yanlış hizalaması. "Otantik ???" görmek için Sonuç olarak, zaman dilimlerini sürekli olarak yeniden hesaplamak zorundayım. Yani logda bu konuda hatalar olduğunu görürsem alıntı arşivine gidip tüm zaman dilimlerini yeniden hesaplıyorum. Test cihazında örneğin, kontrol noktalarına göre bir test yapıyorum. Her şey yolunda. O zaman oluşan çubuklar tarafından varsayalım. Her şey yolunda. Ve şimdi, kontrol noktaları üzerinde tekrar bir test yaparsak, günlükteki grafikler arasındaki tutarsızlığı tekrar gözlemlerim. Bu ne...? ))) Bu talihsizliğe karşı bir şey var mı?


IMHO, sadece iki test modeli kullanın - ya "Tüm keneler ..." veya " Açılış fiyatlarında ..." (bunun için baykuşta yeni bir çubuk oluşumu üzerinde kontrolü organize etmek gerekir) - bunlar " güvenilir" kesintiler - ve boşuna endişelenmeyin ... :-))) "Kontrol noktaları" buna değmez.

İhtiyacınız olan enstrümanla ilgili bir dakikalık hikaye indirin ve gidin... :-)))

 
Roman. :


IMHO, sadece iki test modeli kullanın - ya "Tüm keneler ..." veya "Açılış fiyatları ile ..." (bunun için baykuşta yeni bir çubuk oluşumu üzerinde kontrolü organize etmek gerekir) - bunlar "güvenilir" kesimler - ve boşuna endişelenmeyin ... :-))) "Kontrol noktaları" buna değmez.

İhtiyacınız olan araçla ilgili bir dakikalık hikaye indirin ve gidin... :-)))


Linkim kırık...

Benim yaklaşımımda, "Tüm onaylar" kullanırsanız, sonsuza kadar beklemeniz gerekir.)) 10 yıllık bir geçmişi test ediyorum. EA'da, koşullar ve izleme, oluşturulmuş çubuklara dayanmaktadır. Ancak her kene üzerinde kontrol edilmesi gereken bazı durumlar vardır. Örneğin, bir zararı durdur tetiklendiyse ve para yönetimi sisteminin durumuna göre parti büyüklüğü değiştiyse, partiyi değiştirmek için bekleyen tüm emirlerin yeniden yüklenmesi gerekir. Veya koşullar gerektiriyorsa, bekleyen siparişleri silin . Sonuçta, güvenilir olmak için her şey açık olmalıdır.)) Bu nedenle, prensipte, bazı tarihi parçaları tüm kenelerle karşılaştırdığım için kontrol noktaları benim için oldukça yeterli. Aynı.

Peki bu hataları ayrıştırmaya ve ortadan kaldırmaya yardımcı olacak ne var? Ve link kırık.

 
tol64 :


Linkim kırık...

Benim yaklaşımımda, "Tüm onaylar" kullanırsanız, sonsuza kadar beklemeniz gerekir.)) 10 yıllık bir geçmişi test ediyorum. EA'da, koşullar ve izleme, oluşturulmuş çubuklara dayanmaktadır. Ancak her kene üzerinde kontrol edilmesi gereken bazı durumlar vardır. Örneğin, bir zararı durdur tetiklendiyse ve para yönetimi sisteminin durumuna göre parti büyüklüğü değiştiyse, partiyi değiştirmek için bekleyen tüm emirlerin yeniden yüklenmesi gerekir. Veya koşullar gerektiriyorsa, bekleyen siparişleri silin. Sonuçta, güvenilir olmak için her şey açık olmalıdır.)) Bu nedenle, prensipte, bazı tarihi parçaları tüm kenelerle karşılaştırdığım için kontrol noktaları benim için oldukça yeterli. Aynı.

Peki bu hataları ayrıştırmaya ve ortadan kaldırmaya yardımcı olacak ne var? Ve link kırık.


yeniden yüklendi

ve burada.

 

Tünaydın bayanlar ve baylar.

Kodu çözmeme yardım et. Mantığını anlıyorum ama nasıl doğru bir şekilde tarif edeceğimi bilmiyorum. Vinç daha kısa.

İşte danışmanın bir parçası.

total=OrdersTotal();
if(total<1)

{

while (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2) //Пока это условие выполняется открывать только селл при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)<0.7))
{

OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
}

while (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2) // Пока это условие выполняется открывать только Бай при таком условии (iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3)&&(iRSI(NULL,0,rsi_period,PRICE_CLOSE,0)>0.3))
OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

}
}
}
}

Nasıl doğru bir şekilde düzenleneceğini söyle? Saygılarımla, Denis.

 


Teşekkür ederim. Bu bağlantılara göre ve sadece ihtiyacım olan en önemli şey söylenmedi.

Fiyatlar çevrimiçi olarak terminale ulaştığında, uyumsuzluk olmaması için zaman çerçeveleri periyodik olarak yeniden hesaplanmalıdır.

Çevrimdışı modda bu tür sorunlar ortaya çıkmaz.)) Bu ilk.

Şimdi ikincisi.

 for (pos = 0 ; pos < OrdersHistoryTotal(); pos++)
    {   OrderSelect (pos,SELECT_BY_POS,MODE_HISTORY);
        ... работа с ордером ...  }

Bunu yaparsam, dosyaya yazma hatasız gerçekleşir. Yani, dosyadaki her şey istendiği gibi görünüyor. Bu konuda güvenle belirttiğiniz gibi yaparsam:

 for (pos = 0 ; pos < OrdersHistoryTotal() - 1 ; pos++)
    {   OrderSelect (pos,SELECT_BY_POS,MODE_HISTORY);
        ... работа с ордером ...  }

, daha sonra dosya yanlış yazılmıştır. Bireysel vakaların olduğu açıktır.)))

 
Yeniden planlandı.
smartemiy :

İyi günler, sevgili varlıklar.

Yardımınıza ihtiyacımız var bilenler!!!

danışmanda, bakiyenin düşüşü zaten% 20'ye ulaştıysa ticareti durduracağını ve bu rakamın değiştirilebileceğini nasıl belirtecek?

Belki forumda daha önce anlatılmıştır kusura bakmayın ben fark etmemiş olabilirim..

ŞİMDİDEN TEŞEKKÜRLER!

Mutlu ticaret!!!!!

 
granit77 :
Yeniden planlandı.


Örneğin, yani...

 extern int MaxLoss = 90 ;           // Максимально допустимая просадка в процентах от баланса

...     

static datetime prevtime = 0 ;       // по ценам открытия
bool IsExpertFailed = false;
bool IsExpertStopped = false;

      

//+------------------------------------------------------------------+
//| Старт робота                                                     |
//+------------------------------------------------------------------+

int init()
{
   if (Time[ 0 ] == prevtime)   return ( 0 );   //ждем нового бара
   prevtime = Time[ 0 ];                   //если появился новый бар , включаемся 

   IsExpertStopped = false;
   if (!IsTradeAllowed())
   {
       Comment ( "Необходимо разрешить советнику торговать" );
      IsExpertStopped = true;
       return ( 0 );
   }
      
   if (!IsTesting())
   {
       if (IsExpertEnabled())
      {
         Comment ( "Советник запустится следующим тиком" );
      }
       else 
      {
         Comment ( "Отжата кнопка \"Разрешить запуск советников\"" );
      }
   }
 return ( 0 );
}
  
//+------------------------------------------------------------------+
//| Завершение работы робота                                         |
//+------------------------------------------------------------------+

int deinit()
{
   return ( 0 );
}
  
//+------------------------------------------------------------------+
//| Обработка сигнала                                                |
//+------------------------------------------------------------------+
  
int start()     // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
  
 
   if (Time[ 0 ] == prevtime)   return ( 0 );   //ждем нового бара
   prevtime = Time[ 0 ];                   //если появился новый бар , включаемся 

   if (IsExpertStopped)
   {
       Comment ( "Не удалось инициализировать советник!" );
       return ( 0 );
   }
   
   if (IsExpertFailed)
   {
       Comment ( "Критическая ошибка! Советник остановлен." );
       return ( 0 );
   }
   
         
   // ------------------------------------------------Ищем наш ордер---------------------------------

   int orderType;
   for ( int orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
   {
       if (! OrderSelect (orderIndex, SELECT_BY_POS))
      {
         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();
      
                              
                                  
                           if (orderType == OP_BUY) 
                              {
      
                               }
            
                             if (orderType == OP_SELL) 
                                 {
       
                                 }   
                            
                    }

       // Проверка на предельную просадку
      
       double loss = - ((orderProfit * 100.0 ) / AccountBalance());
       if (loss > MaxLoss)
      {
         Print ( "MaxLoss" );
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return ( 0 );
      }
    
              
       
}
   
 
Lütfen gecikmeyi nasıl ayarlayacağımı hatırlat. Orada milisaniye cinsinden mümkündür. Nasıl yazacağımı unutup duruyorum.
 
Ve hiç kimse tüm pozisyonları hızla kapatan bir senaryo önermez. Bir şey bulamıyorum. Kodu görmek istiyorum.
 
FOReignEXchange :
Ve hiç kimse tüm pozisyonları hızla kapatan bir senaryo önermez. Bir şey bulamıyorum. Kodu görmek istiyorum.
Arama elli parça isteyecektir.