Aynı anda birden fazla EA çalıştırma

 
EA'm kendi kendine çalışırken iyi çalışıyor ancak aynı EA'yı aynı profilde aynı anda farklı bir Sembol üzerinde çalıştırmayı denersem, ikincisi çok iyi çalışmıyor veya hiç çalışmıyor veya çok sayıda var. hatalar. Bu, iki ayrı çizelge için Symbol() ve farklı sihirli sayılar kullansam bile oluyor. Aynı kodun farklı sürümlerini çalıştırsam bile oluyor (yani, EA dosya adları ve sihirli sayılar farklıdır, ancak aksi takdirde kod aynıdır). Belki de Global değişkenlerle bir tür çatışmam var mı yoksa ikincisinin askıda kalmasının başka bir nedeni var mı? Teşekkürler.
 
Sneck55 :
EA'm kendi kendine çalışırken iyi çalışıyor ancak aynı EA'yı aynı profilde aynı anda farklı bir Sembol üzerinde çalıştırmayı denersem, ikincisi çok iyi çalışmıyor veya hiç çalışmıyor veya çok sayıda var. hatalar. Bu, iki ayrı çizelge için Symbol() ve farklı sihirli sayılar kullansam bile oluyor. Aynı kodun farklı sürümlerini çalıştırsam bile oluyor (yani, EA dosya adları ve sihirli sayılar farklıdır, ancak aksi takdirde kod aynıdır). Belki de Global değişkenlerle bir tür çatışmam var mı yoksa ikincisinin askıda kalmasının başka bir nedeni var mı? Teşekkürler.

Aynı EA'yı farklı grafiklerde çalıştırmak sorun olmayacağı için (ben sorunsuz yapıyorum) kodu vermeniz gerekir.. ?
 

Evet. İkincisi kilitleniyorsa, büyük olasılıkla ilkiyle aynı kaynağı kullanmaya çalışıyordur.


Sneck55


Bize kodu gösterseniz iyi olur ve zaman alıcı değilse, suçlunun hangisi olduğunu size gösterelim.

 
SRC -düğmesini kullanın!!
 
gooly : SRC -düğmesini kullanın!!
SRC'nin hangi kısmı belirsizdi? Neden yapmadın? Gönderinizi düzenleyin!

  1. Video oynatmak
    Lütfen yayınınızı düzenleyin .
    Büyük miktarda kod için ekleyin.

  2.          if (BuyTicket != 0 )                                        
                 {                                                      
                 if (SmallMA<MediumMA)
                {
                 for (Counter = 0 ; Counter <= OrdersTotal ()- 1 ; Counter++)
                {
                   :
                     Counter--;
                }
    Güç kesilirse, işletim sistemi çökerse, terminal veya tablo yanlışlıkla kapatılırsa, bir sonraki BuyTicket kaybolacaktır. Açık bir emriniz olacak ama asla kapatmaya çalışmayın . OrderSelect döngüsü kullandığınızda bilet numarasını hatırlamanız gerekmez.
  3. Kapatırken/silerken geri saymanız GEREKİR. Başka bir EA bir siparişi kapatırsa, geri dönmek işe yaramaz. Döngüler ve Emirleri Kapatma veya Silme - MQL4 forum
  4. Booleanlarınızı basitleştirin
     // if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true;
    // else MABuyFanning = false;
       MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
  5.  if (NewBar == true )
    Asla if( (2+2) == 4) == true) yazmazsın , değil mi? if(2+2 == 4) yeterlidir. Bu nedenle if(bool == true) yazmayın, sadece if(bool) veya if(!bool) kullanın.
 
Gönderiyi yapmak için SRC düğmesi kullanıldı
 
Sneck55 :
Gönderiyi yapmak için SRC düğmesi kullanıldı

evet, ama ilk satır "Gecikme için üzgünüm..." kod değil ve her şeyi mahvetti
 
#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 : yapmak için SRC butonu kullanıldı
qjol : evet, ama ilk satır "Gecikme için üzgünüm..." kod değil ve her şeyi mahvetti
Orijinal yayınınızı neden düzenlemediniz ?
 
Kod son derece basit ve yine de onu ne kadar çok pencerede çalıştırırsam o kadar kötü performans gösteriyor. 4 farklı Sembol üzerinde çalıştırıyorum ancak birkaç dakika sonra 1 sembolde bile başarısız olmaya başlıyor.

Ayrıca iyi başlıyor ama ne kadar uzun süre çalıştırırsam (birkaç saat kadar sonra) o kadar yavaş ve yavaş olur ve daha az doğru olur. Bazen kaldırılması bir dakika kadar sürebilir

her pencereden her bir EA, imleç tarafından küçük bir daire ile sadece çağlar boyunca dönüyor ve dönüyor. Birleştirdiğim ve virüs taraması yaptığım iyi ve hızlı bir bilgisayarım var -

tam olarak aynı sonuçlarla dizüstü bilgisayarımda da denedim. Tüm M1 geçmişini indirmeyi denedim ama hiçbir fark yaratmıyor. Belki bir tür bellek sızıntısı sorunu olabilir mi?

MT4 aynı kaynakları tekrar tekrar kullanmaya mı çalışıyor? Açıkçası, sorun çözülene kadar canlı hesabımda işlem yapacağına güvenemeyeceğim!
 
Bu ilginç...
Neden: