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

 
test cihazının farklı zaman dilimlerindeki göstergeleri hesaba katması nasıl sağlanır ve bu mümkün mü?
 
vilard :
test cihazının farklı zaman dilimlerindeki göstergeleri hesaba katması nasıl sağlanır ve bu mümkün mü?
Test cihazındaki göstergeyi dikkate almak ne anlama geliyor? (1) Görselleştirme sırasında farklı bir zaman diliminin göstergesini görüntülemek mümkün mü veya (2) EA kodunda, gösterge işlevinde, değeri farklı bir zaman dilimi için hesaplamak gerekli mi?
 
vilard :
test cihazının farklı zaman dilimlerindeki göstergeleri hesaba katması nasıl sağlanır ve bu mümkün mü?

mümkün: https://docs.mql4.com/en/indicators/icustom

https://docs.mql4.com/en/constants/timeframes

 

EA, 1 ve 2 endeksli çubuklar için sinyaller üretmek üzere tasarlanmıştır (yani, yeni bir çubuk açıldığında açık ve kapalı emirler).

Test cihazında, OrderClose için dönüşümlü olarak 138 ve 4051 (bilete yemin ediyor gibi görünüyor) hataları veriyor.

Bu sorunu çözmeye yardım edin, lütfen.

   if (Mas_Ord_New[ 0 ][ 0 ]!= 0 )
    {
     if (Signal== 2 )
      {
         for (i= 0 ; i<=Mas_Ord_New[ 0 ][ 0 ]; i++)
         {
           ticket=Mas_Ord_New[i][ 4 ];
           lts=Mas_Ord_New[i][ 5 ];
           Ans= OrderClose (ticket,lts,Bid, 5 );
           if (Ans==false) 
           Alert ( "Закрыть BUY " ,ticket, " не удалось. Ошибка: " , GetLastError ());
         }
      }
     if (Signal== 3 )
      {
         for (i= 0 ; i<=Mas_Ord_New[ 0 ][ 0 ]; i++)
         {
           ticket=Mas_Ord_New[i][ 4 ];
           lts=Mas_Ord_New[i][ 5 ];            
           Ans= OrderClose (ticket,lts,Ask, 5 );
           if (Ans==false) 
             Alert ( "Закрыть SELL " ,ticket, " не удалось. Ошибка: " , GetLastError ());
         }       
      }
    }

 // Функция из учебника

int Terminal()
 {
   int Qnt= 0 ;
   
   ArrayCopy (Mas_Ord_Old, Mas_Ord_New); // Сохранение информации
   Qnt= 0 ; // Обнуление счетчика
   ArrayInitialize (Mas_Ord_New, 0 );   // Обнуление массива
   ArrayInitialize (Mas_Tip, 0 );   // Обнуление массива
   
   for ( int n= 0 ; n<= OrdersTotal (); n++)
    {
       if (( OrderSelect (n,SELECT_BY_POS)==true) &&
          ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==Magic))
       {
         Qnt++;
         Mas_Ord_New[Qnt][ 1 ]= OrderOpenPrice ();
         Mas_Ord_New[Qnt][ 2 ]= OrderStopLoss ();
         Mas_Ord_New[Qnt][ 3 ]= OrderTakeProfit ();
         Mas_Ord_New[Qnt][ 4 ]= OrderTicket ();
         Mas_Ord_New[Qnt][ 5 ]= OrderLots ();
         Mas_Tip[ OrderType ()]++;
         Mas_Ord_New[Qnt][ 6 ]= OrderType ();
         Mas_Ord_New[Qnt][ 7 ]= OrderMagicNumber ();
         if ( OrderComment ()== "" )
            Mas_Ord_New[Qnt][ 8 ]= 0 ;
         else
            Mas_Ord_New[Qnt][ 8 ]= 1 ;
       }
    }
   Mas_Ord_New[ 0 ][ 0 ]=Qnt;
   return ;
 }
 
silhouette :

EA, 1 ve 2 endeksli çubuklar için sinyaller üretmek üzere tasarlanmıştır (yani, yeni bir çubuk açıldığında açık ve kapalı emirler).

Test cihazında, OrderClose için dönüşümlü olarak 138 ve 4051 (bilete yemin ediyor gibi görünüyor) hataları veriyor.

Bu sorunu çözmeye yardım edin, lütfen.

Bir pozisyonu kapatmak için aşağıdaki yapıyı deneyin:

 int err;
// ---
if (...) // условие закрытия позиции
{   if ( OrdersTotal ()> 0 )
   {   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
      {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
         {   // фильтрация позиции по текущему символу:
             if ( OrderSymbol ()!= Symbol ()) continue ;
             // фильтрация позиции по магик-номеру:
             if ( OrderMagicNumber ()!=MagNum) continue ;
             // ... можно и другие фильтры поставить.
             // --- закрытие позиции Buy.
             if ( OrderType ()==OP_BUY)
             // перед открытием или закрытием позиции
             // обновляйте котировки с помощью RefreshRates()
             // дабы избежать устаревание запрошенной цены,
             // возможной причины ошибки 138
            {   RefreshRates (); 
               OrderClose ( OrderTicket (), OrderLots (),Bid, 30 );
               err= GetLastError ();
               if (err> 0 )   Alert ( "Ошибка при закрытии позиции Buy (" ,err, ")." );
               if (err== 0 ) Alert ( "Позиция Buy закрыта успешно." );
               err= 0 ; return ( 0 );
            }
             // --- закрытие позиции Sell.
       else    if ( OrderType ()==OP_SELL)
            {   RefreshRates ();
               OrderClose ( OrderTicket (), OrderLots (),Ask, 30 );
               err= GetLastError ();
               if (err> 0 )   Alert ( "Ошибка при закрытии позиции Sell (" ,err, ")." );
               if (err== 0 ) Alert ( "Позиция Sell закрыта успешно." );
               err= 0 ; return ( 0 );
            }
   }  }  }
}
 
chief2000 :
USD/JPY


Teşekkür ederim
 
Roman. :


0.01 - NDD sent hesabı . TP ve SL = 0.

Her yer aynı.

4'ünde - döviz çiftlerinde - şüphesiz her şey algoritmaya göre test edilir.

Alplerde - altın - algoritmaya göre test edilir.

Şu ana kadar sadece para birimlerinde 4. sırada çalışan GRAIL'ime metal eklemek istiyorum.


Yani, para birimlerinde sorun yok mu?
 
Vinin :

Yani, para birimlerinde sorun yok mu?


Evet. Soru yok.

Viktor İvanoviç, kalbimin derinliklerinden teşekkür ederim, önde gelen sorularınızda kendim çözdüm.

4. olarak, NDD cent'inde metal yok, sadece para birimleri, bu nedenle test ederken 131 numaralı hatayı veriyor - hacim doğru değil. Bunu bilmiyordum.

Altın ve gümüş için Alplerdeki parametreleri optimize etmeye başladı bile.

 
paladin80 :

Bir pozisyonu kapatmak için aşağıdaki yapıyı deneyin:


Teşekkürler, işe yaradı!
 

Lütfen bana örneğin bir banner'ın HTML kodunu nasıl ekleyeceğimi söyler misiniz?