Ich lerne gerade, einen Ratgeber zu schreiben... - Seite 6

 
ALex2008 >> :

Nehmen Sie sich die Zeit, das Thema zu lesen!

Ich schreibe dort über die Option

auch wenn der BROKER einen Preisnachlass gewährt ...


Fehlercode 138 und ein echtes Konto.

 

Wenn Sie diese Option meinen und sie sich auf OrderModify bezieht

YuraZ писал(а) >>

допустим

получен сигнал -

на тике бъем на вход раз 5

не пробили! вышли

на втором тике после сигнала входим и долбим далше!

...dann bin ich den Zecken noch nicht gewachsen))) Wie werden sie berücksichtigt: 1. Tick, 2. Tick?

Sleep(2000); // nach einem Fehler wird 2 Sekunden gewartet

Und wie lange auf eine neue Zecke warten?


 
Talex >> :
Versuchen Sie es so.

Ich habe nun die Aufgabe, über OrderModify unmittelbar nach OpenSend einen Stop zu setzen und zu prüfen, ob dieser Stop existiert.

Wenn es nicht funktioniert hat, nicht mehr verfolgen, wenn nicht, was ist der Fehler und versuchen, zu setzen ... setzen ... und setzen ...)

RefreshRates();   
           double SLS = Ask+ Stop*Point;   //стоп на продажу
           Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
              if ( Modify == false)
                  {
                      Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());
                      for (int j=0 ;; j++) //пытаемся пока ДЦ не умрет)
                             {
                                SLS = SLS+ j*Point;   //увеличиваем стоп на 1 пп 
                                RefreshRates();
                                Modify = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
                                   if ( Modify==true)
                                       break;
                                   else   
                                       Print("Ошибка при попытке установить стоп для SEL, код ошибки ="+GetLastError());        
                              }
                  }
 
Können Sie mir sagen, wie ich den Status von OrderModify überprüfen kann, damit ich nach einer erfolgreichen Änderung nicht erneut versuche zu ändern und unnötige Fehler erhalte?
 
bool ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) continue;

durch diese ersetzen:

ModifyS = OrderModify(OrderTicket(),OrderOpenPrice(), SLS,OrderTakeProfit(),0,Red);
if ( ModifyS==true) break;

hier:

1. Warum wird der Variablentyp unnötigerweise definiert - dies ist ein Fehler, der bei der Kompilierung angezeigt werden sollte.

2. anstelle von continue - zum Übergang zu einer neuen Iteration (d.h. zu einem neuen Änderungsversuch), verwenden Sie break - Verlassen der Schleife (und unendlich, was nicht gut ist)

 
Xupypr >> :

1. warum wird der Typ der Variablen unnötigerweise definiert - dies ist ein Fehler, der bei der Kompilierung angezeigt werden sollte

fest)

2. anstelle von continue - Iteration, die zu einer neuen Iteration (d.h. einem neuen Änderungsversuch) springt, verwenden Sie break - Verlassen der Schleife

>> Vielen Dank!

...und es ist endlos, was nicht gut ist...

unendlich, weil es notwendig ist, sie zu stoppen...

Und wenn ich es ein paar Mal versuche und es aus irgendeinem Grund abgelehnt wird und der Kurs während dieser Zeit weit gegen die Position geht... Was ist dann zu tun?

 

Fehler im Protokoll:

open #1 sell 0.01 EURUSD ok
modify #1 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss #1
open #2 sell 0.01 EURUSD ok
modify #2 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0
stop loss #2
open #3 sell 0.01 EURUSD ok
modify #3 sell 0.01 EURUSD ok
Error trying to set a stop for SEL, error code =0

SELL eingeben

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




SELL ändern





void ModifySL() 
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()==0) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
                               
            else
                  RefreshRates();   
                  OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if (OrderStopLoss()== 0) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         } 
   }




 
ALex2008 >> :

Wenn Sie diese Option meinen und sie sich auf OrderModify bezieht

...dann bin ich den Zecken noch nicht gewachsen))) Wie werden sie berücksichtigt: 1. Tick, 2. Tick?

Sleep(2000); // Dies ist eine 2 Sekunden lange Wartezeit nach einem Fehler

Und wie lange muss man auf eine neue Zecke warten?


auf Schritt und Tritt

heißt

START()

{

}

---

Beachten Sie, dass Sie, wenn Sie sich lange in der START-Funktion befinden

Sie könnten eine oder mehrere Zecken übersehen

Wenn Sie z. B. in eine START-Funktion gehen und dort 10 Minuten lang sitzen, ist es logisch, dass Zecken kommen, aber Sie werden sie nicht erwischen.

auch wenn Sie nachts lange Zeit keine Zecke bekommen

---

lange Zeit in der START-Funktion zu sitzen, ist also schlecht für das Einfangen von Zecken (wenn sie für Sie wichtig sind)

wirtschaftliche Programme mit einem Minimum an Zyklen und Verzögerungen schreiben

---

 
YuraZ >> :

...denken Sie daran, dass Sie, wenn Sie sich lange in der START-Funktion befinden

können Sie durchaus eine oder mehrere Zecken übersehen

Wenn Sie z. B. die START-Funktion eingegeben haben und 10 Minuten lang dort waren, ist es logisch, dass Zecken kommen, aber Sie werden sie nicht einfangen.

auch wenn Sie nachts lange Zeit keine Zecke bekommen

---

lange Zeit in der START-Funktion zu sitzen, ist also schlecht für das Einfangen von Zecken (wenn sie für Sie wichtig sind)

Schreiben Sie wirtschaftliche Programme mit einem Minimum an Zyklen und Verzögerungen.

---

Wenn Sie die Funktion RefreshRates() verwenden, bevor Sie einen Auftrag ändern oder festlegen, wird lediglich der Status außerhalb von Start() aktualisiert, d. h. die Ticks?

Verstehe ich das richtig?

 

Hier ist die endgültige Version der Eröffnung und der Änderung der Pose zur Kritik.

Das "+" und "-" dieser Option?

Eröffnungsverkauf

RefreshRates();
      if ((OrdersTotal()==0)&&(Bid == Enter))  //бъем до упора эту цену
         { 
            if (IsTradeContextBusy()==false)
               {
                  OrderSend(Symbol(), OP_SELL, Lot, Enter, Slippage, 0, ldTake, lsComm, MAGIC,0, clOpenSell);
                  if (OrdersTotal()>0)
                     {
                        ModifySL();                   //ставим стоп
                        SLBU = OrderOpenPrice()- BU;               //цена БУ
                     }   
                  else Print("Ошибка при попытке установить ордер на SELL, ",OrderOpenPrice()," код ошибки ="+GetLastError());             
               }
         }




Stoppmodifikation





void ModifySL()
   {
      if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
         {       
            if (OrderType()==OP_BUY)
               {
                  RefreshRates();
                  bool Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Bid- StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для BUY, ",OrderStopLoss()," код ошибки ="+GetLastError());

               }
            else
               {
                  RefreshRates();   
                  Modify = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ StopL*Point,OrderTakeProfit(),0,Red);
                  if ( Modify == false) Print("Ошибка при попытке установить стоп для SEL, ",OrderStopLoss()," код ошибки ="+GetLastError());
               }
         }     
   }
Grund der Beschwerde: