[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 615

 

rigonich

Ist das ein Scherz oder etwas anderes? Wo lachen Sie?

TarasBY

Sie können nicht? Nun, das hätten Sie nicht tun sollen.

Ich habe auf Russisch geschrieben - im Lehrbuch steht fast nichts über die Deklaration von globalen Variablen. Ich weiß zum Beispiel nicht, was fGet_MineGV() ist;

Ist es eine Funktion? Wenn ja, was bewirkt sie? Die Suche nach fGet im Lehrbuch liefert keine Ergebnisse.

Was sollte ich in int init() deklarieren? Sie haben geschrieben:

{
fGet_MineGV();
}


Hier in meinem EA sieht die Initialisierung von init so aus:

int init()
{
ArrayInitialize(buf3,0);
ArrayInitialize(b1,0);
ArrayInitialize(b2,0);
ArrayInitialize(b3,0);
ArrayInitialize(b4,0);


Comment("Berechne Durchschnittswert "+ind);
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="Durchschnittswert "+ind+""+DoubleToStr(m1,2);
tm=TimeCurrent();
int q=0,ticket=-1;
double opr=0,lot1=0;
for(q=0;q<OrdersTotal();q++)
{

und so weiter, 100 weitere Zeilen. Wo genau, an welchem Ort und vor allem, was genau soll ich hier anmelden? Ist es wirklich so schwer, auf Russisch zu schreiben? Lass uns die Finger krümmen, ja.

 
yosuf:
Wie lautet der Code?
Gibt es nicht einen Code in Ihren EAs? Bei allen Expert Advisors ist fast alles gleich! Sie unterscheiden sich lediglich in der Art der Kodierung und den Präferenzen des Kodierers. Kümmern Sie sich um Ihre und machen Sie weiter so!
 
rigonich:

Übrigens habe ich lange über diese Frage nachgedacht, sie aber nie herausgefunden, sondern einfach vergessen. Woher bekommt der Prüfer die Stopplay-Werte? Wenn die aktuellen Werte vom Server geändert werden können, dann sollte das Testergebnis vom Zeitpunkt des Tests abhängen, was nicht der Fall ist, wie ich überprüft habe. Oder ist der in den Symboleigenschaften gespeicherte Wert und der vom Server bei der Anfrage angegebene Wert nicht identisch?
Die Variablen aus der Marktumgebung befinden sich in der Dienstdatei symbols.raw (vermutlich), die sich im Ordner server history befindet. Wenn keine Verbindung zum Server besteht oder an Wochenenden, entnimmt das Terminal die letzten Daten aus dieser Datei.
 
xant:

rigonich

Ist das ein Scherz oder etwas anderes? Wo lachen Sie?

TarasBY

Sie können nicht? Dann tun Sie es nicht.

Hören Sie zu, Sie schlappohriger Freak, man hat Ihnen geholfen, und Sie können nicht einmal einen vorgefertigten Code in Ihren Expert Advisor bringen! Und Sie machen gerade Ihren Mund auf. Einem Idioten kann man es wenigstens erklären! BY.
 

TarasBY

rührt sich nicht vom Fleck, Arschloch. Du bist der Freak. Weil Sie nicht einmal zwei Wörter auf Russisch richtig artikulieren können.

Sind Sie ein Arschloch? Nun, ich muss Sie nicht quälen. Ruhen Sie sich aus.

 
TarasBY:
Die Variablen aus der Marktumgebung befinden sich in der Dienstdatei symbols.raw (vermutlich), die sich im Ordner server history befindet. Wenn keine Verbindung zum Server besteht oder an Wochenenden, entnimmt das Terminal die neuesten Daten aus dieser Datei.


Ich danke Ihnen.
 
xant:

rigonich

Ist das ein Scherz oder etwas anderes? Wo lachen Sie?

TarasBY

Sie können nicht? Nun, das hätten Sie nicht tun sollen.

Ich habe auf Russisch geschrieben - im Lehrbuch steht fast nichts über die Deklaration von globalen Variablen. Ich weiß zum Beispiel nicht, was fGet_MineGV() ist;

Ist es eine Funktion? Wenn ja, was bewirkt sie? Die Suche nach fGet im Lehrbuch liefert keine Ergebnisse.

Was sollte ich in int init() deklarieren? Sie haben geschrieben:

{
fGet_MineGV();
}


Hier in meinem EA sieht die Initialisierung von init so aus:

int init()
{
ArrayInitialize(buf3,0);
ArrayInitialize(b1,0);
ArrayInitialize(b2,0);
ArrayInitialize(b3,0);
ArrayInitialize(b4,0);


Comment("Berechne Durchschnittswert "+ind);
m1=NormalizeDouble(iCustom(NULL,tf,ind+"_a",0,0),2);
string d="Durchschnittswert "+ind+"+DoubleToStr(m1,2);
tm=TimeCurrent();
int q=0,ticket=-1;
double opr=0,lot1=0;
for(q=0;q<OrdersTotal();q++)
{

und so weiter, 100 weitere Zeilen. Wohin, an welchen Ort, und vor allem, was genau soll ich hier anmelden? Ist es wirklich so schwer, auf Russisch zu schreiben? Lasst uns die Finger krümmen, ja.

Ist dies eine Funktion? Wenn ja, was bewirkt sie? Die Suche im Lehrbuch nach fGet ergibt null Ergebnisse.

Ja, diese Funktion, und es kann nichts darüber in der Anleitung stehen, sie war nicht verfügbar, als die Anleitung geschrieben wurde. Dies ist eine benutzerdefinierte Funktion, die speziell für Sie geschrieben wurde.

      void fGet_MineGV (string fs_PrefName = ""// префикс имени переменной
       {
        string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
        if (GlobalVariableCheck (ls_Name)) SUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
        if (GlobalVariableCheck (ls_Name)) SUA1 = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
        if (GlobalVariableCheck (ls_Name)) BUA = GlobalVariableGet (ls_Name);
        ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
        if (GlobalVariableCheck (ls_Name)) BUA1 = GlobalVariableGet (ls_Name);
        //----
    }
 
Guten Abend, ein Trailing-Stop funktioniert sofort nach der Auftragserteilung. Und es sollte nur funktionieren, wenn der Auftrag mit dem Ticket-Token in die Historie übergeht, und zwar genau zum TakeProfit.


//***************************************   
 
  nahodka=false;
 
 
 if (OrderSelect(tocket, SELECT_BY_TICKET , MODE_HISTORY))  
 if (OrderTakeProfit( )-3*Point<profitsell&&OrderTakeProfit( )+3*Point>profitsell) nahodka=true;
     // Находим ордер, сработавший именно по тейкпрофиту 
 
 
  
 if(nahodka){if (OrderSelect(tecket,SELECT_BY_TICKET)){
 if(OrderStopLoss( )>Bid+treylingstop*Point ){ Print ("четвёртаямодифи    " );
 OrderModify(  tecket, OrderOpenPrice(), Bid+treylingstop*Point, OrderTakeProfit(), 0, CLR_NONE);}}}
  // Модифицируем оставшийся ордер
 for ( i = OrdersTotal() - 1; i >= 0; i--)
 

rigonich

Das habe ich anfangs auch getan. Ich fügte dieses Codestück in die init-Funktion ein, kompilierte es und erhielt einen Hinweis:

DieFunktion "fGet_MineGV" wird nicht referenziert und wird aus der exp-Datei entfernt

Diese Warnung ist für mich eindeutig, weil es dort noch keinen Datensatz gibt, also kann er nichts lesen, richtig?

Danach schreibe ich den zweiten Teil des Codes innerhalb der Funktion start. Dieses Fragment sieht wie folgt aus

void fSave_MineGV (string fs_PrefName = "") // Variablenname Präfix
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Speichern zu Beginn jeder Minute
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- Speichern Sie die Werte der einzelnen Variablen nacheinander
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

Ist das alles hier richtig?

Ich füge diesen Teil des Codes direkt nach der Berechnung von SUA, SUA1, BUA,BUA1 ein.

Bei der Kompilierung gibt der Expert Advisor jedoch die folgende Ausgabe:

27 Fehler, 64 Warnung(en)

 

xant:

rigonich

Das habe ich anfangs auch getan. Ich fügte dieses Codestück in die init-Funktion ein, kompilierte es und erhielt einen Hinweis:

Die Funktion "fGet_MineGV" wird nicht referenziert und wird aus der exp-Datei entfernt

Diese Warnung ist für mich eindeutig, weil es dort noch keinen Datensatz gibt, also kann er nichts lesen, richtig?

Danach schreibe ich den zweiten Teil des Codes innerhalb der Funktion start. Dieses Fragment sieht wie folgt aus

void fSave_MineGV (string fs_PrefName = "") // Variablenname Präfix
{
static datetime ldt_NewBar;
datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
//---- Speichern zu Beginn jeder Minute
if (ldt_NewBar == ldaTeginBar) return;
ldt_NewBar = ldaTBeginBar;
//---- Speichern Sie die Werte der einzelnen Variablen nacheinander
string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
GlobalVariableSet (ls_Name, SUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
GlobalVariableSet (ls_Name, SUA1);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3")
GlobalVariableSet (ls_Name, BUA);
ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
GlobalVariableSet (ls_Name, BUA1);
}

Ist hier alles korrekt?


Die Funktionsbeschreibungen können weder in start, noch inite, noch in einer anderen Funktion platziert werden. Sie müssen separat platziert werden. Sie können sie in der Mitte Ihres EAs platzieren, oder am Anfang, oder am Ende, aber nicht in anderen Funktionen. Sie sollten den Funktionsaufruf nur in den init einfügen, Sie können ihn auch ganz an den Anfang stellen.

Diese Bemerkung ist mir klar: Da der Datensatz noch nicht erstellt wurde, kann er auch nicht zählen, oder? Genau, es gibt keine Funktionsbeschreibung, die der Compiler dort sucht, wo sie sein sollte - außerhalb der pragmatischen Funktionen.

{

fGet_MineGV();
}

Das Gleiche gilt für die zweite Funktion. Dies ist ein "Primer", und es ist schwer anzunehmen, dass jemand, der programmiert, selbst ein Anfänger, dies nicht wissen kann.

Grund der Beschwerde: