[Archiv!] Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Könnte nirgendwo ohne dich hingehen - 2. - Seite 389

 
Dimka-novitsek:
Wenn der EA startet nichts, es ist nur zu prüfen, ob neue Aufträge nicht mit jedem Tick
öffnen wird.
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

Dies ist Ihr Code, ich habe keine Änderungen vorgenommen

Sie haben geschrieben, dass der Auftrag erteilt wird, wenn Sie den Auftrag des Tikets und das magische Symbol auswählen und die Gesamtzahl der Aufträge kleiner als 2 ist.

 
Ich danke Ihnen!!! Es tut mir leid, und ich habe definitiv Unsinn geschrieben.
 
drknn:


Ohne den Code ist es schwer zu sagen. Es ist durchaus möglich, dass der EA für vier Ziffern geschrieben ist, das Demokonto aber fünfstellig ist. Sie verstehen, dass, wenn wir z.B. einen Stop-Loss von 10 Pips setzen, dies der gleiche Abstand für einen fünfstelligen EA ist wie 1 Pip für einen vierstelligen. Wenn wir den Mindestabstand für das Setzen von Stop-Aufträgen auf z.B. 3 Punkte festlegen, dann wären das bei einem fünfstelligen Markt dreißig Punkte statt drei. Der Server wird verständlicherweise den Befehl ablehnen, einen Auftrag mit einem Stopp von 10 Punkten auf die fünf Ziffern zu setzen.

Aber der Grund könnte ein anderer sein. Sehen Sie, Sie haben Leute gefragt, warum ihr Auto nicht anspringt. Ohne die Motorhaube zu öffnen und zu hören, wie das Auto auf Startversuche reagiert, wird man Ihnen den Grund nicht sagen können...

Ich habe versucht, einen Strategietester mit EURUSD laufen zu lassen und ihn mit mehreren Währungen auszuführen, EURUSD, GBPUSD, USDJPY, aber es hat nicht funktioniert. Ich habe Point beim Senden von Kauf-/Verkaufsaufträgen verwendet, also sollte es für alle Symbole funktionieren. Was ich nicht verstehe, ist die meisten ist, warum der Tester zeigt Ergebnisse, aber die EA nicht öffnen Positionen auf einem Demo-Konto. In welchen Fällen kann dies geschehen?

Jedenfalls danke für die Antwort, ich werde den Code am Abend veröffentlichen.

 
Dimka-novitsek:


Entschuldigen Sie, ich habe hier etwas Unsinn geschrieben, wenn Sie mir zeigen könnten, wo ich völlig verlegen bin.

Alle von ihnen: )))))))))))))))))))

Fangen wir von vorne an:

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

Zu Beginn werden zwei Variablen mit Null initialisiert:

int      tiket, tikett;

dann wird in der ersten Codezeile die Ticketbestellung ausgewählt:

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

Hier ist die Variable Ticket gleich Null. Das heißt, wir versuchen, einen Auftrag mit einem Null-Ticket auszuwählen. Dabei haben wir nicht einmal die Hilfe gelesen, denn der Parameter pool wird bei der Auswahl nach Ticket ignoriert, und Sie geben trotzdem MODE_TRADES an. Dies ist kein Fehler - in diesem Fall handelt es sich um einen zusätzlichen Parameter, der einfach ignoriert wird. Dementsprechend wird die Bestellung mit einem Null-Ticket nicht ausgewählt - sie existiert nicht...

Außerdem geht alles in die verschachtelten Bedingungen; die erste Bedingung ist:

if(OrderSymbol()==Symbol())

... Wenn das Symbol der ausgewählten Order mit dem Symbol des aktuellen Charts übereinstimmt... Und da keine Reihenfolge gewählt wurde, gelangen wir sicher zum Ausgang von start(), ohne etwas zu tun.

Ich kann Ihnen versichern... Weiter geht es mit nicht weniger interessanten, aber... Es ist nicht interessant, darin herumzustochern.

Beginnen Sie mit der Suche nach bereits geöffneten Positionen oder schwebenden Aufträgen, die eingestellt wurden.

Viel Glück!

 
ilunga:

dies ist Ihr Code, ich habe keine Änderungen vorgenommen

Sie haben geschrieben, dass die Aufträge erteilt werden, wenn Sie den Tiket-Auftrag des gegebenen Symbols und den gegebenen magischen Auftrag auswählen und es insgesamt weniger als 2 Aufträge gibt.


Ah, nein, das stimmt, wenn Sie einen Auftrag mit weniger als zwei Aufträgen starten, werden zwei schwebende Aufträge platziert, und beim nächsten Tick sind es zwei, und nichts passiert.

Ich muss eine Art Krise in meinem Kopf haben.

 
Dimka-novitsek:


Ah, nein, das stimmt, wenn Sie einen Auftrag mit weniger als zwei Aufträgen starten, werden zwei schwebende Aufträge erteilt, und beim nächsten Tick sind es zwei, und nichts passiert.

Ich muss eine Art Krise in meinem Kopf haben.

Ich habe Ihnen bereits Schritt für Schritt erklärt, wo Sie eine Krise haben...
 
Sersad:

Ich habe einen Strategietester auf EURUSD laufen lassen und versucht, ihn auf mehreren Währungen, EURUSD, GBPUSD, USDJPY, auszuführen - es hat nirgends funktioniert. Ich habe Point beim Senden von Kauf-/Verkaufsaufträgen verwendet, also sollte es für alle Symbole funktionieren. Was ich nicht verstehe, ist die meisten ist, warum der Tester zeigt Ergebnisse, aber die EA nicht öffnen Positionen auf einem Demo-Konto. In welchen Fällen kann dies geschehen?

Wie auch immer, danke für die Antwort, ich werde den Code am Abend veröffentlichen.


Der Punkt ist, dass der Punktwert unterschiedlich ist.

 
PapaYozh:


Das ist der Punkt: Der Punktwert variiert.

Der Punktwert ist von Kurs zu Kurs unterschiedlich, aber sein Wesen ist bei allen Kursen mit einer beliebigen Anzahl von Dezimalstellen dasselbe - es ist der Mindestkursschritt.

Die Tatsache, dass ich für den Stop-Loss z.B. Ask-30*Point statt Ask-0,003 verwendet habe, negiert daher die Bemerkung von drknn.

"Es ist durchaus möglich, dass der EA vierstellig geschrieben ist, während das Demokonto fünfstellig ist. Wenn Sie z.B. einen Stop-Loss-Auftrag von 10 Pips setzen, dann ist das bei einem fünfstelligen EA der gleiche Abstand wie 1 Pip bei einem vierstelligen. Wenn wir den Mindestabstand für das Setzen von Stop-Aufträgen auf z.B. 3 Punkte festlegen, dann wären das bei einem fünfstelligen Markt dreißig Punkte statt drei. Es ist klar, dass der Server den Befehl, eine Order mit einem Stop von 10 Punkten zu setzen, einfach zurückweisen würde...".

double Point - Größe des Punktes des aktuellen Instruments in der Kurswährung.
 

Ein Ratschlag.

Ich habe ein einfaches Skript geschrieben, um den Wert des minimalen Stop-Loss/Stake-Profit-Levels in Pips auszugeben.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}

Gibt Null aus. Ist dies ein Standardwert für diesen Parameter?

 

fx_max:

Ich habe ein einfaches Skript geschrieben, das den Wert des minimal zulässigen Stop Loss/Stake Profit-Levels in Pips ausgibt.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

Er gibt Null aus. Ist dies ein Standardwert für diesen Parameter?


keine
Grund der Beschwerde: