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

 
CloseAllBuy() wird an einer einzigen Stelle aufgerufen: in der OnTick()-Funktion durch die Bedingung if(Bid>buycloseprice) CloseAllBuy(); diese Bedingung trat beim erneuten Einschalten nicht ein und auch nicht während der Ausschaltperiode, aber die CloseAllBuy()-Funktion wurde trotzdem ausgelöst, als der EA wieder eingeschaltet wurde.
 
rapid_minus:
CloseAllBuy() wird an einer einzigen Stelle aufgerufen: in der OnTick()-Funktion durch die Bedingung if(Bid>buycloseprice) CloseAllBuy(); diese Bedingung trat bei der erneuten Aktivierung nicht auf und auch nicht während der Deaktivierungsperiode, aber die CloseAllBuy()-Funktion wurde trotzdem ausgelöst, als der EA wieder aktiviert wurde.
Wird es einen Code geben? Was ist buycloseprice, woher kommt es, womit wurde es initialisiert, wo wurde es geändert, man kann es von hier aus nicht sehen...
 
Hier ist ein Teil des Codes:
 
Ich kann nicht sehen, ob der SRC aus irgendeinem Grund eingefügt ist. Wenn nicht, lassen Sie es mich wissen und ich wiederhole es im Text.
 
Frage: bitte beraten Sie, wie man eine globale Variable speziell in diesem Fall anwenden kann.Ich kann es nicht herausfinden. Ich danke Ihnen.
 
rapid_minus:
Hier ist ein Stück Code:

ist nicht sichtbar.

rapid_minus:
Frage:Könnten Sie mir bitte sagen, wie genau ich in diesem Fall eine globale Variable anwenden kann?Ich kann es nicht begreifen. Ich danke Ihnen.

Lesen Sie die DokumentationGlobale Variablen des Terminals, schauen Sie in der Hilfe des Meta-Editors nach, dort ist es schneller zu aktualisieren.

Alternativ können Sie die Einstellungen und Werte wichtiger Variablen in einer Datei speichern und sie beim Laden aus dieser Datei lesen.

Aber die meiste Zeit kann man auf all das verzichten, man muss nur seinen Kopf benutzen und die richtige Logik in den Code einbauen.

 
Wiederholung mit Text:RefreshRates();
total=OrdersTotal();
if(total>0)
{
for(int i=0; i<=OrdersTotal(); i++)
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && OrderMagicNumber()==magic)
{ RefreshRates();
if(Bid>buycloseprice) CloseAllBuy();
}

if(OrderType()==OP_SELL && OrderMagicNumber()==magic)
{ RefreshRates();
if(Ask<sellcloseprice) CloseAllSell();
}
}
}

if((gesamt==0) || (gesamt>0 && OrderSelect(1,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()!=Symbol())
{
Comment("Keine offenen Positionen");

if(condition && timeBar!=iTime(Symbol(),Zeitraum(),1))
{
Print("Kriterium-1 für BAY ist erschienen");
int poz_1 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_2 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_3 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_4 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
Sleep(1000);
RefreshRates();
int poz_5 = OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,Blue);
timeBar=iTime(Symbol(),Zeitraum(),1);
double spread = (Ask-Bid);
buyopentime = iTime(Symbol(),Period(),0);
buycloseprice = NormalizeDouble((iOpen(Symbol(),Period(),0)+spread+75*Point),Digits);
Comment("Magic 510015 BAY");
Print("SCHLUSSPREIS = ",Kauf-Schlusskurs);
}
}

}

//+------------------------------------------------------------------+*/
void CloseAllBuy()
{
bool fc;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if (OrderType()==OP_BUY)
{
fc=OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slip);
buycloseprice=0.0;
tc=OrderCloseTime();
}
}
}
 
Wo mache ich dann einen Fehler in meinem Code?
 
rapid_minus:
Wiederholungen im Text:

Es ist immer noch nicht klar, woher buycloseprice kommt und was mit ihm vor der Bedingungif(Bid>buycloseprice) CloseAllBuy(); passiert. Denn ich sehe nur dies im Code, nach - buycloseprice = NormalizeDouble((iOpen(Symbol(), Period(), 0)+spread+75*Point), Digits);, aber wo dieserbuycloseprice deklariert wird und welcher Wert initialisiert wird?


Wenn dies der angebliche Schlusskurs eines Kaufauftrags ist, dann bricht die Logik hier zusammen, weil der Wert an die Variable übergeben wird, nachdem sie ausgelöst wurde, und Sie uns nicht gezeigt haben, was vorher in ihr war.

Nun ein bisschen Rechnen, es gibt eine solche Schleife im Code:

for(int i=0; i<=OrdersTotal(); i++)

Nehmen wir an, es gibt 5 Aufträge von 0 bis 4. Die Schleife zählt von 0 bis 5. Funktioniert diese Schleife korrekt?

Und woher kommen in der Zeile if(condition && timeBar!=iTime(Symbol(),Period(),1)) die Bedingung und timeBar?

 
Ich glaube, ich habe verstanden - der Fehler liegt darin, dass ich den globalen Buycloseprice setze und ihm sofort einen Wert von 0,0 gebe. Und obwohl sie danach beim Öffnen einer Position einen bestimmten Wert annimmt, geht dieser Wert beim Ausschalten des Terminals verloren und nimmt beim Einschalten den ursprünglichen Wert an, d.h. 0,0, bzw. die Bedingung if(Bid>buycloseprice) wird eingehalten und der Befehl zum Schließen. Aber wie man diese Variable an das globale Terminal überträgt, verstehe ich nicht.