MODE_HISTORY

 
Подскажите кто сталкивался с использованием (i,SELECT_BY_POS, MODE_HISTORY) в тестере.
datetime OpenTime;

Это глобальная переменная

int init()
  {
  OpenTime=TimeCurrent();
  return(0);
  }

Здесь я запоминаю время начала работы советника

double TotalOrderProfit=0;
double TotalOrderProfitM=0;
double TotalOrderProfitH=0;

for(i=OrdersTotal();i>=0;i--)                                              
   {
   if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==true) {                                
      if(OrderSymbol()==Symbol()) {
         //if(OrderMagicNumber()==MagicNumber) {
            if(OrderOpenTime()>=OpenTime) {
               if(OrderType()==OP_BUY)
                  {
                  TotalOrderProfitM=TotalOrderProfitM+Bid-OrderOpenPrice();
                  }
               if (OrderType()==OP_SELL)
                  {                                                   
                  TotalOrderProfitM=TotalOrderProfitM+OrderOpenPrice()-Ask;
                  }
               }
            }
         }
      }
  // }
  
for(i=OrdersTotal();i>=0;i--)                                            
   {
   if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true) {                                
      if(OrderSymbol()==Symbol()) {
         //if(OrderMagicNumber()==MagicNumber) {
            if(OrderOpenTime()>=OpenTime) {
               if(OrderType()==OP_BUY)
                  {
                  TotalOrderProfitH=TotalOrderProfitH+OrderStopLoss()-OrderOpenPrice();
                  }
               if (OrderType()==OP_SELL)
                  {                                                   
                  TotalOrderProfitH=TotalOrderProfitH+OrderOpenPrice()-OrderStopLoss();
                  }
               }
            }
         }
      }
   //}

TotalOrderProfit=TotalOrderProfitM+TotalOrderProfitH;
                     
if (TotalOrderProfit>TP || TotalOrderProfit<SL)
   {
   Print(TotalOrderProfit,"   ",TotalOrderProfitM,"   ",TotalOrderProfitH);Close_Delete();
   }

А здесь я сравниваю суммарный ТР и SL с заданными в настройках . Например открываю ордера по сигналу индикатора с StopLoss=20п, TakeProfit не ставлю. Закрываю все ордера когда общий профит > ТР, или убыток в пунктах > SL. С открытыми ордерами всё работает правильно. А с MODE_HISTORY

какая-то ерунда. В журнале TotalOrderProfitH одно значение, а в результатах сделок количество стопов в пересчёте на пункты другое. Из за этого советник заканчивает работу не по ТР, SL, а раньше.

Вопрос: Насколько корректно в тестере работает (i,SELECT_BY_POS, MODE_HISTORY) и TimeCurrent()? Проверять на DEMO как-то долго...

 
зачем такие сложности ? когда есть OrderProfit() и AccountProfit() ?
 

for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true) {

 

Большое спасибо!!!

А OrderProfit() считает в валюте депозита или в пунктах? (в справке об этом ничего нет). Мне надо в пунктах.

 
K.S >>:

Большое спасибо!!!

А OrderProfit() считает в валюте депозита или в пунктах? (в справке об этом ничего нет). Мне надо в пунктах.

В валюте.

 
Galaxy писал(а) >>

В валюте.

Потому такие сложности. Мне в пунктах удобней.

 
Integer:

for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY)==true) {

Спасибо))) И мне пригодилось. Индикатор - всё хорошо, а советник...:
 

Че то не работает((( Не то показывает - >

prH

:

double prH=0;
                  for(i=OrdersHistoryTotal()-1;i>=0;i--)
                     {
                        if(OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)==true)
                        
                           { 
                              prH=prH+OrderProfit();
                           }
                     }