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

 
IgorM:


Ihr Hund bei der Übergabe von Parametern an die Funktion, wenn Sie sie als SaveDataIND(double TempIND[]) übergeben

double TempIND[ ] ist eigentlich ein neues Array für die Funktion, aber ohne das Recht, Parameter zu ändern, versuchen Sie SaveDataIND(double & TempIND[])

Nein, ist es nicht!!! Sieht aus, als hätte der Hund doch ein Stück Fleisch gefressen... Vielen Dank, Igor.
 

Ist es möglich, in einer Funktion zu übergeben, welcher Indikator zu verwenden ist, so dass in der Zeichenfolge

TempIND[j]=iAD(NULL,PERIOD_M5,j);     

kein spezifischer Indikator ist, sondern als Funktionsparameter übergeben wird?

 
Machen Sie einen Schalter oder so etwas und schreiben Sie Ihre möglichen Indikatoren auf, indem Sie ihnen Indizes zuweisen.
 
Mathemat:
Machen Sie einen Schalter oder so etwas und schreiben Sie Ihre möglichen Indikatoren auf, indem Sie ihnen Indizes zuweisen.
Danke, Alexey, dieser Gedanke kam mir zuerst... Ich dachte, vielleicht würde jemand etwas Extremeres vorschlagen... :)
 
artmedia70:

Ist es möglich, in einer Funktion zu übergeben, welcher Indikator zu verwenden ist, so dass in der Zeichenfolge

kein spezifischer Indikator ist, sondern als Funktionsparameter übergeben wird?



Solche Aktionen werden in der Regel nicht durchgeführt - in der Regel werden die Daten an die Funktion gesendet, und die aufrufende Funktion bereitet die Daten/Array vor

es scheint, dass Ihre Konstruktion ArrayResize(TempIND,nBars); nicht korrekt ist, zumindest in anderen Programmiersprachen, der Compiler würde es nicht vermissen, da Sie double TempIND[50]; haben - d.h. das Array ist als statisch deklariert und sollte dynamisch sein (d.h. ohne Dimensionen) - double TempIND[];

ZS: und Verwirrung mit den Namen in den Variablen in der Funktion - vergessen Sie nicht, dass, wenn es eine globale Variable (global im Körper des EA), die Variable innerhalb der Funktion mit dem gleichen Namen deklariert wird völlig anders sein:

int my_int = 100;

///////////
int my_func(){

int my_int = 123;
Print("my_func my_int = ",my_int);
return(0);
}

int start(){
Print("start_func my_int = ",my_int);
return(0);
}
Dies wird gewöhnlich als Geltungsbereich von Variablen bezeichnet - benennen Sie das, was in der Funktion enthalten ist, in seinen Namen um, d.h. void SaveDataIND(double myTempIND[], int nBars) - das wird für weniger Verwirrung sorgen
 
artmedia70:

Wo wird Lot initialisiert?

Dann erst nach der Prüfung auf Lose entweder Lots_New wie zuvor geschrieben ändern, oder ihm den Wert = Lot zuweisen;



Ich danke Ihnen! Es klappt alles!
 
IgorM:


Solche Aktionen werden in der Regel nicht durchgeführt - die Daten werden normalerweise an die Funktion gesendet, und die aufrufende Funktion bereitet die Daten/Arrays auf.

Sie scheinen die falsche ArrayResize(TempIND,nBars); Konstruktion zu haben, zumindest in anderen Programmiersprachen würde der Compiler es nicht vermissen, weil Sie double TempIND[50]; haben - d.h. das Array ist als statisch deklariert, während es dynamisch (d.h. ohne Dimensionalität) sein sollte - double TempIND[];

ZS: und Verwirrung mit den Namen in den Variablen in der Funktion - vergessen Sie nicht, dass, wenn es eine globale Variable (global im Körper des EA), die Variable innerhalb der Funktion mit dem gleichen Namen deklariert wird völlig anders sein:

dies wird normalerweise als Variablenbereich bezeichnet - benennen Sie die Dinge in der Funktion um, z.B. void SaveDataIND(double myTempIND[], int nBars) - weniger Verwirrung wird

sein

1. Also, Igor, sollte ich meine eigene absolut identische Funktion für jeden Indikator schreiben?

2. Danke, ich habe es vorsichtshalber korrigiert...

3. es verwirrt mich nicht - ich kann sehen, welches Feld wo verwendet wird, es ist irgendwie einfacher für mich, es umzukehren, aber wenn ich viele Namen habe, werde ich definitiv verwirrt... Obwohl... Ich sollte mich wohl daran gewöhnen, es richtig zu schreiben...

 
cyclik33:

Ich danke Ihnen! Es klappt alles!
Gern geschehen, kommen Sie wieder... :)
 
T-G 13.07.2010 22:56 Uhr Korrektur | löschen
artmedia70:
Überprüfen Sie die Öffnung einer neuen Kerze. Wenn neu, dann öffnen Sie, wenn alt, dann nicht...
Was ist der beste Weg, dies zu tun?
 
T-G:
T-G 13.07.2010 22:56 geändert | löschen
artmedia70:
Prüfen Sie, ob eine neue Kerze geöffnet wurde. Wenn neu, dann öffnen Sie, wenn alt, dann nicht...
Wie kann man das am besten machen?

static int time = Time[0];

if (time < Time[0]){

// alte Kerze

} sonst {

// neue Kerze

time = Time[0];

}