Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 08.10.17
piptrade piptrade ist offline
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 157
piptrade befindet sich auf einem aufstrebenden Ast
Standard OrderSend am Target einer bestehenden Position (ohne diese zu schließen)

Hallo, Liebe User-Gemeinde,
piptrade kommt wieder einmal nicht so recht weiter und hat da mal `ne Frage:

DIE SITUATION: Long- und Short-Conditions sind vorgegeben, eine erste Position eröffnet und
ein TP modifiziert. Da die alte Position erhalten werden soll, wird KEIN SL vorgegeben; - statt dessen soll bei "Close[0] < OrderOpenPrice()-6*100*Point" eine neue und zusätzliche Position (in Richtung der Losses-Bewegung) eröffnet werden. All das funktioniert reibungslos.

DAS PROBLEM: Die o.a. zusätzliche Positions-Eröffnung erfolgt nicht nur 1 x, sondern wiederholt sich perTick, so dass in kürzester Zeit 20 - 30 Positionen neu eröffnet sind !

DER LÖSUNGSANSATZ: Unter "void CheckOpen()" wurde die 1. Bedingung "if(OrderType()==OP_BUY" mit "... && OrderSHORT==false)" ergänzt und sollte damit jede "OrderSHORT=true" blockieren. - Leider funktioniert das nicht, wie gewünscht; - jetzt wird die neue Position gar nicht mehr geöffnet!

Zum besseren Veständnis hier die wesentlichen Code_Bestandteile:
Code:
//---
void CheckOpen()
// .....
// .....     
      //--- check order type 
      if(OrderType()==OP_BUY && OrderSHORT==false)
        { 
         if(Close[0] < OrderOpenPrice()-6*100*Point)
           {
            OrderSHORT=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MagicNumb_1,0,Red);
            OrderSHORT=true;
           }
         break;
        }
//---
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol --> and close, if TP
   if(CalculateCurrentOrders(Symbol())==0) CheckOpen();
      else                                 CheckTakeProfit();

//--- calculate open orders --> and opening a new position (Hedge against SL) 
   if(CalculateCurrentOrders(Symbol())!=0) CheckOpen();
      return;
  }
//----
Nochmals:
"void OnTick" stellt sicher, dass 1. eine erste Order erteilt wird - oder aber, wenn diese bereits besteht, - der TP zu checken ist. Zum 2. soll bei Erhalt der alten Position, die neue, zusätzliche Position, eröffnet werden. - Und das möglichst nur 1 x !

Um Wiederholungen der neuen Ordereröffnung auszuschließen, wurde unter "void CheckOpen()" als 1. vorgegeben, dass "OrderSHORT==false" sein muss. Es darf also keine neue Order erteilt worden sein, - und nur dann, - wird die neue Position eröffnet; - so weit, so gut.
Zum 2. wird NACH der neuen Ordererteilung festgelegt, dass ab jetzt die "OrderSHORT=true" ist. Damit sollte die o.a. Bedingung "OrderSHORT==false" nicht erfüllt sein und eine erneute Ordererteilung unterbunden werden !
Liegt ggf. hier der Gedankenfehler ?


Ich hoffe, dass alles soweit verständlich ist, habe trotzdem eine Art Ablaufchema sowie eine Chartdarstellung
beigefügt und würde mich über Eure Resonanz bzw. Hilfestellung sehr freuen.

LG. piptrade
Angehängte Grafiken
Dateityp: jpg HedgingAblaufSchema.jpg (177,2 KB, 7x aufgerufen)
Dateityp: jpg HegeTrailer.jpg (93,2 KB, 7x aufgerufen)