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

 
artmedia70:
Die Größe des Arrays ist Null. Vergessen Sie nicht ArrayResize(), oder setzen Sie einfach die richtige Größe für das Array
Danke, ich habe es anders gemacht, ich fandArrayMaximum() im Indikator und übergab den Wert durchiCustom an den Expert Advisor :)
 
Hallo an alle, ich habe ein Skript, das Aufrufe von einer externen DLL verwendet, die speziell zählt Anführungszeichen und erstellt eine Datei mit den erforderlichen Quoten, gibt es eine Möglichkeit, das Skript auf einen Zeitplan laufen zu lassen? Ich möchte, dass er jeden Tag zu einer bestimmten Uhrzeit läuft?
 

Hallo,

Das Bild zeigte:

Erstes Fenster Volumenindikator, dann Geldflussindex(10) oben drauf.

Ich habe einen separatenIndikator, wo ich wieder nehmen Volume, neu zu berechnen, die mouwing mit Volume und versucht zu tun, wie im ersten Fenster - 25%, 50%, 75%.

Ich habe es so versucht, wie ich es gemacht habe, aber es sah nicht gut aus.

Wenn jemand damit Probleme hatte, teilen Sie uns bitte Ihre Vorschläge mit.

Danke

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
Er sprach von der Minus-Sekunden-Leiste. Und der Durchschnittswert der Grenzwerte. Er will sich über mich lustig machen, denke ich. Ich würde ihm sagen, dass er sich selbst ficken soll, du weißt, was ich meine :)
Zweitklässler, Siebtklässler, die noch nicht wissen, dass es kein solches Land - Belarus, kam zu den Erstklässlern und kochetsya. Und als Antwort auf jede Frage schickt er sie einfach oder ermahnt sie: Sie sollen lernen. Sie sollten über der Tür sorgfältig lesen, in welcher Branche Sie sich befinden. Ich bin noch dabei, das Alphabet zu lernen, also freuen Sie sich nicht zu sehr, ich werde es sowieso nicht verstehen.
 

Und anevillive und artmedia70 ein großes Dankeschön. Für Ihre Geduld und Ihre Zeit. Ich bin sicher, dass das nicht nur meine Meinung über Sie ist. Jeder, der diesen Thread aufruft, bittet um Hilfe und bekommt sie hauptsächlich von Ihnen. Vielen Dank!

 

Hallo, liebe Berufstätige, es ist schon lange her, dass ich mich bei Ihnen gemeldet habe

Der Punkt ist, es ist ein Expert Advisor mit 2 muwks Kreuzung und niemand mit der Eröffnung einer Bestellung gestört

void Handel()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

sonst

und so weiter...

d.h. bei Überschreiten der Distanz einen Auftrag eröffnen

Ich brauche einen Code, um den Zeitpunkt der letzten Überfahrt zu ermitteln ...

dann vom aktuellen Moment bis zum Zeitpunkt in der Historie nach einem Auftrag innerhalb eines bestimmten Zeitraums suchen... und einen Auftrag eröffnen, wenn er keinen gefunden hat

ich habe den Code der Tracer-Indikatoren zu diesem Zweck untersucht, dort scheint alles klar zu sein

aber ich weiß nicht, wie ich den ersten Balken nach der Kurvenkreuzung zeitlich so einstellen kann, dass er der ganz rechte ist

Ich bin der Meinung, dass ein Forte-Operator erforderlich ist, aber ich kann ihn nicht formulieren

 
evillive:

Das ist nicht der richtige Weg. Rufen Sie iCustom für alle 3 Puffer auf, schreiben Sie jeden Wert in eine eigene Variable und machen Sie dann mit diesen Werten, was Sie wollen.

Für die Bollinger-Streifen, für den zweiten Balken, nach dem Beispiel in der Hilfe, brauchen Sie nicht zu deaktivieren es:

Ich danke Ihnen.

Aber da ich Analphabet bin, muss ich ständig in meinem Handbuch nachsehen und habe Folgendes herausgefunden: Ein benutzerdefinierter Indikator ist ein Programm, das nach dem Algorithmus des Autors geschrieben wurde. Und in der Anleitung steht, dass iCustomden Wert des angegebenen benutzerdefinierten Indikators zurückgibt.

Aber ich verwende keine benutzerdefinierten (d.h. von mir entwickelten) Indikatoren.

Ich muss die Werte der Standardindikatoren, wenn ich sie so nennen kann, abrufen: Gleitender Durchschnitt, Bollinger-Bänder und Stochastik-Oszillator mit den von mir angegebenen Parametern. Natürlich mache ich es "aus dem Bauch heraus" - das erste, was ich gefunden habe, wird angewendet, aber die von Ihnen vorgeschlagene Variante passt mir auch nicht.

Gibt es keine Lösung, ohne all diese Puffer, Arrays und Schleifen zu verwenden? In ihnen bin ich wie ein Felsbrocken im Meer - ich versinke sofort.

 
sannin:

Hallo, liebe Berufstätige, es ist schon lange her, dass ich mich bei Ihnen gemeldet habe

Der Punkt ist, es ist ein Expert Advisor mit 2 muwks Kreuzung und niemand mit der Eröffnung einer Bestellung gestört

void Handel()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

sonst

und so weiter...

d.h. bei Überschreitung der Distanz einen Auftrag eröffnen

Ich brauche einen Code, um den Zeitpunkt der letzten Überfahrt zu ermitteln ...

dann vom aktuellen Moment bis zum Zeitpunkt in der Historie nach einem Auftrag innerhalb eines bestimmten Zeitraums suchen... und einen Auftrag eröffnen, wenn er keinen gefunden hat

ich habe den Code der Tracer-Indikatoren zu diesem Zweck untersucht, dort scheint alles klar zu sein

aber ich weiß nicht, wie ich den ersten Balken nach der Kurvenkreuzung zeitlich so einstellen kann, dass er der ganz rechte ist

Ich bin der Meinung, dass ein Forte-Operator erforderlich ist, aber ich kann ihn nicht formulieren

Dieser Expert Advisor arbeitet nicht mit einer Schnittmenge. Das Kriterium ist wie folgt: Wenn der schnelle МА um X Pips höher ist als der langsame und es keine offene Position gibt, eröffnen Sie sie auf dem Markt.

Um die Kreuzung zu finden, sollte man immer zwei Werte nehmen - den schnellen/langsamen MA vor der Kreuzung und den schnellen/langsamen MA nach der Kreuzung, um herauszufinden, wann sie sozusagen die Plätze tauschen. Mit anderen Worten

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - das schnelle МА hat das langsame von unten nach oben zwischen dem 1. und 2.

In einer Endlosschleife, von Null bis zur Erkennung der Kreuzung, wird es X+1 Bar sein, und Sie brauchen die Zeit von Bar X, das heißt, der letzte Bar nach der Kreuzung.

 
rapid_minus:

Ich danke Ihnen.

Aber da ich Analphabet bin, muss ich mich ständig durch das Lehrbuch wühlen, und das habe ich herausgefunden: Ein benutzerdefinierter Indikator ist ein Programm..., das nach dem Algorithmus des Autors geschrieben wurde. Und in der Anleitung steht, dass iCustomden Wert des angegebenen benutzerdefinierten Indikators zurückgibt.

Aber ich verwende keine benutzerdefinierten (d.h. von mir entwickelten) Indikatoren.

Ich muss die Werte der Standardindikatoren, wenn ich sie so nennen kann, abrufen: Gleitender Durchschnitt, Bollinger-Bänder und Stochastik-Oszillator mit den von mir angegebenen Parametern. Natürlich mache ich es "aus dem Bauch heraus" - das erste, was ich gefunden habe, wird angewendet. Aber die von Ihnen vorgeschlagene Variante scheint mir auch nicht geeignet.

Gibt es keine Lösung, ohne all diese Puffer, Arrays und Schleifen zu verwenden? Ich bin wie ein Felsbrocken im Meer - ich versinke sofort darin.

Richtig, wenn Sie Bollinger Bands verwenden, brauchen Sie iCustom nicht aufzurufen, aber iBands sollte für jede Indikatorlinie separat aufgerufen werden. Der alternative Weg, ohne den Indikator aufzurufen ("ohne Puffer, Arrays, Schleifen zu verwenden"), besteht darin, im Expert Advisor den Berechnungsalgorithmus dieses Indikators zu implementieren und den gewünschten Wert bei Bedarf zu lesen (Sie können nur den gewünschten Wert lesen, zum Beispiel nur die untere Zeile). Aber ganz ohne Schleifen und Arrays wird es trotzdem nicht gehen.
 
sannin:

Hallo, liebe Berufstätige, es ist schon lange her, dass ich mich bei Ihnen gemeldet habe

Der Punkt ist, es ist ein Expert Advisor mit 2 muwks Kreuzung und niemand mit der Eröffnung einer Bestellung gestört

void Handel()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0);

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T)) return;

NumbUp=0; NumbDn=0;

}

sonst

und so weiter...

d.h. bei Überschreiten der Distanz einen Auftrag eröffnen

Ich brauche einen Code, um den Zeitpunkt der letzten Überfahrt zu ermitteln ...

dann vom aktuellen Moment bis zum Zeitpunkt in der Historie nach einem Auftrag innerhalb eines bestimmten Zeitraums suchen... und einen Auftrag eröffnen, wenn er keinen gefunden hat

ich habe den Code der Tracer-Indikatoren zu diesem Zweck untersucht, dort scheint alles klar zu sein

aber ich weiß nicht, wie ich den ersten Balken nach der Kurvenkreuzung zeitlich so einstellen kann, dass er der ganz rechte ist

Ich bin der Meinung, dass ein Forte-Operator erforderlich ist, aber ich kann ihn nicht formulieren

Hier ist ein Beispiel, in dem ich gezeigt habe, wie man die Anzahl der Takte nach dem Überqueren von 2 Muves messen kann.
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }
Grund der Beschwerde: