Wie aktualisiert man die Indikatoren für Build 600+? - Seite 2

 
denn aus irgendeinem Grund (wahrscheinlich ein Fehler) werden die Arrays nicht initialisiert
 
qjol:
weil für einige resion (wahrscheinlich ein Fehler) die Arrays nicht initialisiert werden


Bisher erhalte ich keinen Wert für 'T3MA' und 'HMA'.

Wahrscheinlich ist dies der Grund, warum dieser EA keine Order öffnet, da diese beiden Indizes in ihm verwendet werden.

Oder hatte ich einen Fehler in der EA getan?

Dateien:
xxp.mq4  5 kb
 
Arav007:


Bisher erhalte ich keinen Wert für 'T3MA' und 'HMA'.

Ich habe es Ihnen bereits gesagt

qjol:
weil aus irgendeinem Grund (wahrscheinlich ein Bug) die Arrays nicht initialisiert sind

Wahrscheinlich ist dies der Grund, warum dieser EA keine Order eröffnet, da diese beiden Indizes in ihm verwendet werden.

ich weiß nicht, vielleicht, wahrscheinlich, vielleicht, möglich, wahrscheinlich, vernünftig

Oder hatte ich einen Fehler im EA gemacht?

ich glaube nicht

 
Arav007:


Ja, Sie haben Recht. Aber warum?

Ich habe sie wie von SDC beschrieben kompiliert und 0 Fehler oder Warnungen gefunden.

Was kann ich dann tun, um sie auf B-600+ zu aktualisieren?

HMA.mq4 hat einen Fehler, ändern Sie diese Zeile in init() :

   if(!SetIndexBuffer(0,ind_buffer0) && !SetIndexBuffer(1,ind_buffer1))

zu
   if(!SetIndexBuffer(0,ind_buffer0) || !SetIndexBuffer(1,ind_buffer1))
 
qjol:



Dieser EA ist nicht öffnen jeden Handel auch in Build 509, wo beide "T3MA" & "HMA" sind gut funktionieren.

Was kann dann der Grund sein?

 

Ähnlicher Fehler in T3MA.mq4, ändern in :

   if(
      !SetIndexBuffer(0,e7) ||
      !SetIndexBuffer(1,e2) ||
      !SetIndexBuffer(2,e3) ||
      !SetIndexBuffer(3,e4) ||
      !SetIndexBuffer(4,e5) ||
      !SetIndexBuffer(5,e6) ||
      !SetIndexBuffer(6,e1)
      )

Dies sind logische Fehler, die der Compiler nicht abfangen kann.

Diese Fehler sind bereits in Build 509 vorhanden, führen aber nicht zu einem Problem, da SetIndexBuffer kaum eine Chance hat, falsch zu sein. Durch diese Änderung ist es nun ein Problem:

Shortened conditions check is now used in logical operations, unlike the old MQL4 version where all expressions have been calculated and the check has been performed afterwards. Suppose there is a check of two conditions with the use of logical AND

  if(condition1 && condition2)
    {
     // some block of operations
    }

Wenn der Ausdruck condition1 falsch ist, wird die Berechnung des Ausdrucks condition2 nicht durchgeführt, da das Ergebnis false && true immer noch gleich false ist.


 
angevoyageur:

Ähnlicher Fehler in T3MA.mq4, ändern in :

Das sind logische Bugs, die der Compiler nicht abfangen kann.

Vielen Dank, Sir.

Ja, das waren die Bugs und sie funktionieren jetzt :)

Können Sie bitte nachsehen, warum der EA trotz dieser funktionierenden Indikatoren überhaupt keine Order öffnet?

Mit freundlichen Grüßen

 
Arav007:


Können Sie bitte einen Blick haben, warum der EA ist nicht öffnen keine Bestellung überhaupt trotz dieser Indikatoren arbeiten?



Zeigen Sie Ihren EA-Code
 
qjol:

Ihren EA-Code anzeigen


Hier ist er:

extern double    LotSize=0.01;
extern double    StopLoss=15.0;
extern double    TakeProfit=20.0;
extern int       iMaxOrders=10;
extern int       Slippage=5;
extern int       MagicNumber=814;


extern int       iOrderType_Buy=0;
extern int       iOrderType_Sell=1;


int BuyOrder;
int SellOrder;

int iOpenOrders_Sell;
int iOpenOrders_Buy;

int iLastError;


double dPip;
double dStopLossPrice, dTakeProfitPrice;


//+------------------------------------------------------------------+
#define  MODE_DEMA    4
#define  MODE_TEMA    5
#define  MODE_T3MA    6
#define  MODE_JMA     7
#define  MODE_HMA     8
#define  MODE_DECEMA  9
#define  MODE_SALT    10
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
extern   int      MA_Period               = 34;
extern   int      MA_Type                 = MODE_HMA;
extern   int      MA_Applied              = PRICE_CLOSE;
extern   double   T3MA_VolumeFactor       = 0.8;
extern   double   JMA_Phase               = 0.0;
extern   int      Step_Period             = 3;
extern   int      BarsCount               = 100;
extern   bool     DebugMode               = false;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{

if(Digits==3){
        dPip = 0.01;
}else{
        dPip = 0.0001;
}

return(0);

}

int deinit()
{

Comment("");
return(0);

}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+



int start()
{

   double  signal = iCustom(NULL,0,"xpMA",MA_Period,MA_Type,MA_Applied ,T3MA_VolumeFactor,JMA_Phase,Step_Period,DebugMode,3,0);
   
   bool BuyCondition = false , SellCondition = false , CloseBuyCondition = false , CloseSellCondition = false; 
   
   if (signal==1)
       BuyCondition = true;
       
   if (signal==-1)
      SellCondition = true;

///////////////////////////// Checking Buying Condition
if(BuyCondition)
{               
                double OpenPrice=Ask;

                
                dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);
                dTakeProfitPrice = NormalizeDouble(OpenPrice + TakeProfit * dPip,Digits);
                

                BuyOrder=OrderSend(Symbol() , iOrderType_Buy , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Buy Order",MagicNumber , 0,Blue);
                
                
                 if(BuyOrder>0) {
                                Print("Buy Order was Opened");
                                iLastError = 0;
                        }
                        else
                        {                       
                                iLastError = GetLastError();                    
                        
                        }
        
}
        

if(SellCondition)
{       
                OpenPrice=Bid;
                
                dStopLossPrice = NormalizeDouble(OpenPrice + StopLoss * dPip,Digits);
                dTakeProfitPrice = NormalizeDouble(OpenPrice - TakeProfit * dPip,Digits);

                SellOrder=OrderSend(Symbol() , iOrderType_Sell , LotSize,OpenPrice,Slippage ,dStopLossPrice ,dTakeProfitPrice , "Sell Order",MagicNumber , 0,Red);
                
                
                if(SellOrder>0) {
                                Print("Sell Order was opened");
                                iLastError = 0;
                        }else{
                                iLastError = GetLastError();
                        
                        }               
        }
                


return (0);

}
 

iCustom

Berechnet den angegebenen benutzerdefinierten Indikator und gibt seinen Wert zurück.

double iCustom(
string symbol, // Symbol
int zeitrahmen, // zeitrahmen
string name, // Pfad/Name des kompilierten Programms des benutzerdefinierten Indikators
... // Eingabeparameter des benutzerdefinierten Indikators (falls erforderlich)
int mode, // Zeilenindex
int shift //Verschiebung
);

Parameter

symbol

[in] Name des Symbols für die Daten, für die der Indikator berechnet werden soll. NULL bedeutet das aktuelle Symbol.

Zeitrahmen

[in] Zeitrahmen. Es kann ein beliebiger Wert der ENUM_TIMEFRAMES Aufzählung sein. 0 bedeutet den aktuellen Chart-Zeitrahmen.

Name

[in] Name des kompilierten Programms des benutzerdefinierten Indikators, relativ zum Stammverzeichnis der Indikatoren (MQL4/Indicators/). Befindet sich der Indikator in einem Unterverzeichnis, z.B. in MQL4/Indicators/Examples, muss sein Name als "Examples\\indicator_name" angegeben werden(ein doppelter Backslash "\\" muss als Trennzeichen anstelle eines einzelnen angegeben werden).

...

[in] Benutzerdefinierte Eingabeparameter für den Indikator, getrennt durch Kommas.

Die übergebenen Parameter und ihre Reihenfolge müssen mit der Deklarationsreihenfolge und dem Typ der externen Variablen des benutzerdefinierten Indikators übereinstimmen. Wenn die Werte der Eingabeparameter nicht angegeben werden, werden die Standardwerte verwendet.