Open project - tester-optimiser in-house - page 4

 
I've made a redefinition of the OrderClose() trading function, but it's incomplete, processing of the TradeOrdersArray array is incomplete.
You can find the source code here - http://forexsystems.ru/phpBB/viewtopic.php?p=4389#4389
Some things added, some things corrected...
//+------------------------------------------------------------------+
//| Redefine OrderClose() function                       |
//+------------------------------------------------------------------+

bool funt_OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) 
  {
  if (CorrectClosePrice(TradeOrdersArray[ticket,0],price,myCurrentTime))&&((TradeOrdersArray[ticket,3]=myOP_BUY)||(TradeOrdersArray[ticket,3]=myOP_BUY))
      {
      ClosedOrdersArray[myHistoryTotal]=TradeOrdersArray[ticket,0];// записали иструмент
      ClosedOrdersArray[myHistoryTotal,1]=history_pool;// записали номер в истории
      ClosedOrdersArray[myHistoryTotal,2]=TradeOrdersArray[ticket,2];// записали номер тикета у брокера
      ClosedOrdersArray[myHistoryTotal,3]=TradeOrdersArray[ticket,3];// записали тип ордера
      ClosedOrdersArray[myHistoryTotal,4]=TradeOrdersArray[ticket,4];// записали размер ордера
//    ClosedOrdersArray[myHistoryTotal,4]=lots;//??? альтернативный вариант, надо доработать
      ClosedOrdersArray[myHistoryTotal,5]=TradeOrdersArray[ticket,5];// записали цену открытия
      ClosedOrdersArray[myHistoryTotal,6]=TradeOrdersArray[ticket,6];// записали проскальзывание в пунктах
//    ClosedOrdersArray[myHistoryTotal,6]=;slippage //??? альтернативный вариант, можно еще MathCeil (double (slippage*MathRand()/32767))
      ClosedOrdersArray[myHistoryTotal,7]=TradeOrdersArray[ticket,7];// записали stoploss
      ClosedOrdersArray[myHistoryTotal,8]=TradeOrdersArray[ticket,8];// записали takeprofit
      ClosedOrdersArray[myHistoryTotal,9]=TradeOrdersArray[ticket,9];// записали комментарии
      ClosedOrdersArray[myHistoryTotal,10]=TradeOrdersArray[ticket,10];// записали MagicNumber
      ClosedOrdersArray[myHistoryTotal,11]=TradeOrdersArray[ticket,11];// записали дату открытия ордера
      ClosedOrdersArray[myHistoryTotal,12]=myCurrentTime;// записали дату закрытия ордера
      ClosedOrdersArray[myHistoryTotal,13]=myCurrentPrice(TradeOrdersArray[ticket,3]);// записали дату закрытия ордера
      ClosedOrdersArray[myHistoryTotal,14]=TradeOrdersArray[ticket,14];// записали профит по закрытому ордеру
//-------------------------------------------------------------------------------  
// здесь блок по удалению ордера из массива  TradeOrdersArray[][]
      myOrdersTotal--;// уменьшили счетчик открытых ордеров
      pool_pos--;// уменьшили счетчик  в списке терминала
//-------------------------------------------------------------------------------  
      DrawCloseArrowOnChart(TradeOrdersArray[ticket,0],myCurrentTime,price,Color);
      DeltaBalance=DeltaBalance+ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени баланса на текущем баре
      DeltaProfit=DeltaProfit-ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени профита на текущем баре
      myHistoryTotal++;
      return(true);
      }
      else return(false);
  
  }



Not missing my ...

 
I just wanted Renat to take a look for himself and find the error.

Sorry, I rarely find time to look at the forum - very heavy workload.
As soon as the pressure is off after the release of MT4, we'll take up further discussions.
 
Rosh,
error - to delete an order is not enough to do
      myOrdersTotal--;// уменьшили счетчик открытых ордеров
      pool_pos--;// уменьшили счетчик  в списке терминала


Renat,

As soon as the pressure is off after the release of MT4, we will engage in further discussions.

OK.

 
Mak, I know that removing an order is "incomplete", I didn't even want to reduce the counters at first, but then I thought - two lines are not so hard to insert.
As for the idea, we should organize a loop to move the orders to the beginning of the array and, probably, ArrayResize(). If it were Collections as in Pascal, all this would be done by a single operation. Maybe there is someone who would like to do it?
 
Yes, hash arrays would be a good idea.
It's quick and easy...
You don't have to write them yourself.
Would anyone be interested?

How about not deleting orders, but ticking the box that they have been deleted?
 
No, you have to delete it, otherwise you'll have trouble debugging it later. Definitely.
 
Just "finished" the function.

//+------------------------------------------------------------------+
//| Redefine OrderClose() function                       |
//+------------------------------------------------------------------+

bool funt_OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) 
  {
  int i,k,pointer_pool;
  if (CorrectClosePrice(TradeOrdersArray[ticket,0],price,myCurrentTime))&&((TradeOrdersArray[ticket,3]=myOP_BUY)||(TradeOrdersArray[ticket,3]=myOP_BUY))
      {
      ClosedOrdersArray[myHistoryTotal]=TradeOrdersArray[ticket,0];// записали иструмент
      ClosedOrdersArray[myHistoryTotal,1]=history_pool;// записали номер в истории
      ClosedOrdersArray[myHistoryTotal,2]=TradeOrdersArray[ticket,2];// записали номер тикета у брокера
      ClosedOrdersArray[myHistoryTotal,3]=TradeOrdersArray[ticket,3];// записали тип ордера
      ClosedOrdersArray[myHistoryTotal,4]=TradeOrdersArray[ticket,4];// записали размер ордера
//    ClosedOrdersArray[myHistoryTotal,4]=lots;//??? альтернативный вариант, надо доработать
      ClosedOrdersArray[myHistoryTotal,5]=TradeOrdersArray[ticket,5];// записали цену открытия
      ClosedOrdersArray[myHistoryTotal,6]=TradeOrdersArray[ticket,6];// записали проскальзывание в пунктах
//    ClosedOrdersArray[myHistoryTotal,6]=;slippage //??? альтернативный вариант, можно еще MathCeil (double (slippage*MathRand()/32767))
      ClosedOrdersArray[myHistoryTotal,7]=TradeOrdersArray[ticket,7];// записали stoploss
      ClosedOrdersArray[myHistoryTotal,8]=TradeOrdersArray[ticket,8];// записали takeprofit
      ClosedOrdersArray[myHistoryTotal,9]=TradeOrdersArray[ticket,9];// записали комментарии
      ClosedOrdersArray[myHistoryTotal,10]=TradeOrdersArray[ticket,10];// записали MagicNumber
      ClosedOrdersArray[myHistoryTotal,11]=TradeOrdersArray[ticket,11];// записали дату открытия ордера
      ClosedOrdersArray[myHistoryTotal,12]=myCurrentTime;// записали дату закрытия ордера
      ClosedOrdersArray[myHistoryTotal,13]=myCurrentPrice(TradeOrdersArray[ticket,3]);// записали дату закрытия ордера
      ClosedOrdersArray[myHistoryTotal,14]=TradeOrdersArray[ticket,14];// записали профит по закрытому ордеру
//-------------------------------------------------------------------------------  
// здесь блок по удалению ордера из массива  TradeOrdersArray[][]
      i=0;
      while (!TradeOrdersArray[i,1]==ticket) {i++}; pointer_pool=i; // нашли ордер по списку терминала
      for (i=pointer_pool;i<=pool_pos;i++) // перемещение ордеров от конца к удаляемому ордеру (фактически мы его стираем)
         {
         for (k=0;k<=14;k++) {TradeOrdersArray[i,k]=TradeOrdersArray[i+1,k]}// копирование параметров ордера
         }
      for (k=0;k<=14;k++)
         {
          TradeOrdersArray[myOrdersTotal,k]=NULL; // скорее всего некорректное "зануление"        
         }
      myOrdersTotal--;// уменьшили счетчик открытых ордеров
      pool_pos--;// уменьшили счетчик  в списке терминала
//    ArrayResize(TradeOrdersArray,pool_pos)   ; // не неуверен, что эта процедура не приведет к краху массива
     
//-------------------------------------------------------------------------------  
      DrawCloseArrowOnChart(TradeOrdersArray[ticket,0],myCurrentTime,price,Color);
      DeltaBalance=DeltaBalance+ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени баланса на текущем баре
      DeltaProfit=DeltaProfit-ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени профита на текущем баре
      myHistoryTotal++;
      return(true);
      }
      else return(false);
  
  }



In principle, the DeleteOrder() function can be derived from here. The number of errors is accumulating...

 
Added a bit of code. If you want, you can test a simple EA by adding a couple of lines.
Source code is in the same place - http://forexsystems.ru/phpBB/viewtopic.php?p=4574#4574
The author would like to thank everybody for their help in writing this snag... :)
 
I don't understand how to use it, post an example with some experts, if it's not difficult...

	          
Reason: