[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 88

 

Also gut. Lassen wir das. Wir beide scheinen nicht genug Wissen zu haben. Der Fragesteller wollte wissen, wie man StopLoss ändern kann. Ich glaube nicht, dass er in die Tiefe gehen wird.

Versuchen Sie, sie nach der Funktion OrderSend zuzuweisen

 
MaxZ:

Was bedeutet die Zahl "12" in der Funktion OrderSend? :(

Und Sie haben mich bei der Auswahl der Aufträge missverstanden... So sollte es auch sein:

Hallo!

Vielen Dank!!! für Ihre Antworten!!!

Ich habe es wohl nicht richtig ausgedrückt: Es geht um Folgendes:

Ein Verkaufsgeschäft wird bei 1,4545 getätigt... der Kurs geht gegen den Trend - 1,4585... und DANN - sollte eine Pending Order bei 1,4565 platziert werden.

mein Code funktioniert nicht richtig:

void otlogka (int order)
{  
   int a, k=OrdersTotal();
   for (a=k-1; a>=0; a--){
         if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==OP_BUY){
               if (Bid*Point-OrderOpenPrice()>40)
               RefreshRates();
               if (k>1){
                  {
                     order=OrderSend(Symbol(),OP_SELLLIMIT,0.02,OrderOpenPrice()+20*Point,1,SL,0,"Otlogka",mn,5,0);
                  }}}}}
    
           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

}

Bitte helfen Sie!!!

 
FOReignEXchange:

Ich habe Ihnen gesagt, dass sich der Preis ändern kann, während die Funktion OrderSend ausgeführt wird. Sie müssen sie also nachträglich zuweisen, wenn sie sich bereits geändert hat.

So kann man es machen:

if (Opn_B)
{
   Alert("Попытка открыть ордер Buy...");
   RefreshRates();
   Ticket = OrderSend(Symb, OP_BUY , Lots, Ask, Slippage, 0, 0, NULL, MAGIC, 0, Blue);
   if (Ticket > 0)
   {
      if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))
      if (OrderCloseTime() == 0)
      {
         Alert("Открыт ордер Buy ", Ticket, ".");
         Opn_B = False;
         SL = OrderOpenPrice()-StopLoss*Point;
         TP = OrderOpenPrice()+TakeProfit*Point;
         
         Alert("Попытка модифицировать ордер Buy ", Ticket, "...");
         if (OrderModify(Ticket, OrderOpenPrice(), SL, TP, 0, Blue))
            Alert("Ордер Buy ", Ticket, " модифицирован.");
         else
            Alert("Ошибка: ", GetLastError());
      }
      else
         Alert("Да ну нафиг!?");
   }
   else
      Alert("Ошибка: ", GetLastError());
}
Jeder Ansatz hat seine Vor- und Nachteile.
 
smartemiy:

Hallo!

Herzlichen Dank!!! für die Antworten!!!

Ich habe es wohl falsch ausgedrückt: Es geht um Folgendes:

Es gibt ein Verkaufsgeschäft bei 1,4545... der Preis geht gegen den Trend - 1,4585... und DANN - eine Pending Order sollte bei 1,4565 platziert werden.

mein Code funktioniert nicht richtig:

Bitte helfen Sie!!!

Bid und Ask sollten nicht mit Point multipliziert werden. Sie fiel mir sofort ins Auge.

Die Bedingungen sollten anders gestaltet werden:

if (Bid-OrderOpenPrice() > 40*Point)
{...}
if (OrderOpenPrice()-Ask > 40*Point)
{...}

Mir ist auch nicht klar, welche Variable Sie SL haben? Welchen Wert hat sie? Wo wird sie berechnet?

Und dies

           if (OrderType()==OP_SELL){
               if (Ask*Point-OrderOpenPrice()<40)
                  RefreshRates();
                  if (k>1){
                {
                  order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);
                }}}

Sie sollten es in eine Schleife einbauen. Eine Schleife mit Auftragssuche sollte für KAUF- und VERKAUFSaufträge üblich sein.

Sie müssen wirklich schlecht im Programmieren sein. Ich empfehle Ihnen, das Lehrbuch noch einmal zu lesen und sich die Beispiele anzusehen, die darin für das Schreiben eines einfachen Expert Advisors, die Berechnung von Aufträgen und Handelsfunktionen gegeben werden.


Auch Ihr Fehler: RefreshRates() sollte vor der Verwendung von vordefinierten Variablen oder Zeitreihen-Arrays eingefügt werden, nicht danach...

 
MaxZ:

Bid und Ask müssen nicht mit Point multipliziert werden. Es fiel mir sofort ins Auge...

Die Bedingungen sollten anders gestaltet werden:


Müssen Sie nicht Klammern setzen?

if ((Bid-OrderOpenPrice()) > 40*Point)
{...}
if ((Ask-OrderOpenPrice()) < 40*Point)
 
MaxZ:

Bid und Ask müssen nicht mit Point multipliziert werden. Es fiel mir sofort ins Auge...

Die Bedingungen sollten anders gestaltet werden:

Ich bin mir auch nicht sicher, welche Variable Sie haben SL? Welchen Wert hat sie? Wo wird sie berechnet?

Und dies

Sie müssen es in eine Schleife einfügen...

Du bist wirklich schlecht im Programmieren... Ich empfehle Ihnen, das Tutorial noch einmal zu lesen und sich die Beispiele für die Erstellung eines einfachen Expert Advisors, die Berechnung von Aufträgen und die Handelsfunktionen anzusehen.

Dies ist der normale Stop Loss = SL
 
FOReignEXchange:


Muss man das nicht in Klammern setzen?

Nicht unbedingt. Es geht auch ohne die Klammern! :)

Das hängt davon ab, wie Sie es mögen. Handschrift! :D

 
smartemiy:
Dies ist ein regulärer Stop Loss = SL.
Wie wird sie berechnet? Und warum ist es bei BUY und SELL üblich?

smartemiy:

es gibt einen Verkaufshandel bei 1,4545... der Preis geht gegen den Trend - 1,4585... und DANN - eine Pending Order sollte bei 1,4565 platziert werden.

Übrigens, wenn es gegen den Trend ist, sollten die Bedingungen negativ sein:

if (Bid-OrderOpenPrice() < -40*Point)
{...}
if (OrderOpenPrice()-Ask < -40*Point)
{...}

Gewöhnlich aus den Ausdrücken

 ProfitBUY  = Bid-OrderOpenPrice();
ProfitSELL = OrderOpenPrice()-Ask;

Wir können den Gewinn des entsprechenden Handels in Pips ermitteln. Wenn der Gewinn negativ ist, handelt es sich bereits um einen Verlust. Hier prüfen wir, ob der Verlust mehr als 40 Pips beträgt, wir müssen eine Pending Order platzieren.

 
MaxZ:
Wie wird sie berechnet? Und warum ist es bei BUY und SELL üblich?

DerStop-Loss ist nicht so wichtig, jetzt...

Wird der Code theoretisch funktionieren?? mit Ihren Anpassungen

 
smartemiy:

Der Stop-Loss ist nicht so wichtig, jetzt...

Wird der Code theoretisch funktionieren? mit Ihren Korrekturen

Es kann funktionieren, aber wird es auch richtig funktionieren?

Noch einmal zu Ihrem Problem:

Smartemiy:

"Ein Verkaufsgeschäft wird bei 1,4545 getätigt... der Preis geht gegen den Trend - 1,4585... und DANN - sollte eine Pending Order bei 1,4565 platziert werden."

Es wurde ein SELL-Auftrag eröffnet. OrderOpenPrice() wird 1,4545 zurückgeben.

Der Preis geht gegen den Trend. Ask = 1,4585. Zustand:

if (OrderOpenPrice()-Ask <= -40*Point)

Wird funktionieren (setzen Sie ein "<=" Zeichen).

Analysieren wir den folgenden Code:

order=OrderSend(Symbol(),OP_BUYLIMIT,0.02,OrderOpenPrice()-20*Point,1,SL,0,"Otlogka",mn,5,0);

Ein schwebender BUYLIMIT-Auftrag wird zum Preis von 1,4545-20*Point = 1,4525 eingestellt. Es muss 1,4565 sein.


Aber bevor Sie das tun, sollten Sie versuchen, den gesamten Code neu zu schreiben. Es gibt eine Menge Fehler, und einige Fragmente sehen so aus, als ob Sie nicht verstehen, was Sie da schreiben.