Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 475

 
alph:
Können Sie mir bitte sagen, wie ein solcher Tariftester im wirklichen Leben aussieht? Und ist es ein gutes oder schlechtes Ergebnis für das Jahr mit Depot 3000$?

Ein Strategietester lügt immer, auch wenn die Qualität der Simulation 99,9 % beträgt!

Die einzige Möglichkeit, den EA zu überprüfen, ist es auf einem Echtzeit-VPN-Server auf einem Demo-Konto zu setzen... Microsoft Azure gibt fast einen kostenlosen Server für einen Monat, Sie brauchen $ 1, um es auf YouTube zu suchen!... Es gibt andere VPN-Dienste, aber sie haben 10 Tage maximal kostenlose Nutzung.

 

Leute! Ist es möglich, den manuellen Handel in einem EA programmatisch zu verbieten?

 

Können Sie mir bitte sagen, warum dieser Block alle ausstehenden Stop-Orders für alle im Terminal eingestellten Symbole entfernt, ohne Berücksichtigung von magic und _Symbol?

//--------------------------------------------------------------------------------------------------------------
//       Блок удаления отложенников по типу ордера
//--------------------------------------------------------------------------------------------------------------
int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
  
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   {     
         if( OrderGetString(ORDER_SYMBOL) ==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--) 
               { 
               //----------------------------------------------------------------------
               MqlTradeResult result={0}; 
            MqlTradeRequest request={0};
            request.order=OrderGetTicket(i);
            request.symbol = _Symbol;
            request.magic = _magic;
            request.action=TRADE_ACTION_REMOVE;
            ticketmdf=OrderSend(request,result);
            
                  if(ticketmdf==true)
                  {
                     Print("Успешно удалён ордер");
                     Sleep(2000);
                     break;                    
                  }
                  if(ticketmdf==false)                     
                  {
                     Print("Ошибка при удалении ордера # ",+GetLastError());
                     Sleep(7000);
                  }
               }                            
            }                       
         }                        
   }
   return(true);  
}
 
Aleksandr Prishenko:

Können Sie mir bitte sagen, warum dieser Block alle ausstehenden Stop-Orders für alle im Terminal eingestellten Symbole entfernt, ohne Berücksichtigung von magic und _Symbol?

1. Der Auftrag muss zuerst ausgewählt werden;

2. Die Schleife sollte ab dem letzten Auftrag aufgebaut werden, d. h. for( i = Aufträge-1; i >= 0; i-- )

 
Aleksandr Prishenko:

Können Sie mir sagen, warum dieses Gerät alle ausstehenden Stop-Aufträge für alle im Terminal eingestellten Symbole löscht und dabei magische und _Symbol ignoriert?

Ich muss die Aufträge auswählen:

...
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
     {
      if(OrderSelect(ххх,ххх,хххх)==true)
        {
         if(OrderGetString(ORDER_SYMBOL)==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE)==type_ord)
           {
...
 
Vladimir Tkach:

Leute! Ist es möglich, den manuellen Handel in einem EA programmatisch zu verbieten?

Nein, natürlich nicht.
 
Karputov Vladimir:

Sie müssen Ihre Aufträge auswählen:

Die Aussage ist richtig. Die Umsetzung ist nicht korrekt. Woher bekommen Sie das Ticket für OrderSelect()?
 

Ist das die richtige Entscheidung?

Alexey Kozitsyn undKarputov Vladimir danke für die Tipps!

int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
 int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   { 
   ResetLastError();    
  ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним  

      {      
         if( OrderGetString(ORDER_SYMBOL) ==_Symbol && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--)
               { 
 

Sie haben oben geschrieben: Wenn Aufträge gelöscht werden, sollte der Zyklus umgekehrt werden. Wenn ein Auftrag gelöscht wird, werden die Indizes der verbleibenden Aufträge verschoben.

int dell_ord_by_type(int type_ord, int _magic)
{
   ulong nOrderTicket = 0;
   
   for(int i = OrdersTotal() - 1; i >= 0; i--)   //--- пробежим по списку ордеров
   {
      nOrderTicket = OrderGetTicket(i);
        
      if(nOrderTicket > 0 && OrderGetString(ORDER_SYMBOL) == Symbol() && OrderGetInteger(ORDER_MAGIC) == _magic && OrderGetInteger(ORDER_TYPE) == type_ord)   
      {  
         if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
         {       
            // удаляем
         }
      }
   }
        
   return(0);  
}
 
Übrigens, warum deklarieren Sie eine Funktion als int, wenn sie in Ihrer Version true zurückgibt, und zwar immer? )
Grund der Beschwerde: