Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Anfängerfrage zu serverseitigem S/L

Geschrieben

Hi @ all,

 

der mit OrderModify eingerichtete serverseitige S/L hat meine Position geschlossen. Wie erfährt mein EA davon? Da ich nur eine Position zulasse, eröffnet er keine neue Position. Bei scriptseitigem S/L dagegen schon, nur eben zu Lasten der Sicherheit. Eine Abfrage mit

 

if(OrderSelect(ticket, SELECT_BY_TICKET)==true) position = 0;

funktionierte nicht.

 

Clixmaster

Featured Replies

Geschrieben

//Brokersync
  int cnt=0;
  long= false;
  short= false;      
  for (cnt = 0; cnt < OrdersTotal(); cnt++) 
  {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderCloseTime()==0) 
     {
        ticket = OrderTicket();
        if (OrderType() == OP_BUY) 
        {
           long=true;
        }
        if (OrderType() == OP_SELL) 
        {
           short=true;
        }
     }
  }

-----------------------------------------------------------------------------------------------------

oder besser

//Brokersync
  ticket=fSisBrokersync(long,short,Magic);

im include

//////////////////////////////////Brokersync
int fSisBrokersync(bool& long, bool& short,int Magic)
{
  int cnt=0;
  long= false;
  short= false; 
  int ticket;     
  for (cnt = 0; cnt < OrdersTotal(); cnt++) 
  {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderCloseTime()==0) 
     {
        ticket = OrderTicket();
        if (OrderType() == OP_BUY) 
        {
           long=true;
        }
        if (OrderType() == OP_SELL) 
        {
           short=true;
        }
     }
  }
  return(ticket);
}

Geschrieben
  • Autor

Danke für die superschnelle Antwort. Da mein EA bisher nur auf interner Positionsverfolgung beruhte, tue ich mich jetzt etwas schwer mit der Umstellung. Erwartet die Funktion

 

 int fSisBrokersync(bool& long, bool& short,int Magic)
.....
return(ticket); 

die Übergabe eines Parameters Magic oder werden alle 3 Parameter zusätzlich zu ticket zurückgegeben Was haben die &s nach den bools zu bedeuten?

 

Clixmaster

Geschrieben

ohne & wird die Variabel nur kopiert. Mit & wird die übergebene Variabel auch in der übergeordneten Ebene mit verändert.

siehe auch

http://www.tom-next.com/community/topic/44820-void-double-x-double-y/

In diesem speziellen Fall werden also "long", "short" mit verändert aber NICHT Magic. Zurück gibt der Aufruf dir dann das Ticket.

Geschrieben
  • Autor

Okey, soweit funktioniert das. Erscheint mir aber zu kompliziert. Statt bool long und bool short verwende ich position = 1 bzw 2. int ticket brauche ich doch eigentlich nicht. Es reicht doch, wenn mir die Funktion sagt Long (position = 1), Short (2) oder keine (0) Position offen.

 

int fSisBrokersync(int magic) {
  int cnt=0;
  for(cnt = 0; cnt < OrdersTotal(); cnt++) {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderCloseTime() == 0) {
        ticket = OrderTicket();
        if(OrderType() == OP_BUY) {
           return(1);
        }
        if(OrderType() == OP_SELL) {
           return(2);
        }
     }
  }
  return(0);
}
......
//Abfrage evtl offener Positionen
position = fSisBrokersync(16384);   //16384 ist die MagicNr des Währungspaares in diesem Timeframe

Das müsste so doch okey sein, oder übersehe ich da etwas?

Zur Zeit liegt die Funktion noch direkt im head des EA, mit include beschäftige ich mich, wenn der 2. EA dazukommt.

 

Clixmaster

Geschrieben

Es ist aber schon 2 Jahre her dass ich was mit MT4 gecodet habe - also bedenke dies wenn ich schreibe es sieht gut aus.

Du brauchst die TicketNr für "OrderSelect(ticket,SELECT_BY_TICKET);" das schließen der Posi. Wenn du es also auf extern verschieben willst dann solltest du es schon raus lesen können.

Geschrieben
  • Autor

Habe ticket jetzt als Rückgabeparameter wieder mit rein genommen:

 

int fSisBrokersync(int& ticket, int magic) {

Da nur eine Position zulässig ist, behält der MT4 zwar die TicketNr, aber bei einem Programmabsturz wäre sie weg. So wird sie beim Neustart wieder vom Server geholt.

 

Alles in allem warst Du mir mit Deinen Erfahrungen und Tipps eine sehr große Hilfe. Besten Dank!!

 

Clixmaster

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.