[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 332

 
Stepan241 >> :

Ich versuche, einen Indikator zu schreiben. Die Idee ist einfach: Wir werden einen Durchschnitt bilden (Stärke der Bullen - Stärke der Bären). Natürlich nur für einen bestimmten Zeitraum.



int start()
{
int i=Bars-IndicatorCounted()-1;
while(i>=0)
{
Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_EMA,i);
MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i);
Buf_0[i]=MA_Bulls[i];
i--;
}
Rückkehr;
}

Ich zeige nur geglättete Bullen an Buf_0[i]=MA_Bears[i]; dies geschieht, um in einem bestimmten Stadium der Indexdarstellung zu kontrollieren. Nicht einmal EXAKT. Wenn ich sie mit einer Periode von 1 glätte, müssen sie in der Tat eingebettete Stiere wiederholen. Daher bin ich zu dem Schluss gekommen, dass etwas in der Zeile MA_Bulls[i]=iMAOnArray(Bulls_array,100,MA_Period,0,MODE_SMA,i) falsch ist; Ich verstehe nicht, was genau...HELP me!!!! Ich habe 3 Tage lang Handbücher und Dokumentationen durchgesehen. DANKESCHÖN!


Sie sollten zuerst die Datenfelder von Bullen und Bären bilden und sie dann mit dem nächsten Zyklus glätten, denn Sie haben sie noch nicht gebildet und verwenden bereits die Glättung, es gibt keine Daten zum Glätten?

 
Urain писал(а) >>

Bilden Sie zuerst die Datenfelder von Bullen und Bären und verwenden Sie dann den nächsten Zyklus, um sie zu glätten, weil Sie sie noch nicht gebildet haben und bereits die Glättung verwenden, und es keine Daten zum Glätten gibt?

Übersetzung aus

int start()
{
  int i, limit=Bars-IndicatorCounted()-1;
  for ( i= limit; i>=0; i--){
    Bears_array[ i]=iBearsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
    Bulls_array[ i]=iBullsPower(NULL,0, PeriodPower,PRICE_CLOSE, i);
  }
  for ( i= limit; i>=0; i--){
    MA_Bears[ i]=iMAOnArray( Bears_array,0, MA_Period,0,MODE_EMA, i); 
    MA_Bulls[ i]=iMAOnArray( Bulls_array,100, MA_Period,0,MODE_SMA, i); 
  }
  return;
}
 

costy_ писал(а) >>

extern string xxxxxxxxxxxxx="x=0 сегодня х=1 вчера итд";
extern int х=0;
int середина=(iHigh(0,PERIOD_D1, х)-iLow(0,PERIOD_D1, х))/2;
if(Bid> середина)...;
if(Ask< середина)...;


extern datetime some_time=D'14:56';
int середина_some_time=(iHigh(0,0,iBarShift(0,0, some_time))-iLow(0,0,iBarShift(0,0, some_time)))/2;
if(Bid> середина_some_time)...;
if(Ask< середина_some_time)...;

Vielen Dank, ich komme der Sache näher. Ein Punkt ist nicht ganz klar.

14:56' - date literal string is incomplete dies ist die Warnung, die ich vom Computer erhalten habe.

Soweit ich das verstanden habe, wird immer noch das Datum abgefragt, aber ich brauche kein bestimmtes Datum. Was ich brauche, ist ein täglicher Vergleich des aktuellen Preises mit dem Preis zu einem bestimmten Zeitpunkt am selben Tag. Bitte klären Sie den Punkt.

 
alsu >> :

Warum müssen Sie sie überhaupt über iCast anrufen? Ist es für die Wiedervereinigung? Schreiben Sie einen separaten Indikator-Wrapper für jeden von ihnen und rufen Sie sie durch iCustom...

Das Problem ist, dass ich diese beiden Indikatoren (AO und AC) geändert habe und nun möchte, dass die Balken entsprechend den geänderten Indikatoren gefärbt werden. Oder gibt es eine andere Möglichkeit, dies zu tun? Ich habe erst kürzlich mit MQL begonnen...

 
Necron >> :

Das Problem ist, dass ich die beiden Indikatoren (AO und AC) neu erstellt habe, und nun möchte ich, dass die Balken entsprechend den geänderten Indikatoren gefärbt werden. Oder gibt es eine andere Möglichkeit, dies zu tun? Ich habe erst vor kurzem angefangen, MQL zu lernen...

Also, was haben Sie neu gemacht und nennen es, was ist das Problem? Wenn die geänderten Indikatoren zum Beispiel AO und AC heißen, lautet der Aufruf

iCustom(0,0,"AO",0,shift);
iCustom(0,0,"AС",0,shift);

oder Sie können Ihre eigenen Parameter hinzufügen

 
future >> :

Vielen Dank, ich komme der Sache näher. Ein Punkt ist nicht ganz klar.

14:56' - date literal string is incomplete dies ist die Warnung, die ich vom Computer erhalten habe.

Soweit ich das verstanden habe, wird immer noch das Datum abgefragt, aber ich brauche kein bestimmtes Datum. Was ich brauche, ist ein täglicher Vergleich des aktuellen Preises mit dem Preis zu einem bestimmten Zeitpunkt am selben Tag. Bitte klären Sie den Punkt.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара
 

costy_ писал(а) >>

future >>:

Vielen Dank, ich

komme der Sache näher.

Ein Punkt ist nicht ganz klar.

14:56' - date literal string is incomplete diese Warnung erhielt ich vom Computer.

Ich verstehe, dass er immer noch das Datum will, aber ich brauche kein bestimmtes Datum, ich brauche den aktuellen Preis jeden Tag im Vergleich zum Preis zu einer bestimmten Uhrzeit desselben Tages

.

Bitte klären Sie den Punkt.


string час="15";
string мин="15";
datetime some_time=D'Year().Month().Day() час:мин';//попробуй так ____ но на тестере не будет работать, так как текущие год месяц и день 
привяжитесь к барам так проще вместо iBarShift(0,0, some_time) номер бара

Ich möchte jedoch wissen, ob es möglich ist, die Bindung bis zu einer bestimmten Zeit aufrechtzuerhalten. Wie kann man in MQL4 den Geldkurs um 14.00 Uhr eines jeden Handelstages angeben?

 

skifodessa 05.12.2009 14:07


Guten Tag zusammen.

Bitte sagen Sie mir, wie ich die Anzahl der Überschreitungen eines bestimmten Preisniveaus berechnen kann. Ich möchte, dass mein Auftrag nach 3 (4,5...), aber nicht nach der ersten Kreuzung geöffnet wird.

Ich danke Ihnen.
------------------------------------------------------------

Sie können den Algorithmus ausprobieren


Wenn (Preis des aktuellen Balkens>Leveland-Preis des vorherigen Balkens<Level)dann {Zähler um eins erhöhen}

Wenn (Zähler>3) dann {Auftrag öffnen; Zähler auf Null setzen}

Schreiben wir nun dasselbe in der üblichen Sprache (ich schreibe nur Blöcke, Sie können sie an den erforderlichen Stellen einfügen)

Extern int Chet=10; // nach wie vielen Überschreitungen soll die Bestellung geöffnet werden

Extern double Uroven=1.6566; // nachdem der Preis das Niveau überschritten hat, um mit dem Zählen zu beginnen.

In der Startfunktion sind die Bedingungen ungefähr wie folgt

int k;

if(Open[0]>Uroven && Open[1]<Uroven)k=k+1;// hier wird eine UP-Kreuzung berücksichtigt

if(k>Chet){OrderSend(.......);k=0};

Im Allgemeinen ist die Frage nicht sehr schwierig. Das Buch über MCL erklärt die Grundlagen der ALGORITHMIK

 

FOR Vinin schrieb >>.

Danke für den Tipp, aber er hilft nicht weiter. Denn Sie haben gerade die While-Schleife durch eine FOR-Schleife ersetzt.

FOR Urain schrieb(a) >>

Die nächsten beiden Zeilen bilden gerade das richtige Feld.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Sie haben wohl gedacht, dass die Funktion iMAOnArray ein bereits gebildetes Array übergeben soll. Die Bildung mit der FOR-Schleife hat nicht geholfen. Das liegt daran, dass es sich nicht um das Array handelt, das an diese Funktion (iMAOnArray) übergeben wird, sondern um dessen NAME. Und das Feld wird PERSÖNLICH bearbeitet.

durch Änderung von i in der Zeichenfolge MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Ich habe das Problem gelöst. Es ist viel tiefer, als es scheint. Wenn Sie diese Verarbeitung nur im Expert Advisor anwenden, gibt es keine Probleme, aber wenn Sie ein Diagramm damit erstellen, gibt es trotzdem eine Störung. Der Punkt ist, dass die Arrays invers indiziert sind. Die Funktion iMAOnArray hat eine direkte (von links nach rechts) Indizierung, während das Diagramm von rechts nach links indiziert ist. Vielen Dank an Garfich für diese Erklärung.



 
Stepan241 >> :

FOR Vinin schrieb >>.

Danke für den Tipp, aber er hilft nicht weiter. Denn Sie haben gerade die While-Schleife durch eine FOR-Schleife ersetzt.

FOR Urain schrieb(a) >>

Die nächsten beiden Zeilen bilden gerade das richtige Feld.

Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);
Bulls_array[i]=iBullsPower(NULL,0,PeriodPower,PRICE_CLOSE,i);

Urain Sie haben wohl gedacht, dass die Funktion iMAOnArray ein bereits gebildetes Array übergeben soll. Die Bildung mit der FOR-Schleife hat nicht geholfen. Das liegt daran, dass es sich nicht um das Array handelt, das an diese Funktion (iMAOnArray) übergeben wird, sondern um dessen NAME. Und das Feld wird PERSÖNLICH bearbeitet.

durch Änderung von i in der Zeichenfolge MA_Bears[i]=iMAOnArray(Bears_array,0,MA_Period,0,MODE_SMA,i);

Ich habe das Problem gelöst. Es ist viel tiefer, als es scheint. Wenn Sie diese Verarbeitung nur im Expert Advisor anwenden, gibt es keine Probleme, aber wenn Sie es verwenden, um ein Diagramm zu erstellen, werden Sie trotzdem eine Störung erhalten. Der Punkt ist, dass die Arrays invers indiziert sind. Die Funktion iMAOnArray hat eine direkte (von links nach rechts) Indizierung, während das Diagramm von rechts nach links indiziert ist. Vielen Dank an Garfich für diese Erklärung.

Ich weiß nicht, was das Problem war, aber Vinin hat es richtig geschrieben (es spielt keine Rolle, ob for oder while), die Hauptsache ist, dass zuerst die Schleife das Datenarray bildet und dann die nächste Schleife die iMA daraus bildet,

und der String Bears_array[i]=iBearsPower(NULL,0,PeriodPower,PRICE_CLOSE,i); füllt nur einen i-ten Wert des Arrays

ohne Schleife, wird das Array nicht erzeugt.

Grund der Beschwerde: