[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 618

 
xant:

rigonich

Nun, das ergibt endlich einen Sinn. Die kurzen Zeichenfolgen in geschweiften Klammern sind also Funktionsaufrufe, und die Funktionen selbst müssen irgendwo untergebracht werden.

Nun der Reihe nach.

Ich füge einen Aufruf der ersten Funktion zu den init, ich tue es sofort nach dem Start der init-Funktion, d.h. einfach so, wird es richtig sein, oder?

In ähnlicher Weise füge ich den Aufruf der zweiten Funktion in den Startblock ein. Wäre es korrekt, wenn ich dies unmittelbar nach der Berechnung der Variablen tue? Zum Beispiel so:

Sind diese ersten 2 Schritte korrekt?

Nun ja, ich habe mich sofort bei ihm dafür bedankt.


Fast. In der inite entfernen Sie das erste {, das Sie vor dem Einfügen des Aufrufs hatten, in der start -- beide{} vor und nach dem Aufruf. Jetzt brauchen Sie nur noch den Funktionscode zu kopieren, ihn nach Ihrem gesamten EA-Code einzufügen und den EA zu kompilieren.

Entschuldigung, mein Fehler, es ist schwer, wenn ich keinen Code vor Augen habe.

int init()
{
fGet_MineGV();
//... и далее мой код, который был ранее (без первой { )
 

rigonich

Ich habe die Klammern entfernt, damit eine gerade Anzahl von Klammern übrig bleibt. Das heißt, beide Funktionen werden ohne geschweifte Klammern eingefügt.

Das Ergebnis ist wie folgt:

int init()
{
    fGet_MineGV();
//... и далее мой код
//...разрыв кода...
if ((SUA==100)&&(zigNN>4.5))
{
BUA=0;
BUA1=0;
}

fSave_MineGV();
//... продолжение моего кода...

Dann fügte ich nach dem ganzen EA-Code ein

}
}
}


Comment(fd+f+d);

}
//... тут мой советник закончился


        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);
     }
               
      void fSave_MineGV (string fs_PrefName = "") // префикс имени переменной
{
 static datetime ldt_NewBar;
 datetime ldaTBeginBar = iTime (Symbol(), 1, 0)
 //---- Сохраняемся в начале каждой минуты
 if (ldt_NewBar == ldaTBeginBar) return;
 ldt_NewBar = ldaTBeginBar;
 //---- Сохраняем поочереди значения каждой переменной
 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);
}

Ich gehe davon aus, dass nach der letzten geschweiften Klammer, in der Tat, getrennt von der EA. Ist das richtig?

Wenn es richtig ist, dann ist es das, was Sie nach der Kompilierung erhalten:

'fGet_MineGV' - function already defined and has a body         K:\TEST\experts\01___AUDUSD.mq4 (1679, 14)
'ls_Name' - variable already defined                            K:\TEST\experts\01___AUDUSD.mq4 (1681, 16)
2 error(s), 0 warning(s)        

Извиняюсь, ошибся, сложно, когда нет кода пнред глазами.Вот так.
Wenn der Code kurz wäre, würde ich ihn hier posten und alle meine Probleme wären schnell gelöst. ABER der EA hat 1700 Zeilen, plus 3 weitere externe Indikatoren, in denen die meisten der Berechnung durchgeführt wird... Also nur per Post, aber das ist natürlich nicht mehr kostenlos.
 
xant:

rigonich

Ich habe die Klammern entfernt, damit eine gerade Anzahl von Klammern übrig bleibt. Das heißt, beide Funktionen werden ohne geschweifte Klammern eingefügt.

Das Ergebnis ist wie folgt:

Dann fügte ich nach dem ganzen EA-Code ein

Ich gehe davon aus, dass nach der letzten geschweiften Klammer, in der Tat, getrennt von der EA. Ist das richtig?

Wenn es richtig ist, dann ist es das, was Sie nach der Kompilierung erhalten:


Diese Warnungen besagen, dass die Funktion und die Variable in Ihrem EA bereits vorher definiert wurden. Sehen Sie nach, ob Sie vergessen haben, den Code zu löschen, den Sie vorher eingefügt haben? wenn nicht -- senden Sie mir den Eulencode und ich werde die Funktionen für Sie einfügen.
 
lottamer:


Ganz genau. Sie müssen zuerst das Ticket der letzten geschlossenen Position GetTicketLastPos nehmen und dann die Standardfunktionen verwenden, um aus diesem Ticket zu entnehmen, was Sie benötigen.

Ich danke Ihnen.


Verdammt... es gibt keine solche Funktion wie GetTicketLastPos,

es gibtein Ticket GetTicketLastPos für die letzte offene Position...

 
xant:

rigonich

Ich habe die Klammern entfernt, damit eine gerade Anzahl von Klammern übrig bleibt. Das heißt, beide Funktionen werden ohne geschweifte Klammern eingefügt.

Das Ergebnis ist wie folgt:

Dann fügte ich nach dem ganzen EA-Code ein

Ich verstehe es wie folgt: nach der letzten geschweiften Klammer, in der Tat, getrennt von der EA. Ist das richtig?

Wenn es richtig ist, erhalten Sie nach der Kompilierung das folgende Ergebnis:

Wenn der Code kurz wäre, hätte ich ihn hier gepostet, und alle meine Probleme wären schnell gelöst gewesen. ABER der EA hat 1700 Zeilen, plus 3 weitere externe Indikatoren, in denen die meisten der Berechnung durchgeführt wird... Also nur per Post, aber das ist natürlich nicht mehr kostenlos.

Ich denke, das macht mehr Sinn:

//+------------------------------------------------------------------+
//|                                                       Priner.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


double Var1, Var2, Var3, Var4;// 4-ре переменных для сохранения (у Вас они свои !!!)
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   fGet_MineGV();
//----
//Здесь ваш код
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   //Здесь ваш код
//----
   fSave_MineGV();
   return(0);
  }
//+------------------------------------------------------------------+
void fSave_MineGV (string fs_PrefName = "")     // префикс имени переменной
  {
    static datetime ldt_NewBar;
    datetime ldaTBeginBar = iTime (Symbol(), 1, 0);
//----
    //---- Сохраняемся в начале каждой минуты
    if (ldt_NewBar == ldaTBeginBar) return;
    ldt_NewBar = ldaTBeginBar;
    //---- Сохраняем поочереди значения каждой переменной
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
    GlobalVariableSet (ls_Name, Var1);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    GlobalVariableSet (ls_Name, Var2);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    GlobalVariableSet (ls_Name, Var3);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    GlobalVariableSet (ls_Name, Var4);
//----
  }
void fGet_MineGV (string fs_PrefName = "")     // префикс имени переменной
  {
    string ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_1");
//----
    //---- Восстанавливаем значения переменных
    if (GlobalVariableCheck (ls_Name)) Var1 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_2");
    if (GlobalVariableCheck (ls_Name)) Var2 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_3");
    if (GlobalVariableCheck (ls_Name)) Var3 = GlobalVariableGet (ls_Name);
    ls_Name = StringConcatenate (fs_PrefName, Symbol(), "_N_4");
    if (GlobalVariableCheck (ls_Name)) Var4 = GlobalVariableGet (ls_Name);
  }  
//----
 
lottamer:


Mist... es gibt keine solche Funktion wie einTicket für die letzte geschlossene Position,

es gibtein GetTicketLastPos Ticket für die letzte offene Position...


das Ticket der letzten geschlossenen Position in der Historie steht.
 
не забыли ли вы удалить код, который вставляли раньше? если нет -- пришлите мне код сова и я вам вставлю в него функции.

Vielleicht gibt es wirklich noch irgendwo einen.

Ich habe ihn in einen anderen, sauberen EA eingefügt, der meine Experimente nicht enthielt, und er gab andere Fehler aus:

'if' - too complex expression     K:\test2\experts\02___AUDUSD.mq4 (1664, 2)
'=' - assignment expected         K:\test2\experts\02___AUDUSD.mq4 (1662, 24)
'if' - semicolon expected         K:\test2\experts\02___AUDUSD.mq4 (1664, 2)
3 error(s), 0 warning(s)        

Wie auch immer, ich habe eine E-Mail an

 

Ich schaue genau hin - ich habe genau das getan, was Sie geschrieben haben.

Aber ich habe keinen Return oder Deinit in meinem EA. Ist das in Ordnung? Ich erhalte immer noch Fehler.

 
xant:

Ich schaue genau hin - ich habe genau das getan, was Sie geschrieben haben.

Aber ich habe keinen Return oder Deinit in meinem EA. Ist das in Ordnung? Ich erhalte immer noch Fehler.

TarasBY antwortet, aber es gibt einen kleinen Fehler in seinem Code, deshalb beschwert sich der Compiler darüber.

In meinem Beitrag gibt es keine Schimpfwörter.
 
rigonich:

das letzte geschlossene Ticket ist in der Geschichte.


Können Sie mir zeigen, wie ich auf die Historie zugreifen kann?

Wie komme ich mit dem letzten Ticket da raus?

Grund der Beschwerde: