[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 477

 

例如,如果10年内一个交易账户的利润是500%(数字是名义上的) -
如何计算平均年利润,同时考虑到所有利润都是再投资?
谢谢你!

 
frixer:
大家好,新年快乐。我找不到任何方法只下一次订单,如果条件满足后下了订单,那么如果有第二次的订单就不会被下。我想给你举个例子。

课本上的例子 就是你的案例。
 
atztek:

例如,如果10年内一个交易账户的利润是500%(数字是名义上的) -
如何计算平均年利润,同时考虑到所有利润都是再投资?
谢谢你!

6的平方根,然后减去1再乘以100。你每年可以得到19.62%。
 
下移
 
Roman.:

教程中的例子 就是你的情况。

我读过它,但它不符合我的算法,我仍然在每个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);
  }
//+------------------------------------------------------------------+

我已经试过这种方式(我的朋友建议我),但它不起作用。

         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是否有一些工具可以在后台加载其他时期的条形图(与当前时期不同)?


p.s. 希望我没有胡言乱语(()。
 
palladin:

主要问题是,iBars不能加载除当前时间段以外的价格。

你的主要问题是,iBars 加载的不是价格,而是一个特定时期的已知条数。而且,正如我刚刚检查的那样,它在测试器和图表上都做得很正确。
原因: