Offenes Projekt - Tester-Optimierer im Haus - Seite 4

 
Ich habe die Handelsfunktion OrderClose() neu definiert, aber sie ist unvollständig, die Verarbeitung des TradeOrdersArray-Arrays ist unvollständig.
Der Quellcode ist hier verfügbar - http://forexsystems.ru/phpBB/viewtopic.php?p=4389#4389
Einige Dinge hinzugefügt, einige Dinge korrigiert...
//+------------------------------------------------------------------+
//| 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);
  
  }



Ich vermisse nicht meine ...

 
Ich wollte nur, dass Renat selbst einen Blick darauf wirft und den Fehler findet.

Tut mir leid, ich finde nur selten Zeit, das Forum zu besuchen - ich bin sehr stark ausgelastet.
Sobald der Druck nach der Veröffentlichung von MT4 nachlässt, werden wir weitere Diskussionen aufnehmen.
 
Rosh,
Fehler - einen Auftrag zu löschen ist nicht genug zu tun
      myOrdersTotal--;// уменьшили счетчик открытых ордеров
      pool_pos--;// уменьшили счетчик  в списке терминала


Renat,

Sobald der Druck nach der Veröffentlichung von MT4 nachlässt, werden wir weitere Gespräche führen.

GUT.

 
Mak, ich weiß, dass das Entfernen eines Auftrags "unvollständig" ist, ich wollte die Zähler erst gar nicht reduzieren, aber dann dachte ich - zwei Zeilen sind nicht so schwer einzufügen.
Was die Idee betrifft, sollten wir eine Schleife organisieren, um die Aufträge an den Anfang des Arrays zu verschieben und, wahrscheinlich, ArrayResize(). Wäre es eine Sammlung wie in Pascal, würde all dies mit einer einzigen Operation erledigt werden. Vielleicht gibt es jemanden, der dies tun möchte?
 
Ja, Hash-Arrays wären eine gute Idee.
Es geht schnell und einfach...
Sie müssen sie nicht selbst verfassen.
Wäre jemand daran interessiert?

Wie wäre es, wenn Sie die Aufträge nicht löschen, sondern nur das Kästchen ankreuzen, dass sie gelöscht wurden?
 
Nein, Sie müssen es löschen, sonst haben Sie später Probleme bei der Fehlersuche. Definitiv.
 
Ich habe gerade die Funktion "beendet".

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



Im Prinzip kann die Funktion DeleteOrder() von hier aus abgeleitet werden. Die Zahl der Fehler nimmt zu...

 
Ein bisschen Code hinzugefügt. Wenn Sie möchten, können Sie einen einfachen EA testen, indem Sie ein paar Zeilen hinzufügen.
Der Quellcode befindet sich an der gleichen Stelle - http://forexsystems.ru/phpBB/viewtopic.php?p=4574#4574
Der Autor möchte sich bei allen bedanken, die ihm bei der Erstellung dieses Snag... :)
 
Ich verstehe nicht, wie man es verwendet, posten Sie ein Beispiel mit einigen Experten, wenn es nicht schwierig ist...

	          
Grund der Beschwerde: