Mehr als einen EA gleichzeitig ausführen

 
Mein EA läuft gut, wenn er alleine läuft, aber wenn ich versuche, den gleichen EA auf einem anderen Symbol zur gleichen Zeit auf dem gleichen Profil laufen zu lassen, dann läuft der zweite EA nicht sehr gut oder überhaupt nicht oder es gibt viele Fehler. Das passiert auch, wenn ich Symbol() und unterschiedliche magische Zahlen für die beiden separaten Charts verwende. Es passiert sogar, wenn ich verschiedene Versionen desselben Codes ausführe (d. h. die EA-Dateinamen und die magischen Zahlen sind unterschiedlich, aber der Code ist ansonsten identisch). Habe ich vielleicht einen Konflikt mit den globalen Variablen oder gibt es einen anderen Grund, warum die zweite Version einfach nicht funktioniert? Vielen Dank!
 
Sneck55:
Mein EA läuft gut, wenn er alleine läuft, aber wenn ich versuche, den gleichen EA auf einem anderen Symbol zur gleichen Zeit auf dem gleichen Profil laufen zu lassen, dann läuft der zweite EA nicht sehr gut oder überhaupt nicht oder es gibt viele Fehler. Das passiert auch, wenn ich Symbol() und unterschiedliche magische Zahlen für die beiden separaten Charts verwende. Es passiert sogar, wenn ich verschiedene Versionen desselben Codes ausführe (d. h. die EA-Dateinamen und die magischen Zahlen sind unterschiedlich, aber der Code ist ansonsten identisch). Habe ich vielleicht einen Konflikt mit den globalen Variablen oder gibt es einen anderen Grund, warum die zweite Version einfach nicht funktioniert? Vielen Dank!

Da es kein Problem sein sollte, denselben EA auf verschiedenen Charts laufen zu lassen (ich tue das ohne Probleme), sollten Sie den Code bereitstellen...
 

Ja, wenn der zweite hängt, versucht er wahrscheinlich, die gleiche Ressource wie der erste zu verwenden.


Sneck55


Zeigen Sie uns besser den Code und wir zeigen Ihnen, welches der Übeltäter ist, wenn es nicht zu zeitaufwendig ist.

 
benutzen Sie die SRC-Taste!
 
gooly: Benutze den SRC-Button!!
Welcher Teil von SRC war unklar? Warum hast du es nicht getan? Bearbeiten Sie Ihren Beitrag!

  1. Video abspielen
    Bitte bearbeiten Sie Ihren Beitrag.
    Für große Mengen an Code, fügen Sie es.

  2.          if(BuyTicket != 0)                                        
                {                                                      
                if(SmallMA<MediumMA)
                {
                for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
                {
                   :
                    Counter--;
                }
    Wenn der Strom ausfällt, das Betriebssystem abstürzt, das Terminal oder der Chart versehentlich geschlossen wird, ist das BuyTicket beim nächsten Mal verloren. Sie werden eine offene Order haben, aber nie versuchen, sie zu schließen. Sie brauchen sich die Ticketnummer nicht zu merken, wenn Sie eine OrderSelect-Schleife verwenden.
  3. Sie MÜSSEN beim Schließen/Löschen abwärts zählen. Ein Zurückgehen wird nicht funktionieren, wenn ein anderer EA einen Auftrag schließt. Schleifen und Schließen oder Löschen von Aufträgen - MQL4 forum
  4. Vereinfachen Sie Ihre Booleschen Operatoren
    // if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true;
    // else MABuyFanning = false;
       MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
  5. if(NewBar == true)
    Sie würden niemals if( (2+2) == 4) == true) schreiben, oder? if(2+2 == 4) ist ausreichend. Schreiben Sie also nicht if(bool == true), sondern verwenden Sie if(bool) oder if(!bool).
 
SRC-Taste wurde verwendet, um den Beitrag zu erstellen
 
Sneck55:
SRC-Taste wurde verwendet, um den Beitrag zu erstellen

ja, aber die erste Zeile "Sorry for the delay...." ist kein Code und hat alles ruiniert
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern bool CheckOncePerBar = true;
extern double FixedLotSize = 1;
extern double SystemStopLoss = 150;
extern double TakeProfit = 0;
extern int Slippage = 5;
extern int MagicNumber = 3574;

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA;
int Counter;



//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point
if(CalcDigits == 0) CalcPoint = 1;//Dow      
if(CalcDigits == 1) CalcPoint = 0.1;   
if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex
if(CalcDigits == 3) CalcPoint = 0.01;//Yen
if(CalcDigits == 4) CalcPoint = 0.0001;//Not used
if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex
InternalStopLoss = SystemStopLoss*CalcPoint;
   
   return(INIT_SUCCEEDED);
  }
//-----------------------------------------------

void OnTick()
{

   if(CheckOncePerBar == true)
      {
      if(ThisBarOpen != Open[0])
         {
         ThisBarOpen = Open[0];
         NewBar = true;
         }
      else NewBar = false;
      }
    else NewBar = true;

if(NewBar == true)
{


//Reset Moving Averages
SmallMA = iMA(NULL,0,8,0,1,0,0);
MediumMA = iMA(NULL,0,10,0,1,0,0);
LargeMA = iMA(NULL,0,50,0,1,0,0);


   if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true;
   else MABuyFanning = false;
      
   if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; 
   else MASellFanning = false;   



if(BuyTicket == 0 && MABuyFanning == true)
 {
      RefreshRates();
      BuyStopLoss = Bid - InternalStopLoss;
   //   while(IsTradeContextBusy()) Sleep(10);
      BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green);
          if(BuyTicket == -1)
            {
            ErrorCode = GetLastError();
            Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode);
            ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss);
            Print(ErrLog);
            //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc.
            BuyTicket = 0;
            } 
 }   


if(SellTicket == 0 && MASellFanning == true)
 {
      RefreshRates();
      SellStopLoss = Ask + InternalStopLoss;
    //  while(IsTradeContextBusy()) Sleep(10);
      SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red);
          if(SellTicket == -1)
            {
            ErrorCode = GetLastError();
            Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode);
            ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss);
            Print(ErrLog);
            SellTicket = 0;
            } 
  }  

//Exits

         if(BuyTicket != 0)
            {
            if(SmallMA<MediumMA)
            {
            for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
            }
            }

         if(SellTicket != 0)
            {
            if(SmallMA>MediumMA)
            {
            for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL)
                  {
               //   while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red);
                  if(Closed == true) SellTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine");                  
                  }
            Counter--;               
                }
            }
            }
}            
return;   
}
 
Sneck55: Die SRC-Schaltfläche wurde verwendet, um den Beitrag zu erstellen.
qjol: ja, aber die erste Zeile "Sorry for the delay...." ist kein Code und hat alles ruiniert
Warum haben Sie Ihren ursprünglichen Beitrag nicht bearbeitet?
 
Der Code ist extrem einfach, aber je mehr Fenster ich ihn ausführe, desto schlechter wird er ausgeführt. Ich habe es auf 4 verschiedenen Symbolen laufen lassen, aber es fängt sogar bei einem Symbol nach ein paar Minuten an zu versagen. Es fängt auch gut an, aber je länger ich es laufen lasse (nach ein paar Stunden oder so), desto langsamer und ungenauer wird es. Manchmal kann es bis zu einer Minute dauern, um jeden EA aus jedem Fenster zu entfernen, wobei der kleine Kreis neben dem Cursor ewig im Kreis läuft. Ich habe einen guten, schnellen PC, den ich gerade defragmentiert und nach Viren gescannt habe - ich habe es auch auf meinem Laptop versucht, mit genau den gleichen Ergebnissen. Ich habe versucht, den gesamten M1-Verlauf herunterzuladen, aber das macht keinen Unterschied. Könnte es sich vielleicht um eine Art Speicherproblem handeln? Versucht MT4, die gleichen Ressourcen immer wieder zu verwenden? Solange das Problem nicht behoben ist, kann ich mich beim Handel mit meinem Live-Konto nicht darauf verlassen!
 
Das ist interessant...