[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 477

 

Si, par exemple, pendant 10 ans, le bénéfice sur un compte de trading était de 500% (les chiffres sont fictifs) -
comment calculer le bénéfice annuel moyen, en tenant également compte du fait que tous les bénéfices sont réinvestis ?
Merci !

 
frixer:
Bonjour à tous, bonne année. Je ne trouve pas de moyen de passer une commande une seule fois, si la condition est remplie après quoi la commande est passée, alors s'il y a une commande pour la deuxième fois, elle ne sera pas passée. Je voudrais vous donner un exemple.

L'exemple du manuel est votre cas.
 
atztek:

Si, par exemple, pendant 10 ans, le bénéfice sur un compte de trading était de 500% (les chiffres sont fictifs) -
comment calculer le bénéfice annuel moyen, en tenant également compte du fait que tous les bénéfices sont réinvestis ?
Merci !

La racine carrée de 6, puis soustraire 1 et multiplier par 100. Vous obtenez 19,62% par an.
 
Descendre
 
Roman.:

L'exemple du tutoriel est votre cas.

Je l'ai lu mais cela ne fonctionne pas avec mon algorithme et j'ai toujours des ordres sur chaque tick.

//+------------------------------------------------------------------+
//|                                                     trade v1.mq4 |
//|                                           |
//|                                                 frixer@yandex.ru |
//+------------------------------------------------------------------+

//--- input parameters
//extern int       Время;
//extern int       Input;
//extern int       SL;
//extern int       TP;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   int bars = 9; // количество баров
   int gmt = 16; // время входа
   double input = 0.0010; // вход на рынок
   double sl = 100; // уровень SL от высоты коробки в %
   double tp = 100;
   int lot=1;
   int topOrder,bottomOrder;
   if (Hour()==gmt) // проверяем свечу
      {
         double Shift_high = iHighest(NULL,PERIOD_H1,MODE_HIGH,bars,0); //поиск бара с максимальной ценой из bars начиная с 0-го бара
         double Shift_low  = iLowest (NULL,PERIOD_H1,MODE_LOW ,bars,0); //поиск бара с минимальной  ценой из bars начиная с 0-го бара
         double Price_high = iHigh   (NULL,PERIOD_H1,Shift_high); // присвоение переменной максимального значение цены
         double Price_low  = iLow    (NULL,PERIOD_H1,Shift_low);  // присвоение переменной минимального значение цены
         double Hinput = Price_high + input; // вверхняя граница входа
         double Linput = Price_low - input;  // нижняя граница входа
         double height_box = Price_high - Price_low; // высота коробки bars
         double volumeSL = height_box / 100 * sl; // уровень SL зависит от %
        
         
               topOrder=OrderSend(Symbol(),OP_BUYSTOP,lot,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"BUY",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }
      }
//----
   return(0);  
//----
   return(0);
  }
//+------------------------------------------------------------------+

J'ai essayé de cette manière (mon ami me l'a conseillé) mais cela ne fonctionne pas.

         int Orerov=0;
         int Orderov_all = OrdersTotal();                                              // всего ордеров в терминале
            for (int n = 0;n<Orderov_all;n++)                                             // начало цикла перебора ордеров
            {
            if(OrderSelect(n,SELECT_BY_POS)==TRUE)                                  // выбран первый в списке ордер
            if(Comm == OrderComment())                                                // условие совпадения комментария
               {
                Tip= OrderType();                                                    // тип      
                Cena=NormalizeDouble(OrderOpenPrice(),4);                           // цена      
                Ticket= OrderTicket();                                               // тикет     
                Stop=NormalizeDouble(OrderStopLoss(),4);                            // стоп-лосс
                LOT=NormalizeDouble(OrderLots(),1);                                 // размер лота
                Orderov=1;                                                          //
               }
             }
 
frixer:
Bonjour à tous, bonne année. Je ne trouve pas de moyen de passer une commande une seule fois, si la condition est remplie après quoi la commande est passée, alors s'il y a une commande pour la deuxième fois, elle ne sera pas passée. Si vous pouvez donner un exemple.

if (OrdersTotal() > 0) {
   return(0);
}
// Если установлен хоть один ордер, то никакой код после этого комментария уже не выполнится
 
Reshetov:
La racine de la dixième puissance de 6, puis soustraire 1 et multiplier par 100. Nous obtenons 19,62% par an.

Merci !

 
Reshetov:

Merci...
 

Bref, voici la question,

J'ai un indicateur multi-période.

Afin d'optimiser les calculs, j'utilise la boucle suivante



// TimeFrames[i] массив с периодами

for (i=0; i<NumTimeFrames; i++)

{
if (total_bars[i] != iBars(instrument, TimeFrames[i]) )
{

// тут вычисления индиктора

total_bars[i] = iBars(instrument, TimeFrames[i]);
}

}



Le problème principal est que l'iBars ne charge pas les prix des périodes autres que celle en cours...

toutes les astuces MQL comme IndicatorCounted et RefreshRates

ne fonctionnent que pour la période en cours, c'est-à-dire que iBars s'appuie sur l'historique et que l'historique n'est chargé qu'en changeant la période sur le graphique. Que faire ? MQL dispose-t-il d'un outil permettant de charger des barres d'autres périodes (différentes de la période actuelle) en arrière-plan ?


p.s. J'espère que je ne divague pas ((
 
palladin:

Le problème principal est que iBars ne charge pas les prix d'une période autre que la période actuelle....

Votre principal problème est que iBars ne charge pas les prix, mais le nombre de barres connues pour une période donnée. Et, comme je viens de le vérifier, il le fait tout à fait correctement à la fois dans le testeur et sur le graphique.
Raison: