Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 24.05.20
berndao berndao ist offline
Neues Mitglied
 
Registriert seit: May 2020
Beiträge: 18
berndao befindet sich auf einem aufstrebenden Ast
Standard Error 130 und 138 bei EA Ausführung?

Hallo,
ich habe etwas rumgewerkelt und den folgenden E Code zusammengeschustert:
Code:
//+------------------------------------------------------------------+
//|                                                     10 20 EA.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input int pipsStopLoss=18;
input double takemulti=2.5;
input double lotsize=0.01;
int BuyTrade;
int SellTrade;

#include <Allerlei 1.mqh>

datetime LastActiontime;
//used to determine if a new bar has been formed



void InitializeVariables(){
  BuyTrade=0;
  SellTrade=0;
}


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){
//---
  Print("Start Time is= ",TimeCurrent());
  LastActiontime=Time[1];
  //Print("die Zahl ",1.23456789," gerundet auf die ",_Digits,"te Nachkommastelle ergibt ", roundD(1.23456789));
  //Print("");
  //Print( DoubleToString(Wert, _Digits) );
  
  InitializeVariables();
  
   
//---
   return(INIT_SUCCEEDED);
}
  
  

  
  
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick() {
  RefreshRates();
  //only allows action if a new bar has formed
  if(LastActiontime==Time[1]){
    ActionsOncePerTick();
    return;
  }
  else
  {
    ActionsOncePerTick();
    ActionsOncePerBar();
    LastActiontime=Time[1];
    return;
  }  
//+------------------------------------------------------------------+
}


void ActionsOncePerBar(){

  //Print("Last Bar Time is= ",Time[1], "and last Close Price is= ",DoubleToString(Close[1],_Digits));
  Print("At the previous Bar, are the Bollinger Bands contracting? ", BBcontract() );
  Print("by how much compared to the previous bar? ", DoubleToString(BBContpercent(),2));
  Print("");
  


}

void ActionsOncePerTick(){
  RefreshRates();

  CheckTrades();
  return;
}

void CheckTrades(){
  RefreshRates();
  if(OrdersTotal()==0){
    InitializeVariables();
    OpenTrades();
  }
  else{
    UpdateTrades();
  }
}

void OpenTrades(){
 OpenBuyTrade();
 OpenSellTrade();
  
}


void OpenBuyTrade(){
  RefreshRates();
  double stoploss=NormalizeDouble(Bid-Point*pipsStopLoss,Digits);
  double takeprofit=NormalizeDouble(Bid+Point*takemulti*pipsStopLoss,Digits); 
  RefreshRates();
  BuyTrade=OrderSend(Symbol(),OP_BUY,lotsize,Bid,3,stoploss,takeprofit);

}


void OpenSellTrade(){
  RefreshRates();

  double stoploss=NormalizeDouble(Bid+Point*pipsStopLoss,Digits);
  double takeprofit=NormalizeDouble(Bid-Point*takemulti*pipsStopLoss,Digits); 
  RefreshRates();c
  SellTrade=OrderSend(Symbol(),OP_BUY,lotsize,Bid,3,stoploss,takeprofit);

}

void UpdateTrades(){
  RefreshRates();

  //Buy Trade
  OrderSelect(BuyTrade,SELECT_BY_TICKET);
  if(OrderStopLoss()<Bid-Point*pipsStopLoss){
    RefreshRates();
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*pipsStopLoss,Digits),OrderTakeProfit(),0,Blue);
  }

  OrderSelect(SellTrade,SELECT_BY_TICKET);
  if(OrderStopLoss()>Bid+Point*pipsStopLoss){
    RefreshRates();
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid+Point*pipsStopLoss,Digits),OrderTakeProfit(),0,Blue);
  }
  
}

Was er tun soll:
Er soll, wenn keine offene Trade da sind, 2 Trades gleichzeitig aufmachen:
einen Buytrade, bei dem der Stoploss bspw. 10 Pips ist und der Takeprofit 25 Punkte (eben das 2,5 fache des stoploss).
und einen selltrade der im prinzip das selbe gespiegelt ist, also stoploss 10 pips über dem bidpreis und takeprofit 25 punkte unter dem bid preis.


Gedacht ist das Ganze für sehr volatile Märkte wo es wild auf und ab geht.
egal ob es nahc Tradeeröffnung auf odder ab geht, einer der beiden Trades wird takeprofit erreichen, der andere den stoploss auslösen und in summe verbleibt ein kleiner profit.

so das prinzip.

jedenfalls soll der EA bei jedem neuen Balken gucken, ob shcon Trades aufsind.

Falls nein, macht er die 2 gegensätzlichen trades wie oben erwähnt auf.

Falls ja, dann zieht er im Sinne eines TrailingStoploss den stoploss desjenigen Trades nach, zu dessen Gunsten sich der Preis verändert hat.

nur gab es bei der Ausführung dann fehler.

Anfangs bekam ich Error 131, der sich beheben ließ indem ich die vorgegebene Lotsize von 0.001 (wohl unzulässig klein) auf 0.01 anhob (obwohl der Broker microlots anbeitet, also keine Ahnung wieso das nicht geht. vielleicht weils ein Demoaccount ist?)

Danach kommen aber 2 Fehler die ich nicht nachvollziehen kann was sie bedeuten bzw. wodurch sie verursacht werden:

error 130 und 138 im direkten Wechsel, für jeden Balken neu.


Das Journal sieht auszugsweise so aus:
Code:
2020.05.24 20:32:55.908	EURGBP,H4: 26851 tick events (24 bars, 27852 bar states) processed in 0:00:01.906 (total time 0:00:11.984)
2020.05.24 20:32:55.908	2020.04.02 23:58:09  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:58:09  10 20 EA EURGBP,H4: OrderSend error 138
2020.05.24 20:32:55.908	2020.04.02 23:58:07  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:58:07  10 20 EA EURGBP,H4: OrderSend error 138
2020.05.24 20:32:55.908	2020.04.02 23:57:30  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:57:30  10 20 EA EURGBP,H4: OrderSend error 138
2020.05.24 20:32:55.908	2020.04.02 23:56:52  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:56:52  10 20 EA EURGBP,H4: OrderSend error 138
2020.05.24 20:32:55.908	2020.04.02 23:56:15  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:56:15  10 20 EA EURGBP,H4: OrderSend error 138
2020.05.24 20:32:55.908	2020.04.02 23:55:37  10 20 EA EURGBP,H4: OrderSend error 130
2020.05.24 20:32:55.908	2020.04.02 23:55:37  10 20 EA EURGBP,H4: OrderSend error 138
Kennt sich Jemand aus was das bedeutet und was ich falsch mache?
Ich bin mir eigentlich recht sicher dass ich die OrderSend() und OrderModify() Befehle inklusive Parameter richtig angewendet habe :-/

Edit: In der Allerlei 1.mqh steht nichts, was ich hier überhaupt benutzt habe.
war insofern sinnfrei das einzubinde.

Geändert von berndao (24.05.20 um 20:43 Uhr) Grund: Ergänzung