[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 477

 

Если скажем за 10 лет прибыль на торговом счете составила 500% (цифры условные) -
как рассчитать среднегодовую прибыль, так же принимая во внимание что вся полученная прибыль реинвестировалась?
Спасибо!

 
frixer:
Здравствуйте всем, С Новым Годом. Ребят помогите не могу ни как сделать чтобы ордер ставился только один раз, если условие которое выполняется после чего ставиться ордер, нужно чтобы потом если есть ордер уже чтобы второй раз он не ставился. Если можно примером.

Пример из учебника - Ваш случай.
 
atztek:

Если скажем за 10 лет прибыль на торговом счете составила 500% (цифры условные) -
как рассчитать среднегодовую прибыль, так же принимая во внимание что вся полученная прибыль реинвестировалась?
Спасибо!

Корень десятой степени из 6, потом вычесть 1 и умножить на 100. Получим 19.62% в год.
 
moved down
 
Roman.:

Пример из учебника - Ваш случай.

Да читал но под мой алгоритм не получается все равно пихает ордера на каждом тике вот код

//+------------------------------------------------------------------+
//|                                                     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);
  }
//+------------------------------------------------------------------+

Можете набросать пример, буду очень благодарен, я попробовал таким способом (знакомый посоветовал) не получается

         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:
Здравствуйте всем, С Новым Годом. Ребят помогите не могу ни как сделать чтобы ордер ставился только один раз, если условие которое выполняется после чего ставиться ордер, нужно чтобы потом если есть ордер уже чтобы второй раз он не ставился. Если можно примером.

if (OrdersTotal() > 0) {
   return(0);
}
// Если установлен хоть один ордер, то никакой код после этого комментария уже не выполнится
 
Reshetov:
Корень десятой степени из 6, потом вычесть 1 и умножить на 100. Получим 19.62% в год.

Спасибо!

 
Reshetov:

Спасибо...
 

Вобщем вопрос такой,

Имею многопериодный индикатор.

для того, чтобы оптимизировать вычисления использую следующий цикл



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

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

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

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

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

}



Основная проблема в том, что iBars не загружает цены периода, отличного от текущего...

все уловки MQL типа IndicatorCounted и RefreshRates

Действуют только для текущего периода, т.е. iBars берет из истории, а история загружается только путем смены периода на графике. Что делать? Есть в MQL какой-то инструмент загрузки баров других периодов (отличных от текущего) в фоновом режиме?


п.с. надеюсь не сумбурно объяснил ((
 
palladin:

Основная проблема в том, что iBars не загружает цены периода, отличного от текущего...

Ваша основная проблема в том, что iBars загружает не цены, а количество известных баров для заданного периода. Причем, как я только что проверил, делает это вполне корректно и в тестере и на графике.
Причина обращения: