Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 924

 

Hallo, können Sie mir einen Tipp geben?

Auf der Suche nach dem Hoch, das dem Hoch des ersten Balkens in der Historie entspricht, speichere ich den Index des gefundenen Balkens in der Variablen High_i

Ichmache das so:

 highr=High[i];
      High_i=0;
      for(j=i+3;j<=i+m;j++)
         {
         if(j>Bars-1) break;
         
         if(!ok1)
            {
            if(MathAbs(High[j]-highr)  <= n*Point)
               {
               
               High_i = j;


Nun prüfe ich, ob die Hochs vor und nach den drei Balken unter dem Hoch des ersten Balkens liegen sollten.

Ich muss dies in die Schleife aufnehmen:

if(High[High_i]>High[High_i-3]&&High[High_i]>High[High_i-2]&&High[High_i]>High[High_i-1]
   && High[High_i]>High[High_i+3]&&High[High_i]>High[High_i+2]&&High[High_i]>High[High_i+1])

Einerseits versuche ich, es so zu kontrollieren

 for(jl=High_i;jl<=High_i+3;jl++) 
    {
    // if (High_i!=0);
       
      if ( High[High_i]>High[jl])
          {
               cnt1++;
               if(cnt1>=3)
                  {
                  ok1=true;
                 BuyBuffer[i]=highr+5*Point;
                  }
               }
            }

Bitte um Hilfe.




	          
 
tatianati:
Nun wird geprüft, ob das hai der drei Takte davor und danach kleiner ist als das hai des gefundenen Taktes.

Das könnte so aussehen:

bool Status_Successful = true;

for(int x=(High_i-3); x<=(High_i+3); x++) {
   if(x==High_i) {
      continue;
   }
   if(High[x]>=High[High_i]) {
      Status_Successful = false;
      break;
   }
}


if(Status_Successful==true) {
   ....
}
 
atztek:
Wahrscheinlich so:



Danke, es funktioniert.

Aber nachdem die Anzahl der Balken erhöht wurde, etwa so:

for(int x=(High_i-7); x<=(High_i+7); x++)

entsteht.

Arrayaußerhalb des Bereichs in 'ta_v1_05.mq4' (174,11)

Zeile 174, diese hier:

   if(High[x]>=High[High_i])

Bitte sagen Sie mir, wie ich das Problem beheben kann.

 
und sind Sie sicher, dass x eine natürliche Zahl oder 0 ist? wenn high_i = z.B. 6, dann ist x = -1, und high[-1] ist bereits ein Problem. fügen Sie vielleicht eine Prüfung in Zeile 173 hinzu, wenn (x < 0) weiter;
 
tatianati

danik: bist du dir sicher, dass x eine natürliche Zahl oder 0 ist? wenn high_i = z.B. 6, dann ist x = -1 und high[-1] ist bereits ein Problem. füge vielleicht eine Prüfung hinzu, wenn (x < 0) weiter zu Zeile 173;
Für drei Takte wurde eine solche "Kontrolle" durchgeführt:
      for(j=i+3;j<=i+m;j++)

Für die anderen Werte müssen Sie sie überall ändern.
Sie könnten damit beginnen und dann sehen, ob das Problem dadurch gelöst wird oder ob es noch etwas anderes gibt, das behoben werden muss.
 
Hallo, könnten Sie mich bitte beraten, es gibt eine Funktion zum Schließen von Aufträgen, aber die Aufträge werden aus irgendeinem Grund nicht geschlossen, ich kann nicht verstehen, was falsch ist
void CloseOrders(int otype)
    {
      int ClosePrice;
      
      if (otype == OP_BUY) ClosePrice=Bid;
      if (otype == OP_SELL) ClosePrice=Ask;
    
       
      int total = OrdersTotal();
      for(int i = total-1; i >= 0; i--)
      {    
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         { 
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
           OrderClose(OrderTicket(),OrderLots(),ClosePrice,Slippage,Yellow);
         }
      }
 
lufer:
Hallo, könnten Sie mich bitte beraten, es gibt eine Funktion zum Schließen von Aufträgen, aber die Aufträge werden aus irgendeinem Grund nicht geschlossen, ich kann nicht herausfinden, was falsch ist

Der Preis kann nicht int sein!

int ClosePrice;
 
TarasBY:

Der Preis kann nicht int sein!

Oh ja!!! Ich danke Ihnen!!!
 
Helfen Sie mir, einen Fehler im Code zu finden. Es scheint, dass er zwei Linien basierend auf ZeroLag MACD-Indikator-Daten für EUR\USD und GBP\USD zeichnet, aber nichts passiert. Hier ist der Code
#property indicator_separate_window
#property indicator_buffers 2
#property  indicator_color1 Red
#property  indicator_color2 DarkBlue
#property  indicator_width1 1
#property  indicator_width2 1
//+------------------------------------------------------------------+

extern string ExtParam1="EURUSD";
extern string ExtParam2="GBPUSD";
extern int FastEMA=12;
extern int SlowEMA=24;
extern int SignalEMA=9;

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexLabel(0,ExtParam1); 

SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexLabel(1,ExtParam2); 
//----
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars --; 
int limit=Bars-IndicatorCounted();
int bar;
for(bar=0; bar<limit; bar++)
ExtMapBuffer1[bar]=iCustom(ExtParam1,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam1,0,Time[bar],false));
ExtMapBuffer2[bar]=iCustom(ExtParam2,Period(),"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,iBarShift(ExtParam2,0,Time[bar],false));
return(0);
}  
 
ASZmyrov:
Bitte helfen Sie mir, einen Fehler im Code zu finden. Es scheint, dass ZeroLag MACD zwei Linien mit Daten von EUR\USD und GBPUSD Indikatoren zeichnen sollte, aber nichts passiert. Hier ist der Code

Gerüchten zufolge funktioniert IndicatorCounted() nicht, außerdem ist die Neuberechnung der Indikatoren korrekter, um von der Vergangenheit zur Gegenwart zu zählen, und es gibt noch einige weitere Fehler im Code.

P.S. ZeroLag MACD selbst sollte auch für die neue virtuelle Maschine"angepasst" werden.

Dateien: