Habe Probleme mit meinem EA

 

Habe ein Probem mit meinem EA und zwar basiert es auf 4 Moving Avergages. Er funktioniert eigentlich super bis auf einen Punkt und zwar:

Wenn der EA ein buySignal bekommt kauft er eine position genau so wie er sollte und behaltet diese bis der Takeprofit von 100 Punkten erreicht ist oder der Stop Loss von 100 Punkten erreicht ist. Jetzt kommt der Fehler den wenn sich alle Signale die zu einem kauf einer Buyposition führen noch bewahrheiten kauft er sofort wieder eine buy order was logisch führ mich ist. Das Problem ist das ich genau das verhindern will. Er soll nur eine Position pro Signal kaufen. und wenn der Takeprofit eintritt soll er es dabei belassen und keine neue buyorder eröffnen selbst wenn noch ein Buysignal existiert. Ich hoffe jemand von euch kann mir helfen und sagen wie ich dies verhindern kann?

Und noch eine kurze frage werden Variablen die im EA verwendet werden bei jedem neuen Tick auf NULL gesetzt oder nicht?
Basic Principles - Trading Operations - MetaTrader 5 Help
Basic Principles - Trading Operations - MetaTrader 5 Help
  • www.metatrader5.com
is an instruction given to a broker to buy or sell a financial instrument. There are two main types of orders: Market and Pending. In addition, there are special Take Profit and Stop Loss levels. is the commercial exchange (buying or selling) of a financial security. Buying is executed at the demand price (Ask), and Sell is performed at the...
 
Du musst eine weitere (globale) Variable einführen (bzw. initialisieren => lies die History der Trades!), die die Richtung der letzten Position kennt und die nächste Position nur erlaubt, wenn sie 'andersrum' ist.
 
  int i,hstTotal=OrdersHistoryTotal();
  string lastposition;
  for(i=0;i<hstTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Access to history failed with error (",GetLastError(),")");
        break;
       }
     if(OrderType()==OP_BUY){
      lastposition = "buy"
     }
     if(OrderType()==OP_SELL){
      lastposition = "sell"
     }

    }
     if(lastposition = "sell"){
        //open buy order
     }
     if(lastposition = "buy"){
        //open sell order
     }
Hallo ich danke für die schnelle antwort. Habe ich dies so etwa richtig verstanden? oder funktioniert es anders? Und woher weiss ich welches der letzte Trade war und ob ich den richtigen trade überprüfe?
 
  1. Deine Variable lastposition verliert ihre Info. nach dem beenden der Funktion (wahrsch. OnTick()). Deshalb eine globale Variable oder eine static (lies mal in der Dok. über static).
  2. Warum nimmst Du einen string? Int genügt auch und ist eleganter:
static int lastpos;
int signal;
...
lastposition = OrderType();
...
signal = getSignal(..); //returns OP_BUY oder OP_SELL
... 
if (signal != lastposition) {
   // neue position
}

Nimm Dir mal bestehende EAs und studiere die - da lernt man am schnellsten und am meisten!