EA für jedes Währungspaar - welcher Code wird nur einmal pro Währungspaar geöffnet?

 

Für jedes Währungspaar verwende ich einen separaten EA.

Um zu überprüfen, ob eine Position eröffnet werden sollte, teste ich, ob es keine offene Order gibt "if (OrdersTotal<1)", aber das blockiert alle anderen Währungspaare, um Positionen zu eröffnen und ich verpasse Chancen.

Mit anderen Worten: Ich möchte nur eine Position pro Währungspaar eröffnen = mehrere Positionen sollten möglich sein, aber in verschiedenen Währungspaaren.

Welchen Code sollte ich anstelle von "if (OrdersTotal<1)" verwenden? Kann mir jemand helfen? Ich danke Ihnen im Voraus für Ihre Hilfe.

 

Jedes Währungspaar hat seine eigene GlobalVariable, zum Beispiel "MyEA_EURUSD".

Wenn Sie den EA auf einen Handel pro Tag beschränken würden, wäre der Code wie folgt:

string sCheck = "MyEA_" + Symbol();

datetime t = TimeCurrent();

datetime tTrade = t - TimeHour(t)*60*60 - TimeMinute(t)*60 - TimeSeconds(t);

if(!GlobalVariablePruefen(sPruefen)) GlobalVariableSet(sCheck, tTrade -PERIOD_D1 * 60);

if(GlobalVariableGet(sCheck) < tTrade) {

OrderSend(......);

GlobalVariableSet(sCheck, tTrade);

}

 

Tut mir leid, dass ich das Thema wieder an die Spitze bringe, aber ich habe gerade das gleiche Problem. Leider hat mir sxTed die Frage nicht beantwortet. Denn eine Handelszeit zu beschreiben ist etwas anderes als die Anzahl der Aufträge für jedes Währungspaar.

Ich habe versucht, die Zeilen von sxTed zu modifizieren, aber ich glaube, ich bin bei der Lösung dieses Problems grandios gescheitert:

string sCheck = "MyEA_" + Symbol();      // already the first error in the code, second quotes should be at the end of the line.

//I would correct this one to:
string sCheck = "MyEA_ + Symbol()";          //However symbol() is not a function anymore ??


int start ()
{

// Closing Orders here


if(!GlobalVariableCheck(sCheck))                    //checking Globalvariable, GV available so it becomes true (independently of what kind of GV we have)...

GlobalVariableSet(sCheck, Symbol() );               //.. assigning a new GlobalVariable to the function of the current symbol the EA is attached on (does it actually work like this?)

if(GlobalVariableGet(sCheck) == Symbol()) {         // checking if our Symbol is the one which the EA is attached on --> becomes true...


// Order Criteria (Open trades here)

// What now? Actually i'm missing any kind of numbers or smth that limits the open orders per currency pair.

BITTE: verweisen Sie mich nicht auf irgendwelche Literatur an dieser Stelle oder sagen Sie mir, dass ich jemanden einstellen soll, ich studiere das Buch gerade und bin steckengeblieben!!!

 
mqlfor:

Für jedes Währungspaar verwende ich einen separaten EA.

Um zu überprüfen, ob eine Position eröffnet werden sollte, teste ich, ob es keine offene Order gibt "if (OrdersTotal<1)", aber das blockiert alle anderen Währungspaare, um Positionen zu eröffnen und ich verpasse Chancen.

Mit anderen Worten: Ich möchte nur eine Position pro Währungspaar eröffnen = mehrere Positionen sollten möglich sein, aber in verschiedenen Währungspaaren.

Welchen Code sollte ich anstelle von "if (OrdersTotal<1)" verwenden? Kann mir jemand helfen? Ich danke Ihnen im Voraus für Ihre Hilfe.


int total=OrdersTotal(); int count = 0; int magno = 12345; for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == false) continue; if (OrderMagicNumber() != magno) continue; if (OrderSymbol() != Symbol()) continue; count++; } // Jetzt wissen Sie, wie viele Aufträge für dieses Symbol von diesem EA geöffnet sind. if (count < 1) { // tun Sie etwas - öffnen Sie vielleicht einen Auftrag }
Hilft das?
 
texto:

Ist das hilfreich?
Sie brauchen die magische Zahl nicht ... verwenden Sie einfach das Symbol
 
texto:

Ist dies hilfreich?
int total=OrdersTotal();

die Summe der offenen Aufträge für ALLE Währungspaare begrenzt oder nicht?

Ich habe Ihren Code wie folgt eingefügt

int total=OrdersTotal();
int count = 0;
for(int pos=0;pos<total;pos++) 
{
    if(OrderSelect(pos,SELECT_BY_POS) == false) continue;
    if (OrderSymbol() != Symbol()) continue;
    count++;
}

if (Sell_1_1 < Sell_1_2 && CloseSell1_1 > CloseSell1_2 && count < 1) Order = SIGNAL_SELL; // Trigger for Sell

if (Buy_1_1 > Buy_1_2 && CloseBuy1_1 < CloseBuy1_2 && count < 1) Order = SIGNAL_BUY;    // Trigger for Buy


if (order == SIGNAL_BUY)
{
OrderSend(...)
}   

und es wird immer noch nur ein Handel eröffnet. Was wollte uns sxTed mit seiner globalen Variable sagen?

 
grey.unit:

die Summe der offenen Aufträge für ALLE Währungspaare begrenzt oder nicht?

Ich habe Ihren Code wie folgt eingefügt

und es wird immer noch nur ein Handel eröffnet. Was wollte uns sxTed mit seiner globalen Variable sagen?

Auf wie vielen Charts haben Sie Ihren EA?
 
RaptorUK:
Wie viele Charts haben Sie mit Ihrem EA geöffnet?
Zum Testen des Codes habe ich 5 Charts geöffnet, aber ich möchte N Charts öffnen. Die Anzahl spielt keine Rolle.
 
grey.unit:
Zum Testen des Codes habe ich 5 Charts geöffnet, aber ich möchte N Charts öffnen. Die Anzahl spielt keine Rolle.
Haben Sie den Code für jedes Paar einzeln getestet, um sicherzustellen, dass Ihr EA einen Handel für jedes Paar öffnet, unabhängig davon, was mit anderen Paaren passiert? Vielleicht öffnet Ihr EA nur einen Handel, weil er nur einen Handel für ein bestimmtes Paar öffnet...
 
Sicher habe ich das. Wenn ich einen offenen Handel auf sagen EURJPY und ich schließe es manuell dann vielleicht eine andere EA öffnet einen Handel auf einem anderen currencypair.
 
mqlfor:

Für jedes Währungspaar verwende ich einen separaten EA.

Um zu überprüfen, ob eine Position eröffnet werden sollte, teste ich, ob es keine offene Order gibt "if (OrdersTotal<1)", aber das blockiert alle anderen Währungspaare, um Positionen zu eröffnen und ich verpasse Chancen.

Mit anderen Worten: Ich möchte nur eine Position pro Währungspaar eröffnen = mehrere Positionen sollten möglich sein, aber in verschiedenen Währungspaaren.

Welchen Code sollte ich anstelle von "if (OrdersTotal<1)" verwenden? Kann mir jemand helfen? Ich danke Ihnen im Voraus für Ihre Hilfe.

Code wie folgt:

 int Total_Order = OrdersTotal();
 for (pos = 0; pos <= Total_Order; pos ++)
      {
      if (OrderSelect (pos, SELECT_BY_POS) == true)
        {
        if (OrderSymbol () == Symbol ())
          {
          Print (":( Sorry already have that symbol opened ");
          // get outta here do something else
          break ;
          }
          else
          {
          Print ("No order opened for this symbol");
          Print ("Let\'s call waitress and order some drink :)");
          // do some order then break out and get out
          }
         }
       }