Wer kann mit dem Roboter helfen, warum funktioniert er nicht? - Seite 4

 
GIM:

for(int i=0;i<OrdersTotal();i++)

Fehler: "i".

Was ist der Fehler?

//+------------------------------------------------------------------+
//|                                                          123.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

input double  lots       = 0.01;   // Лот
input int     stop_loss      = 10; // Указываем в валюте депозита
input int     take_profit    = 20; // Указываем в валюте депозита
extern int    Slippage = 3;        // Допустимое проскальзываение цены в пунктах
input int     Magic = 16384;       // Уникальный номер эксперта

int            last_bar       = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
// ===== Пересчет под пятизнак =========
   if(Digits()==3 || Digits()==5)
     {
      Slippage           *= 10;
     }   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if (last_bar == Bars) {return;}
   last_bar = Bars;
   if (OrdersTotal() == 0){
          int ticketbuy = OrderSend(Symbol(), OP_BUY, lots ,Ask, Slippage, 0, 0,  "", Magic, 0, clrBlue);
            if(ticketbuy<0)
               Print(Symbol()," OpenPosition. OrderSend Buy fail #",GetLastError());
            else
               Print(Symbol()," OpenPosition. OrderSend Buy successfully");
          int ticketsell = OrderSend(Symbol(), OP_SELL, lots ,Bid, Slippage, 0, 0,  "", Magic, 0, clrRed);
            if(ticketsell<0)
               Print(Symbol()," OpenPosition. OrderSend Sell fail #",GetLastError());
            else
               Print(Symbol()," OpenPosition. OrderSend Sell successfully");      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
 
  }
//+------------------------------------------------------------------+

 
GIM:
Was meinen Sie, nur mit eigenen Aufträgen....
Wenn Sie mehrere Exemplare des EA auf ein Konto setzen, damit es nicht zu Verwechslungen kommt, welcher EA den Auftrag eröffnet hat, wird die Identifikationsnummer verwendet.
 
Könnte es an der Anzahl der Handelsgeschäfte oder an den Währungspaaren liegen?
 
GIM:
Was meinen Sie, nur mit eigenen Aufträgen....
Wenn der EA nur mit eigenen Aufträgen im Konto arbeiten soll, ist dies der richtige Weg, ihn zu schreiben. Wenn es mehrere Strategien und Experten gibt, sollten sie ihre eigenen Aufträge nicht mit den Aufträgen anderer Personen verwechseln.
 
Sergey Gritsay:
Wenn Sie mehrere Kopien des EA in einem Konto haben, wird nicht verwechselt, welcher EA den Auftrag eröffnet hat, sondern es wird eine eindeutige Identifikationsnummer verwendet.
Alles ist klar und kommt von Herzen!
 
Vladimir Zubov:

Worin liegt der Fehler?

Der Fehler liegt darin, dass die Variable i in der ersten for-Schleife und in der zweiten for-Schleife 2 Mal initialisiert wird; entweder sollte die zweite Initialisierung entfernt oder der Variablenname geändert werden.
 
Ich danke Ihnen allen!
 
Sergey Gritsay:
Der Fehler liegt hier darin, dass die Variable i in der ersten for-Schleife und in der zweiten for-Schleife zweimal initialisiert wird; entweder sollte die zweite Initialisierung entfernt oder der Variablenname geändert werden.
Stimmt, ich dachte, sein Compiler kämpft.
 
Vladimir Zubov:
Stimmt, ich dachte, sein Compiler würde kämpfen.
Der Compiler tut dies wahrscheinlich, aber er sollte eine Warnung und keinen Fehler ausgeben.
 

und nein, wenn Sie es herausnehmen.

#property strict

heißt es, es sei ein Fehler.