Einzelnen Beitrag anzeigen
  #11 (permalink)  
Alt 21.09.16
Trading111 Trading111 ist offline
Neues Mitglied
 
Registriert seit: Sep 2016
Beiträge: 15
Trading111 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Und in Deiner Angabe MA(80) wäre dann die MA_Periode eben 80.
D.h. Du benötigst eine MA_Periode_kurz und eine MA_Periode_lang. Fertig!

traderdoc
Danke für die Antwort Traderdoc. Es hat mir geholfen und ich hab es so umgesetzt. Er setzt jetzt schon zuerst beim Kreuzen die richtige Order - aber nach dem Teke Profit setzt er gleich die nächste Order ohne, dass tatsächlich eine Kreuzung stattgefunden hat (siehe Bild). Da kann ja nicht sein.
Beim kompilieren kommen aber nur noch Wrnhinweise 'implicit conversion from string to number'. Aber das kann doch nicht der Grund sein oder doch?

Code:
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern int MA_Periode_lang = 30;
extern int MA_Periode_kurz = 8;
extern double HandelsLots = 0.1, SL_prozent = 0.5, TP_prozent = 1.5;
extern int MagicNummer = 12345;
extern int OrdersTotal;

// Globale Variable
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal,ShortSignal;
int LongOrder, ShortOrder;
//void Sleep(int milliseconds);
//int TimeWaiting = 0;

int OnInit()
  {
//---
    PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
//void OnTick()
//  {
//---
   
//  }
//+------------------------------------------------------------------+

// expert function
int start ()
{
   // Überprüfen ob neuer Periodenbeginn vorliegt
   if(PeriodenStartZeit != Time[0])
      {
         NeuePeriodeBegonnen = true;
         PeriodenStartZeit = Time[0];
      }
   else NeuePeriodeBegonnen = false;
      
   // Marktdaten ermitteln
   double MA_lang            = iMA(NULL,0,MA_Periode_lang,0,0,0,1);
   double MA_lang_Vorperiode = iMA(NULL,0,MA_Periode_lang,0,0,0,2);
   double MA_kurz            = iMA(NULL,0,MA_Periode_kurz,0,0,0,1);
   double MA_kurz_Vorperiode = iMA(NULL,0,MA_Periode_kurz,0,0,0,2);
  
  if (LongSignal == false && ShortSignal == false)
   {
   // Handelssignale ermitteln
      if(NeuePeriodeBegonnen == true)
      {
         // Buy Signal
         if(MA_lang < MA_kurz && MA_lang_Vorperiode >= MA_kurz_Vorperiode)
            {
               LongSignal = true;
            }
         else LongSignal = false;
                
         // Sell Signal
         if(MA_lang > MA_kurz &&  MA_lang_Vorperiode <= MA_kurz_Vorperiode)
         {
            ShortSignal = true;
         }
         else ShortSignal =false;
      }
      else 
      {
         LongSignal = false;
         ShortSignal = false;
      }
   
    }
   
   // LongSignale umsetzen
   if (LongSignal == true)
   {
      // eventuell Short Order schließen     
      if (ShortOrder>0)
      {
           if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == 0)
           {
              bool ShortOrderGeclosed = OrderClose(ShortOrder,HandelsLots,Ask,10,Blue);
              if (ShortOrderGeclosed == true) ShortOrder = 0;
           }
      }
      while (LongOrder <= 0)
      {
         LongOrder = OrderSend(Symbol(),OP_BUY, HandelsLots,Ask,10,0,"MAXing Long",MagicNummer,0,Green);
      }
   }
   if (ShortSignal == true)
   {
      // eventuell Long Order schließen     
      if (LongOrder>0)
      {
           if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
           {
               bool LongOrderGeclosed = OrderClose(LongOrder,HandelsLots,Bid,10,Blue);
               if (LongOrderGeclosed == true) LongOrder = 0;
           }
      }
      while (ShortOrder <= 0)
      {
         ShortOrder = OrderSend(Symbol(),OP_SELL, HandelsLots,Bid,10,0,"MAXing Short",MagicNummer,0,Red);
      }
   }
   
 /*  // SL Long Deals setzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderStopLoss()==0)
      {
         double StopLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow);
      }
   }
   
   // SL Short Deals setzen
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderStopLoss()==0)
      {
         double StopLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow);
      }
   } */
   
   // TP Long Deals setzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderTakeProfit()==0)
      {
         double TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
   }
   
   // TP Short Deals setzen
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderCloseTime() == 0 && OrderTakeProfit()==0)
      {
         double TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_prozent/100)),Digits);
         bool OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      }
   }
  
   // Ticketnummern nach Closing zurücksetzen
   if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderTicket()>0 && OrderCloseTime()>0) LongOrder = 0;
   }
   
   if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true)
   {
      if (OrderTicket()>0 && OrderCloseTime()>0) ShortOrder = 0;
   }
  return(0);    
}
Angehängte Grafiken
Dateityp: jpg 1.jpg (256,8 KB, 4x aufgerufen)