Thema: Hedge EA
Einzelnen Beitrag anzeigen
  #7 (permalink)  
Alt 27.04.20
TogoTiger TogoTiger ist offline
Mitglied
 
Registriert seit: Dec 2015
Beiträge: 85
TogoTiger befindet sich auf einem aufstrebenden Ast
Standard

Nein, deine Vermutung mit 'Ueberlagerung' ist totaler Blödsinn.
Der Fehler liegt da:
if(OrderSelect(TiBuy,SELECT_BY_TICKET,MODE_HISTORY))

MODE_HISTORY geht nur bei SELECT_BY_POS

Steht auch so in der Doku:

pool=MODE_TRADES

[in] Optional order pool index. Used when the selected parameter is SELECT_BY_POS. It can be any of the following values:

MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).


So wie du jetzt abfragst, wird Lotsize bei jedem Tick erhöht, sobald OrderProfit > 0 ist.

Auch wenn du das korrigierst, wird Lotsize nie erhöht, weil deine Ticketnummer jeweils die aktuelle TicketNr ist, nicht die der letzten Order. Du musst das dann machen, wenn du feststellst, dass deine Order in den TP gelaufen ist, nicht nachdem du eine neue Order eröffnet hast. Wie du das genau machst, musst jetzt aber selber herausfinden. Ich habe wenig Lust, dir diesen EA so zu programmieren, dass er läuft. Zumal die Strategie eh nicht funktioniert.

Ich habs soeben nochmals laufen lassen, diesmal mit EURUSD. Er ist immer im Markt drin, aber natürlich nur mit Lotsize 0.01.

Hast du eingebaut, was ich dir empfohlen habe? Mach doch mal ein paar Print ins Porgramm. Oder weisst du ev. nicht, wie man solche Prints sieht:
Ansicht / Terminal, dann unten Experten anklicken und dann siehst du schön, was abläuft, auch, warum er keine Order eröffnet.

So läufts jedenfalls, und es macht auch immer Orders auf.
Wenn du den Experten startest, macht er beim ersten Tick BuyOrder auf, beim zweiten Tick SellOrder. Willst du das so?
Nochmals: Ueberleg dir genau, was du wann machen willst, und mach nicht bei jedem Tick Dinge, die du nicht willst und Anderes nicht, was du gerne möchtest. Kleiner Tip: nach return(TiBuy); gehts erst beim nächsten Tick weiter.

Code:
//=============================================================================================================
// O P E N   O R D E R S
//=============================================================================================================


if( RT==true ){


  if( BuyInv==false && IsTradeAllowed()==true )
  {

   while(IsTradeContextBusy())
         Sleep(10);
  
    TiBuy=OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,0,Blue);
    Print ("Open buy ",TiBuy," LotsBuy: ",LotsBuy);

      if(TiBuy == -1)
        {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
        }

    return(TiBuy);
  }


  if( SelInv==false && IsTradeAllowed()==true )
  {
  
   while(IsTradeContextBusy())
         Sleep(10);

    TiSel=OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,0,Red);
    Print ("Open Sell ",TiSel," LotsSel: ",LotsSel);

      if(TiSel == -1)
        {
         Fehlercode = GetLastError();
         Fehlerbeschreibung = ErrorDescription(Fehlercode);
         Fehlerausgabe = StringConcatenate("Eröffnung Kauf-Order:",Fehlercode,": ",Fehlerbeschreibung);
         Print(Fehlerausgabe);
        }

   return(TiSel);
  }

}


//=============================================================================================================
// O R D E R   L O T S   E R H Ö H E N
//=============================================================================================================


if(OrderSelect(TiBuy,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){

    if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;
    
    if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;}
    Print ("LotsBuy erhöhen ", TiBuy," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotBuy: ",LotsBuy);

}

if(OrderSelect(TiSel,SELECT_BY_POS,MODE_HISTORY)){


  if(OrderProfit()>0.0){


    if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
  
    if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;}
    Print ("LotsSel erhöhen ",TiSel," OrdeerProfit: ",DoubleToString(OrderProfit(),2)," LotsSel: ",LotsSel);

}
Warum deine Strategie nur Verluste bringt, haben wir schon vor etrwa 2 Jahren diskutiert. Das lassen wir diesmal lieber bleiben.