Thema: Hedge EA
Einzelnen Beitrag anzeigen
  #23 (permalink)  
Alt 02.05.20
MA-EA MA-EA ist offline
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

Ich hab mir die Vorschläge angeguckt. Sonst würde das Teil wahrscheinlich nicht so gut laufen.

Was für Einstellungen hattest Du denn im Backtest?

Er läuft bei mir im ActivTrades-Demo von 7 bis 16:26. Auf allen WP, die üblicherweise einen Spread bis ungefähr 15 haben. Werd demnächst wahrscheinlich WPs mit Spreads bis ungefähr 20 testen. Um 17:27 werden alle Orders dicht gemacht, egal ob Long oder Short, egal ob mit Gewinn oder nicht.

Das Gerät muss ständig Long und Short im selben WP gleichzeitig sein. Wird die Order einer Richtung geschlossen (meistens weil sie den eingestellten Gewinn erreicht hat) wird in die selbe Richtung gleich die nächste Order geöffnet (so soll es jedenfalls sein . Klappt aber nicht durchgehend und ich hab keine Ahnung, warum. ). Lots der jeweiligen Richtung werden mit dem einstellbaren Wert addiert, wenn er eine Gewinn-Order schließt.

Auch wenn das ganze Prinzip wohl nicht so überzeugend klingt, wär ich dankbar, wenn Ihr den Code mal durchschauen und sagen könntet, ob er gut und richtig ist. Vor allem weiß ich nicht, ob das bei OrderSend mit dem Prüfen klappt, ob der EA schon Orders offen hat.

Noch nicht getestet:
Code:
/*=============================================================================================================
// N O T I Z E N   U N D   I N F O S
//=============================================================================================================


In dieser Vers. 2 wird möglichst nur mit
Close_All_After_ bool gearbeitet.
Ansonsten wird versucht, hier keine
anderen bools zu benutzen.

Ob der EA Orders offen hat,
wird nicht mehr in extra for-Schleife
raus gefunden, sondern in den OrderSend-
Funktionen/Bedingungen.
RT wird entfernt. Falls EA rund
um die Uhr arbeiten soll,
werden einfach Start- und Endzeit
auf 0:00 Uhr eingestellt.


//-------------------------------------------------------------------------------------------------------------



//-------------------------------------------------------------------------------------------------------------


Öffnen der Orders dauert allgemein etwas lange.

Lag vielleicht an Dist? Mit SL und TP getestet.
Auch mit SL und TP dauert das Öffnen neuer Orders
teilweise sehr lange.


//-------------------------------------------------------------------------------------------------------------



//=============================================================================================================
// P R O P E R T Y
//============================================================================================================*/
// #property strict
// #property strict sorgt anscheinend dafür, dass Kommentare im Konfig-Fenster im MT4 sichtbar sind.

#property copyright"LoSh_AlwInv_Dist_LP_v2.mq4"
#property copyright"daniel-rudloff@web.de"
//=============================================================================================================
// B E S C H R E I B U N G
//=============================================================================================================
extern string TOY="true = on / yes";
extern string FON="false = off / no";
//=============================================================================================================
// E I N S T E L L U N G E N
//=============================================================================================================

//-----------------------------------------------------------------------------------------------------------*/

extern string OPORTY="Open Order Types";
input bool open_Buy=true;
input bool open_Sell=true;

//-----------------------------------------------------------------------------------------------------------*/

extern string MN="Magic Numbers";
extern int Buy_MN=2;
extern int Sell_MN=4;

//-----------------------------------------------------------------------------------------------------------*/

extern string OOO1="Open Orders";
extern string OOO2="from/till";
extern string OOO3="(Server Time)";

extern int Open_From_Hour=7;
extern int Open_From_Min=0;

extern int Open_Till_Hour=17;
extern int Open_Till_Min=26;

//-----------------------------------------------------------------------------------------------------------*/

extern string CAOTOC1="Close all Orders after";
extern string CAOTOC2="(Server Time)";

extern bool Close_all_Orders_after=true;

extern int Close_after_Hour=17;
extern int Close_after_Min=27;

//-----------------------------------------------------------------------------------------------------------*/

extern int Slippage=99999999;

//-----------------------------------------------------------------------------------------------------------*/

extern double LotsBuy=0.01;
extern double LotsSel=0.01;

extern string esLPOCP1="Lots Buy/Lots Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;

//-----------------------------------------------------------------------------------------------------------*/

extern int SL=1600; // 1600 testen

//-----------------------------------------------------------------------------------------------------------*/

extern int TP=1800; // Zum Testen 1800

//-----------------------------------------------------------------------------------------------------------*/

extern string esIITCBSMS1="if IsTradeContexBusy()";
extern string esIITCBSMS2="sleep Milli Seconds";

extern int Sl_MS=10;

//-----------------------------------------------------------------------------------------------------------*/

extern string DOPtAB1="Distance to";
extern string DOPtAB2="Order Open Price";
extern string DOPtAB3="close Win-Order";

extern int Dist = 50; // Zum Testen 50

//-----------------------------------------------------------------------------------------------------------*/


//=============================================================================================================
// I N I T / D E I N I T
//=============================================================================================================
int OnInit(){
  return(0);}
void OnDeinit(const int reason){
  return;}
//=============================================================================================================
// E A   F U N K T I O N E N   S T A R T
//=============================================================================================================int 
int start(){
//=============================================================================================================
// L O T S ?
//=============================================================================================================


double Min_L=MarketInfo(Symbol(),MODE_MINLOT);
double Max_L=MarketInfo(Symbol(),MODE_MAXLOT);

if(LotsBuy<Min_L)LotsBuy=Min_L;
if(LotsSel<Min_L)LotsSel=Min_L;

if(LotsBuy==Max_L || LotsSel==Max_L)LotsPlus=0.0;


//=============================================================================================================
// S T O P   L O S S
//=============================================================================================================


//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  double Buy_SL=0.0;
  double Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-SL*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+SL*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;


//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================


//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(TP<1){
  double Buy_TP=0.0;
  double Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+TP*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-TP*_Point,_Digits);}


//=============================================================================================================
// C L O S E   D I S T A N C E   B E R E C H N U N G
//=============================================================================================================


double CLbuy_D = NormalizeDouble( Bid - Dist *_Point,_Digits);

double CLsel_D = NormalizeDouble( Ask + Dist *_Point,_Digits);


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


if(Hour()>=Open_From_Hour&&Minute()>=Open_From_Min&&Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min){




  if( open_Buy==true ){
  
    for(int i=OrdersTotal()-1;i>=0;i--)
    
      if(OrderSelect(i,SELECT_BY_POS))
      
        if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol())Print( "buy" , i );


        else if(IsTradeAllowed())OrderSend(Symbol(),OP_BUY,LotsBuy,Ask,Slippage,Buy_SL,Buy_TP,NULL,Buy_MN,NULL,Blue);

        if(IsTradeContextBusy())Sleep(Sl_MS);}




  if( open_Sell==true ){

    for(int j=OrdersTotal()-1;j>=0;j--)

      if(OrderSelect(j,SELECT_BY_POS))

        if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol())Print( "sell" , i );

      
        else if(IsTradeAllowed())OrderSend(Symbol(),OP_SELL,LotsSel,Bid,Slippage,Sel_SL,Sel_TP,NULL,Sell_MN,NULL,Blue);

        if(IsTradeContextBusy())Sleep(Sl_MS);}

}


//=============================================================================================================
// C L O S E   O R D E R S
//=============================================================================================================


for(int k=OrdersTotal()-1;k>=0;k--){
  if(OrderSelect(k,SELECT_BY_POS)){
    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
      
      if( ( CLbuy_D > OrderOpenPrice() ) ||(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min) ){
      
        if(IsTradeAllowed())OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Red);
          
        if(IsTradeContextBusy())Sleep(Sl_MS);
          
        LotsBuy = OrderLots() + LotsPlus;

} } } }




for(int l=OrdersTotal()-1;l>=0;l--){
  if(OrderSelect(l,SELECT_BY_POS)){
    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
      
      if( ( CLsel_D < OrderOpenPrice() ) ||(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min) ){

        if(IsTradeAllowed())OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red);
        
        if(IsTradeContextBusy())Sleep(Sl_MS);
        
        LotsSel = OrderLots() + LotsPlus;

} } } }


//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================

return(NULL);} //
Angehängte Dateien
Dateityp: mq4 LoSh_AlwInv_Dist_LP_v2.mq4 (20,1 KB, 0x aufgerufen)

Geändert von MA-EA (02.05.20 um 22:16 Uhr)