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

Schau meinen Code an. Der speichert die Ticket-Nummer nach der Ordereröffnung in LastBuy und LastSel.
Wenn du einmal abgefragt hast, wird das gelöscht und gut ist.

So, das wars. Mehr schreib ich nicht mehr zu dem Thema. Hier der ganze Code, der macht, was du willst. Ein paar Dinge könnte man noch weglassen und es würde trotzdem gehen. SL setzen und TP setzten geht so, wie du das codiert hast nicht immer. Ich mache immer erst die Order auf und setze danach SL und TP. Warum das so ist, habe ich nicht gesucht. Wenn du das nicht verstehst, und das ist wirklich einfach gehalten, dann kann ich dir nicht helfen.
Aber was solls, deine Strategie macht nur Verluste:

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



Öffnen der Orders dauert allgemein etwas lange.
Er scheint immer erst zu Minuten-Beginn zu öffnen?

Lag vielleicht an Dist? Mit SL und TP testen.
Mit SL und TP scheints zu funktionieren.


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



//=============================================================================================================
// 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_SLTP_LP.mq4"
#property copyright"daniel-rudloff@web.de"

#include <stderror.mqh>
#include <stdlib.mqh>


//=============================================================================================================
// 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 MN="Magic Numbers";
extern int Buy_MN=2;
extern int Sell_MN=4;

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

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

input bool Open_Only_From_Till=true; //

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 IOOFTF1="if";
extern string IOOFTF2="Open_Only_From_Till = false";
extern string IOOFTF3="Close_all_Orders_after";
extern string IOOFTF4="= false too";

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/Sell";
extern string esLPOCP2="+ LotsPlus";
extern string esLPOCP3="if Order close";
extern string esLPOCP4="with Profit";

extern double LotsPlus=0.01;


extern string esOLLPOLP1="OrderLots of";
extern string esOLLPOLP2="last Profit Order";
extern string esOLLPOLP3="+ LotsPlus?";

extern bool OLPO_LP=false; // Zum Testen aus


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

extern int SL=10; // 1600 testen

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

extern int TP=20; // Zum Testen 50

//=============================================================================================================
// D E K L A R A T I O N E N
//=============================================================================================================

bool OMbuy,OMsel,OCbuy,OCsel;

double Buy_SL,Sel_SL,Buy_TP,Sel_TP;

int i,j,TiBuy,TiSel;
int LastBuy = 0;
int LastSel = 0;
int History_index = 0;
int LastHistory_index = 0;

int      Fehlercode;
string   Fehlerbeschreibung;
string   Fehlerausgabe;


//=============================================================================================================
// 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
//=============================================================================================================
void OnTick(){
//=============================================================================================================
// O P E N   T I M E
//=============================================================================================================


bool RT=false; // RT = Right Time
if( (Open_Only_From_Till==false) || (Open_Only_From_Till==true&&Hour()>=Open_From_Hour&&Minute()>=Open_From_Min&&Hour()<=Open_Till_Hour&&Minute()<=Open_Till_Min) )RT=true;

RT = true;

//=============================================================================================================
// 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)LotsBuy=Max_L;
if(LotsSel>Max_L)LotsSel=Max_L;


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


//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(SL<1){
  Buy_SL=0.0;
  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){
  Buy_TP=0.0;
  Sel_TP=0.0;}

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


//=============================================================================================================
// P R U E F E N   O B   O R D E R S   G E O E F F N E T   S I N D
//=============================================================================================================


bool BuyInv=false;
bool SelInv=false;

for(i=OrdersTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS))
   {
      if(OrderType()==OP_BUY &&OrderMagicNumber()==Buy_MN &&OrderSymbol()==Symbol()) BuyInv=true;
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()) SelInv=true;
   }
}


//------------------------------
// OrderLots für Buy erhöhen
//----------------------------

History_index = OrdersHistoryTotal();
if (LastHistory_index != History_index)
{
   if (LastBuy > 0)
   {
      //Print ("Gewinn LastBuy fragen: ",LastBuy);
      for(i=History_index;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
            if(OrderTicket() == LastBuy)
            {
               Print ("OrderProfit LastBy: ",LastBuy," ",DoubleToString(OrderProfit(),2));
               if (OrderProfit()>0.0)
               {
                  if(OLPO_LP==false)LotsBuy = LotsBuy + LotsPlus;    
                  if(OLPO_LP==true)LotsBuy = OrderLots() + LotsPlus;
               }
               Print ("LotBuy: ",LotsBuy); 
               LastBuy = 0;
            }
         }
      }
   }
// --------------------------
// OrderLots für Sell erhöhen
// --------------------------
   if (LastSel > 0)
   {
      //Print ("Gewinn LastSeL fragen: ",LastSel);
      for(i=History_index;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
         {
            if(OrderTicket() == LastSel)
            {
               Print ("OrderProfit LastSel: ",LastSel," ",DoubleToString(OrderProfit(),2));
               if (OrderProfit()>0.0)
               {
                  if(OLPO_LP==false)LotsSel = LotsSel + LotsPlus;
                  if(OLPO_LP==true)LotsSel = OrderLots() + LotsPlus;
               }
               Print (" LotsSel: ",LotsSel);
               LastSel = 0;
            }
         }
      }
   }
}
LastHistory_index = History_index;

//=============================================================================================================
// 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);
      }
      LastBuy = TiBuy;
      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);
      }
      LastSel = TiSel;
      return(TiSel);
   }
}




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


for(j=OrdersTotal()-1;j>=0;j--){
  if(OrderSelect(j,SELECT_BY_POS)){


    if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){
      
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){
      
        if(IsTradeAllowed()==true)OCbuy=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black);}}



    if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){
      
      if(Close_all_Orders_after==true&&Hour()>=Close_after_Hour&&Minute()>=Close_after_Min){

        if(IsTradeAllowed()==true)OCsel=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Orange);}}

}}


//=============================================================================================================
// E A   F U N K T I O N E N   B E E N D E N
//=============================================================================================================
return(0);}