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

 
Ekburg, ok
 
Ekburg:


Installieren Sie den neuesten Build im Terminal, es ist einfacher, Code darin zu schreiben, weniger wahrscheinlich, Fehler zu machen, rate ich!)

Korrigiert den Teil, der zuerst gesendet wurde, ohne den letzten Teil der Klammern, die nicht klar sind, warum...


dies ist mein Ausstieg aus dem EA, wenn alle Bedingungen erfüllt sind, dann aus dem EA aussteigen

d.h.

fail=true;

und dann

if(fail) return(0);

 
SpikeOne:


Ich beende den EA, wenn alle Bedingungen erfüllt sind, wird der EA beendet.

d.h.

fail=true;

und dann

if(fail) return(0);


Das ist verständlich, aber in dem Code, der zu Beginn gesendet wurde, gibt es eine Menge unnötiger Klammern vor der Ausgabefunktion).

Der, den ich geschickt habe, hat geholfen?!

 
wenn ( KontoGewinn()+ KontoSaldo()>=740)
{
for(int zx=OrdersTotal(); zx+1>=0; zx--)
{
if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
OrderDelete(OrderTicket());
}
while (AufträgeSumme()>0)
{
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS),3,CLR_NONE);
if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
OrderDelete(OrderTicket());
if(Ergebnis!=TRUE)
{
er=GetLastError();
Print("LetzterFehler = ",er, ",Symbol());
}
sonst er=0;
}
}
fail=true;
}

if(fail) return(0);

Wenn Sie meinen Code in den EA https://www.mql5.com/ru/code einfügen, vor der Stelle

if(or_bu==Risiko && tick_b==0) open(0)

if(or_sl==Risiko && tick_s==0) open(1);

dann fängt der EA an, anders zu handeln, obwohl er in meinem Code erst nach der Eingabe von 740 eintreten sollte, anfangs ist mein Kontostand im Testgerät 700.

Die Werte für die Tests können wie folgt eingestellt werden:

extern bool test=false; //Objekte bei Test ausschalten

extern int prof=2; // Gewinnstufe

extern int int chag=1.7; // Schritt zwischen den Aufträgen

extern int risk=0; //Risikostufe

extern double lot = 0.01; // Anfangslos

extern double k_lot=2; // Volumenerhöhung

extern double lot_max=100;

bool Ergebnis;

bool fail=false;

Das Problem ist, dass es unterschiedlich gehandelt wird, ich kann nicht herausfinden, welches Datum ich für den Test 2013 genommen habe. 11. 08. и 2013. 11 .09.

 
SpikeOne:

dann fängt der EA an, anders zu handeln, obwohl er in meinem Code erst nach der Wahl von 740 einsteigen sollte, anfangs ist mein Saldo im Tester 700.


if ( AccountProfit()+ AccountBalance()>=740)
   {
   for(int zx=OrdersTotal(); zx+1>=0; zx--)
      {
      if(OrderSelect(zx,SELECT_BY_POS,MODE_TRADES)==true)
      OrderDelete(OrderTicket());
      }
   while (OrdersTotal()>0)
      {
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
         {
         if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE);
         if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP)
         OrderDelete(OrderTicket());
         if(result!=TRUE)
            {
            er=GetLastError();
            Print("LastError = ",er, " ",Symbol());
            }
         else er=0;
         }
      else Print( "Error when order select ", GetLastError());
      }
   if(OrdersTotal()==0) fail=true;
   }
if(fail=true) return(0);

Versuchen Sie, meinen Code zu kompilieren, lassen Sie mich das Ergebnis wissen, dann werden wir darüber nachdenken...

Wenn dieser Code früher als nötig eingegeben wird, liegt das Problem beim Anfangsoperator.

 
Ekburg:

Versuchen Sie, meinen Code zu kompilieren, lassen Sie mich das Ergebnis wissen, dann werden wir darüber nachdenken...

Wenn dieser Code früher als nötig eingegeben wird, dann liegt das Problem beim Startoperator, mal sehen, was da falsch ist


Ja, ich habe es kompiliert, aber das Problem bleibt bestehen.... Es fühlt sich an, als würde der Code früher eingegeben, als er sollte.
 
SpikeOne:

ja kompiliert, aber das Problem bleibt.... ja, es fühlt sich so an, als würde es früher in den Code einfließen, obwohl es das nicht sollte.

KontoGewinnGibt den Gewinnwert für das Girokonto in der Basiswährung zurück.

Das ist das Problem, denke ich, Sie wollen den Gewinn in Pfund wissen, und er kommt in Euro zurück, zum Beispiel

Versuchen Sie, die gesamte Berechnung der ersten Code-Anweisung durch die folgende zu ersetzen:

KontoEquityGibt den Betrag des Eigenkapitals für das laufende Konto zurück. Die Berechnung des Eigenkapitals hängt von den Einstellungen des Handelsservers ab.

und diesen Operator schließlich kompilieren:

if(AccountEquity()>=740)
   {
   ...
   }
 
Ekburg:

KontoGewinnGibt den Gewinnwert für das Girokonto in der Basiswährung zurück.

Das ist das Problem, denke ich, Sie wollen den Gewinn in Pfund wissen, und er kommt in Euro zurück, zum Beispiel

Versuchen Sie, die gesamte Berechnung der ersten Code-Anweisung durch die folgende zu ersetzen:

KontoEquityGibt den Betrag des Eigenkapitals für das laufende Konto zurück. Die Berechnung des Eigenkapitals hängt von den Einstellungen des Handelsservers ab.

und diesen Operator schließlich kompilieren:


Das Problem scheint anders zu sein, wenn ich in eine EA, die nicht richtig funktioniert, Code, der richtig funktioniert, dann nach der Kompilierung der EA nicht richtig funktioniert, fühlt es sich wie, wenn Sie eine Seite im Browser öffnen, und es gibt Ihnen den Cache jedes Mal.

Selbst wenn Sie einen neuen EA erstellen und dort einen funktionierenden Code einfügen, funktioniert er aus irgendeinem Grund nicht richtig.

 
SpikeOne:


...wenn ich falsch funktionierenden Code in einen EA einfüge, der korrekt funktioniert, dann funktioniert der EA nach der Kompilierung nicht korrekt...


Dabei kann ich Ihnen nicht helfen. Sie müssen den gesamten EA durchgehen.
 
Ekburg:

Ich kann dann nicht helfen), muss ich den gesamten EA durchgehen.


Ich scheine einen Fehler gefunden zu haben=) die anfänglichen Daten, wo der Schritt zwischen den Aufträgen auf int gesetzt ist und ich 1,7, änderte ich es auf double und es funktionierte gut=)