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

 
ModRed:
Es gibt den MA-Indikator. Und es gibt einen HMA-Indikator, der diesem ähnlich ist. Wie kann sie in einen EA eingefügt werden? Den Code vollständig kopieren? Oder gibt es eine kürzere Variante?

Studie iCustom
 
Mitruha:

Die Idee ist sehr gut, haben Sie hier solche Programme gesehen, die den Handel auf andere Terminals übertragen oder kopieren können?

Ein solches Programm?
 
ModRed:
Es gibt den MA-Indikator. Und es gibt einen HMA-Indikator, der diesem ähnlich ist. Wie kann sie in einen EA eingefügt werden? Den Code vollständig kopieren? Oder gibt es eine kürzere Variante?
Wie wird das gemacht?
 

Hallo zusammen, ich habe ein Problem, ich habe diesen Indikator "verloren", es ist eine Art geglätteter CCI, der zwei Parameter ändern konnte, Periode und einen Multiplikator. In der ursprünglichen Version waren diese Parameter jeweils 20 und 2. Und wenn ich mich richtig erinnere, bestand der Name dieses Indikators aus zwei Wörtern und das zweite Wort begann mit dem englischen Buchstaben "C".

 
alsu:

Aber im Allgemeinen können Sie natürlich den Konstruktor überladen und ihn anstelle von Init() verwenden, schließlich handelt es sich um dieselbe Funktion. Auf welche Variante man zurückgreift, ist eine persönliche Angelegenheit eines jeden, in Geschmacksfragen gibt es bekanntlich keine Ratgeber)


Und wenn die Initialisierung fehlschlägt, z. B. bei der Verwendung der Methode Init(), kann sie so beschrieben werden, dass sie einen Wert des entsprechenden Typs und im Fehlerfall einen entsprechenden Wert zurückgibt. Der aufrufende Code weiß also, dass die Initialisierung fehlgeschlagen ist und das Objekt daher nicht verwendet werden kann. Wie erfährt der aufrufende Code von der fehlgeschlagenen Initialisierung, wenn der Konstruktor verwendet wird?

 

Hilfe Jungs, wie man die Eule nicht öffnen einen Auftrag auf dem gleichen bar als die Position wurde durch ein Signal geöffnet, und warten Sie auf einen neuen bar und überprüfen Sie das Signal wieder, ich habe so - bar von bar

dies hinzugefügt

datetime   BARflag  = 0; 
и -
int start()
{
 datetime now = Time[0];
  if(BARflag >= now) return(0);
   BARflag = now;
 
bergkamp.:

Hilfe Jungs, wie man die Eule nicht öffnen einen Auftrag auf dem gleichen bar als die Position wurde durch ein Signal geöffnet, und warten Sie auf einen neuen bar und überprüfen Sie das Signal wieder, ich habe so - bar von bar

dies hinzugefügt

и -

Etwa so:

   //---
   if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==0) {
      // выбранный ордер открыт на нулевом (текущем) баре, значит ещё рано открывать следующий
      }
   else {
      // выбранный ордер открыт не на нулевом (текущем) баре, значит можно открывать следующий
      }
 
artmedia70:

Etwa so:

Vielen Dank, wäre es einfach, die vorgeschriebenen Zeilen für das Beispiel zu entziffern? --// die ausgewählte Order ist bei Null (aktueller) Bar geöffnet, also ist es zu früh, um die nächste zu öffnen

//der ausgewählte Auftrag ist nicht auf dem Null-Balken (aktuell) geöffnet, was bedeutet, dass es OK ist, den nächsten zu öffnen ......???

 
bergkamp.:

Danke, wäre es möglich, die vorgeschriebenen Zeilen für das Beispiel zu entziffern? --//Ausgewählter Auftrag, der am Null-Balken (aktueller) geöffnet wurde, so dass es zu früh ist, den nächsten zu öffnen

//der ausgewählte Auftrag ist nicht auf dem Null-Balken (aktueller Balken) geöffnet, was bedeutet, dass es OK ist, den nächsten zu öffnen ......???

Dies ist die Funktion, die den Barren zurückgibt, der die zuletzt geöffnete Position öffnet:

//+------------------------------------------------------------------+
   int BarOpenLastPos(string sy, int timeframe, int op, int mn) {
      datetime t=0;
      int      i, j=-1, k=OrdersTotal()-1;
      for (i=k; i>=0; i--) {
         if (OrderSelect(i, SELECT_BY_POS)) {
            if (OrderSymbol()!=sy)        continue;
            if (OrderType()!=op)          continue;
            if (OrderMagicNumber()!=mn)   continue;
            if (t<OrderOpenTime()) {
               t=OrderOpenTime();
               j=i;
               }
            }
         }
      if (OrderSelect(j, SELECT_BY_POS)) return(iBarShift(sy,timeframe,OrderOpenTime()));
      return(-1);
   }
//+------------------------------------------------------------------+

Wenn die Funktion -1 zurückgibt, gibt es keine offene Position, deren Daten an die Funktion übergeben wurden.

Beispiel für die Verwendung:

if(BarOpenLastPos(Symbol(), Period(), OP_BUY, magic)>0) {
   // бар открытия последней открытой позиции Buy на текущем символе, текущем таймфрейме, 
   // с магиком magic больше нулевого --> можно открывать следующую позицию
   }

oder

if(BarOpenLastPos(USDCAD, PERIOD_M15, OP_SELL, magic0)<0) {
   // нет позиций Sell на USDCAD с магиком magic0 --> можно открывать позицию на USDCAD
   }
 

Kenner bitten um Ihre Hilfe...

Algorithmus test01

//+------------------------------------------------------------------+
//test                                                                    
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrGold
#property indicator_color2  clrBlue

#property indicator_level1    0

//--- indicator buffers
double Buf0[];
double Buf1[];

double t1[];
double t2[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(4);
   SetIndexBuffer(0,Buf0); SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,Buf1); SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,t1); 
   SetIndexBuffer(3,t2); 
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   
   {
   int i,counted_bars;
   counted_bars=IndicatorCounted();
   i=Bars-counted_bars-1;
   
int sr=24,n;
double sum,sum2;
double m1,m2;

  
   while(i>=0)
   {
   sum=0;
   sum2=0;
   
   for(n=i; n<=i+sr-1; n++) 
   {
   if(Open[i]>Open[i+1]) m1=sum=sum+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) m2=sum=sum+Close[i]-Close[n];
   
   if(Open[i]>Open[i+1]) t1[i]=sum2=sum2+Close[i]-Close[n];
   if(Open[i]<Open[i+1]) t2[i]=sum2=sum2+Close[i]-Close[n];
   }
     
   Buf0[i]=(m1+m2)/sr;
   Buf1[i]=(t1[i]+t2[i])/sr;
   
   i--;
   }
return(0);
  }
//+------------------------------------------------------------------+

Warum gibt es in Buf1 andere Werte als in Buf0? Logischerweise sollten sie gleich sein.

warum ist es möglich, für einen Wert eine Variable zu verwenden, für einen anderen Wert aber einen Puffer (Daten-Array)--> (ein Array ist für die weitere Berechnung erforderlich)? wie kann ich sowohl ein Array als auch die Variablen m1 und m2 verwenden?

Dateien:
test01.mq4  2 kb