Ich brauche Hilfe bei einem Code - Seite 4

 
diamstar:
Ich sah den Namen von d e a in der oberen rechten Ecke mit einem x davor, nicht mit einem Smiley, nachdem ich das e a angehängt hatte. Ich habe die Zeit in gmt eingegeben.


Hallo diamstar,

Zunächst einmal müssen Sie verstehen, dass der Code, den Sie hier erhalten, zu Lernzwecken dient.

Das bedeutet, dass Sie den Code auf eigenes Risiko testen, modifizieren oder in irgendeiner Weise verwenden.

Zurück zu Ihrem Problem: Wenn Sie keinen Smiley erhalten, überprüfen Sie die Schaltfläche Expert Advisers.

Wenn sie rot ist, drücken Sie sie.

Möglicherweise müssen Sie auch die Einstellungen von MT4 überprüfen.

Gehen Sie auf Extras und wählen Sie Optionen (die letzte Option am unteren Rand).

Wenn es nicht so aussieht :

Stellen Sie es so ein.

Jetzt sollte es funktionieren. Denken Sie daran, wenn Sie den EA stoppen wollen, drücken Sie einfach die Expert Adviser-Taste.

Haben Sie schon einen Backtest durchgeführt?

Die Zeit sollte in Serverzeit angegeben sein.

 
Ich danke Ihnen. Ich sehe jetzt den Smiley. Ich werde Sie auf den neuesten Stand bringen, nachdem ich es diese Woche getestet habe. Nochmals vielen Dank.
 
diamstar:
Vielen Dank für den Hinweis. Ich sehe jetzt den Smiley. Ich werde Sie auf dem Laufenden halten, nachdem ich es diese Woche getestet habe. Nochmals vielen Dank.


Wissen Sie, wie man einen Backtest im Strategietester durchführt, visuell oder nicht, und die Optimierungsfunktion?

Oder möchten Sie einfach nur in der Demo testen? Mit dem Strategietester ist es vielleicht einfacher und schneller, die besten Einstellungen zu finden.

Viel Erfolg!

 
Ich sehe den Smiley, aber der Auftrag ist immer noch nicht aktiviert. Ich habe das Journal des Strategietesters überprüft und ich sehe den Orderend-Fehler 130
 
diamstar :
Ich sehe den Smiley, aber die Bestellung ist noch nicht aktiviert. Ich habe das Journal des Strategietesters überprüft und sehe den Ordersend-Fehler 130


Können Sie bitte Ihre Einstellungen und den von Ihnen verwendeten Diagrammzeitrahmen posten?

Wenn Sie Erläuterungen zu den Einstellungen benötigen, fragen Sie einfach, kein Problem.

Hier ist eine leicht verbesserte Version, wieder wie üblich für Lernzwecke.

 //+------------------------------------------------------------------+
//|                                               News_Trader_v1.mq4 |
//|                                            Copyright © 2013 _3DE |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013 _3DE"
#property link        "http://www.metaquotes.net"
extern string   Note1       = "Set parameters in Pips not points !" ;
extern string   Note5       = "Set PeriodSignal in minutes!" ;
extern string   Note6       = "1=M1;5=M5;15=M15;30=M30;60=H1;240=H4;1440=D1!" ;
extern int      PeriodForSignal= 15 ;
extern int      TakeProfit  = 25 ; // Take profit pips
extern int      StopLoss    = 0 ; // Stop loss pips (manual trading)
extern string   Note4       = "Leave SetDistance to zero if trading news !" ;
extern int      SetDistance= 10 ; // Distance for BuyStop and SellStop from price at news time
extern string   Note2       = "Set day of the month for the news !" ;
extern string   Note3       = "Set to zero to trade every day at the same time !" ;
extern int      DayOfNews   = 0 ; // Day of the month of news
extern int      NewsHour    = 0 ; // Hour of news
extern int      NewsMin     = 1 ; // Minute of news
extern int      Expiration= 600 ; // Expiration of pending orderes
extern int      BEPips      = 0 ; // Move to break even after BEPips
extern int      TrailingStop= 0 ; // What distance to keep trailing
extern int      Slip        = 5 ; // Slippage
extern int      MagicNumber= 2210 ; // Must be unique for every chart
extern double   Lots= 0.1 ;
extern bool     WriteLog= false ; // Write a log file 
extern string   TradeLog    = "MI_Log" ;
input    string   EaComment   = "NewsTrader_EA" ;

double high_M1,low_M1,openPriceBuyStop,openPriceSellStop,slOpenBuyStop,slSellStop,tpOpenBuyStop,tpSellStop,spread,price;

string filename;
int pointMultiply= 10 ;
double minDist= 0 ;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if (SetDistance== 0 )pointMultiply= 10 ;
   else {pointMultiply=SetDistance;}
   if ( Digits == 3 || Digits == 5 )
     {
      pointMultiply  *= 10 ;
      TakeProfit     *= 10 ;
      StopLoss       *= 10 ;
      BEPips         *= 10 ;
      TrailingStop   *= 10 ;
      SetDistance    *= 10 ;
     }
   minDist= MarketInfo ( NULL , MODE_STOPLEVEL )* Point ;
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   int OrdersCondition,minofday,minofnews;

   filename= Symbol ()+TradeLog+ "-" + Month ()+ "-" + Day ()+ ".txt" ;

   if (BEPips> 0 ) DoBE(BEPips);

   if (TrailingStop> 0 ) DoTrail();

   OrdersCondition=CheckOrdersCondition();
   if ( Day ()==DayOfNews || DayOfNews== 0 )
     {
      minofday= Hour ()* 60 + Minute ();
      minofnews=NewsHour* 60 +NewsMin;

       if ((minofday==minofnews- 2 ) || (minofday==minofnews- 1 ))
        {
         high_M1= iHigh ( NULL ,PeriodForSignal, 0 );
         low_M1= iLow ( NULL ,PeriodForSignal, 0 );
         //--- Get the highest high and lowest low for the last 3 bars on 1 minute

         for (i= 1 ;i<= 3 ;i++) if ( iHigh ( NULL ,PeriodForSignal,i)>high_M1) high_M1= iHigh ( NULL ,PeriodForSignal,i);
         for (i= 1 ;i<= 3 ;i++) if ( iLow ( NULL ,PeriodForSignal,i)<low_M1) low_M1= iLow ( NULL ,PeriodForSignal,i);

         spread= Ask - Bid ;
         openPriceBuyStop= NormalizeDouble ((high_M1+spread+(pointMultiply* Point )), Digits );
         slOpenBuyStop= NormalizeDouble (high_M1, Digits );
         tpOpenBuyStop= NormalizeDouble ((openPriceBuyStop+(TakeProfit* Point )+spread), Digits );
         if ((openPriceBuyStop-slOpenBuyStop)<minDist)
           {
            slOpenBuyStop= NormalizeDouble (openPriceBuyStop-minDist-spread, Digits );
           }
         //---
         openPriceSellStop= NormalizeDouble (low_M1-(pointMultiply* Point ), Digits );
         slSellStop= NormalizeDouble (low_M1, Digits );
         tpSellStop= NormalizeDouble ((openPriceSellStop-(TakeProfit* Point )-spread), Digits );
         if ((slSellStop-openPriceSellStop)<minDist)
           {
            slSellStop= NormalizeDouble (openPriceSellStop+minDist+spread, Digits );
           }
         //---
         if (StopLoss> 0 &&SetDistance> 0 )
           {
            price=( Ask + Bid )/ 2 ;
            high_M1=price+(SetDistance* Point );
            low_M1=price-(SetDistance* Point );
            openPriceBuyStop= NormalizeDouble (high_M1+spread, Digits );
            slOpenBuyStop= NormalizeDouble (openPriceBuyStop-(StopLoss* Point ), Digits );
            tpOpenBuyStop= NormalizeDouble (openPriceBuyStop+(TakeProfit* Point ), Digits );

             if ((openPriceBuyStop-slOpenBuyStop)<minDist)
              {
               slOpenBuyStop= NormalizeDouble (openPriceBuyStop-minDist-(StopLoss* Point ), Digits );
               Alert ( "Stop too close ! Check your StopLoss settitngs !!!" );
              }
            openPriceSellStop= NormalizeDouble (low_M1-spread, Digits );
            slSellStop= NormalizeDouble (openPriceSellStop+(StopLoss* Point ), Digits );

             if ((slSellStop-openPriceSellStop)<minDist)
              {
               slSellStop= NormalizeDouble (openPriceSellStop+minDist+(StopLoss* Point ), Digits );
               Alert ( "Stop too close ! Check your StopLoss settitngs !!!" );
              }
            tpSellStop= NormalizeDouble (openPriceSellStop-(TakeProfit* Point ), Digits );
           }
         if (OrdersCondition== 0 )
           {
             if (WriteLog)Write( "Opening BuyStop & SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
            OpenSellStop();
           }

         if (OrdersCondition== 10 )
           {
             if (WriteLog)Write( "Opening SellStop, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenSellStop();
           }

         if (OrdersCondition== 1 )
           {
             if (WriteLog)Write( "Opening BuyStop , OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
            OpenBuyStop();
           }
        }
     }
   if ((minofday>=minofnews) && (minofday<=minofnews+Expiration- 1 ))
     {

       if (OrdersCondition== 1001 )
        {
         if (WriteLog)Write( "Deleting SellStop Because of BuyStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }

       if (OrdersCondition== 110 )
        {
         if (WriteLog)Write( "Deleting BuyStop Because of SellStop Hit, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }
     }

   if (minofday>=minofnews+Expiration)
     {
       if (OrdersCondition== 11 )
        {
         if (WriteLog)Write( "Deleting BuyStop and SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
         DeleteSellStop();
        }

       if ((OrdersCondition== 10 ) || (OrdersCondition== 110 ))
        {
         if (WriteLog)Write( "Deleting BuyStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteBuyStop();
        }

       if ((OrdersCondition== 1 ) || (OrdersCondition== 1001 ))
        {
         if (WriteLog)Write( "Deleting SellStop Because 5 min expired, OrdersCondition=" +OrdersCondition+ " MinOfDay=" +minofday);
         DeleteSellStop();
        }
     }

//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| int CheckOrdersCondition()                                       |
//+------------------------------------------------------------------+

int CheckOrdersCondition()
  {
   int result= 0 ;
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if (( OrderType ()== OP_BUY ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1000 ;
        }
       if (( OrderType ()== OP_SELL ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 100 ;
        }
       if (( OrderType ()== OP_BUYSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 10 ;
        }
       if (( OrderType ()== OP_SELLSTOP ) && ( OrderSymbol ()== Symbol ()) && ( OrderMagicNumber ()==MagicNumber))
        {
         result+= 1 ;
        }

     }
   return (result); // 0 means we have no trades
  }
// OrdersCondition Result Pattern
//    1    1    1    1
//    b    s    bs   ss
//  
//+------------------------------------------------------------------+
//|void OpenBuyStop()                                                |
//+------------------------------------------------------------------+

void OpenBuyStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , TimeCurrent ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_BUYSTOP ,Lots,openPriceBuyStop,Slip,slOpenBuyStop,tpOpenBuyStop,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenBuyStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenSellStop()
  {
   int ticket,tries;
   tries= 0 ;
   if (! GlobalVariableCheck ( "InTrade" ))
     {
       while (tries< 3 )
        {
         GlobalVariableSet ( "InTrade" , TimeCurrent ());   // set lock indicator
         ticket= OrderSend ( Symbol (), OP_SELLSTOP ,Lots,openPriceSellStop,Slip,slSellStop,tpSellStop,EaComment,MagicNumber, 0 ,Red);
         if (WriteLog)Write( "in function OpenSellStop OrderSend Executed , ticket =" +ticket);
         GlobalVariableDel ( "InTrade" );   // clear lock indicator
         if (ticket<= 0 )
           {
            tries++;
           }
         else tries= 3 ;
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoBE( int byPips)
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {
         if ( OrderType ()== OP_BUY ) if ( Bid - OrderOpenPrice ()>byPips* Point ) if ( OrderStopLoss ()< OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()+ Point , OrderTakeProfit (),Red);
           }
         if ( OrderType ()== OP_SELL ) if ( OrderOpenPrice ()- Ask >byPips* Point ) if ( OrderStopLoss ()> OrderOpenPrice ())
           {
             if (WriteLog)Write( "Movine StopLoss of Buy Order to BE+1" );
             OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()- Point , OrderTakeProfit (),Red);
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DoTrail()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber)) // only look if mygrid and symbol...
        {

         if ( OrderType ()== OP_BUY )
           {
             if ( Bid - OrderOpenPrice ()> Point *TrailingStop)
              {
               if ( OrderStopLoss ()< Bid - Point *TrailingStop)
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Bid - Point *TrailingStop, OrderTakeProfit (), 0 ,Green);
                   return ;
                 }
              }
           }

         if ( OrderType ()== OP_SELL )
           {
             if (( OrderOpenPrice ()- Ask )>( Point *TrailingStop))
              {
               if (( OrderStopLoss ()>( Ask + Point *TrailingStop)) || ( OrderStopLoss ()== 0 ))
                 {
                   OrderModify ( OrderTicket (), OrderOpenPrice (), Ask + Point *TrailingStop, OrderTakeProfit (), 0 ,Red);
                   return ;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteBuyStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_BUYSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteBuyStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DeleteSellStop()
  {
   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()== Symbol () && ( OrderMagicNumber ()==MagicNumber) && ( OrderType ()== OP_SELLSTOP ))
        {
         OrderDelete ( OrderTicket ());
         if (WriteLog)Write( "in function DeleteSellStopOrderDelete Executed" );
        }

     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Write( string str)
  {
   int handle;

   handle= FileOpen (filename, FILE_READ | FILE_WRITE | FILE_CSV , "/t" );
   FileSeek (handle, 0 , SEEK_END );
   FileWrite(handle,str+ " Time " + TimeToStr ( CurTime (), TIME_DATE | TIME_SECONDS ));
   FileClose (handle);
  }
//+------------------------------------------------------------------+

Ich habe den PeriodForSgnal-Parameter hinzugefügt, da der vorherige nur Signale mit einem Zeitrahmen von 1 Minute nahm, jetzt können Sie ihn auf 5, 15, 60 Minuten einstellen, was immer Sie wollen, wenn Sie Nachrichten handeln.

Wenn StopLoss=0, wird ein Stop-Loss für Sie berechnet. Wenn SetDistance=0, wird eine Distanz für Pending Orders berechnet.

 
Es hat funktioniert!!! Ich bin in der Lage, heute einige Backtests durchzuführen, ich habe einen Fehler bei einer der Eingaben gemacht. Ich werde noch einige Tests auf einem Demokonto ausprobieren. Tausend Dank.
 
diamstar:
Es hat geklappt!!! Ich bin in der Lage, heute einige Backtests durchzuführen, ich habe einen Fehler bei einer der Eingaben gemacht. Ich werde noch einige Tests auf einem Demokonto ausprobieren. Tausend Dank.


Gern geschehen.

Ich freue mich, dass Sie etwas lernen.

Und du kannst mich gerne fragen, wenn du weitere Fragen hast.

 
Hallo, die e a funktioniert gut im Backtesting, aber nicht in der Demo. Die Artikel, die ich online gesehen habe, zeigen etwas wie die Bestellung senden und die Bestellung ändern wouldhave anders gesendet werden. Ich verstehe das nicht wirklich. Vielen Dank
 
diamstar:
Hallo, der EA funktioniert gut im Backtesting, aber nicht in der Demo. In den Artikeln, die ich online gesehen habe, steht etwas davon, dass das Senden der Bestellung und das Ändern der Bestellung unterschiedlich gesendet werden müssten. Ich verstehe das nicht wirklich. Danke


Hallo diamstar,

Freut mich zu hören, dass Sie lernen. Nun, sind Sie sicher, dass Sie über Demo und nicht Live-Konto sprechen?

Ich bin mir bewusst, dass einige Broker es nicht zulassen, dass EA's Aufträge mit Stop Loss und Take Profit auf Live-Konten platzieren.

Die Umgehung besteht also darin, den EA so zu modifizieren, dass er die Aufträge mit einem Stop-Loss und einem Take-Profit von Null sendet, und dann eine andere Funktion zu verwenden, um

Stop-Loss und Take-Profit auf einen beliebigen Wert zu ändern, aber auch das gilt für Live-Konten und nicht für Demokonten.

Wenn das, was Sie sagen, auf dem Demokonto passiert, müssen Sie auf die Schaltfläche "Terminal" klicken und die Registerkarten "Experten" und "Journal" überprüfen, um zu sehen, ob dort Fehler angezeigt werden.

Wenn Sie irgendwelche Fehlermeldungen erhalten, lassen Sie mich wissen, was sie sind.

Es ist schwer, anhand solch kleiner Details zu erraten, was Sie zu tun versuchen und was schief läuft. Lassen Sie mich wissen, wie Sie es verwenden, was Ihr Stop ist, Take Profit, etc.

Ich arbeite daran, diesen EA zu verbessern, da er mit den richtigen Parametern und dem richtigen Zeitpunkt für die Orders Potenzial für gute Ergebnisse zeigt.

Ich werde Sie auf dem Laufenden halten, solange Sie daran interessiert sind.

 
Vielen Dank, das Buch war eine große Hilfe beim Verständnis des Codes. Es hat sogar bei einer Demo perfekt funktioniert, als ich die Eingabewerte geändert habe. Und natürlich bin ich mehr als bereit zu lernen.