Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 39

 
trader781:
Ich weiß nicht, wie ich es erklären soll. Aber es ist definitiv ein Meisterwerk.
Ich sage Ihnen, dass sie hier gerne sarkastisch sind.) Trishkin nahm das übel und sagte, er werde sich hier Hilfe holen.
 
Movlat Baghiyev:
Ich sage Ihnen, dass sie hier gerne sarkastisch sind ))) Trishkin nahm auch daran Anstoß. Er sagte, er werde einen Code haben, um mir zu helfen.

Ich bin genauso neu wie Sie, aber auch ich habe eine Menge Fragen

for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() ||OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY||OrderType()==OP_SELL) p++;
if(OrderType()==OP_BUYSTOP)
if(signal_bue)OrderDelete(OrderTicket());
else b++;
if(OrderType()==OP_SELLSTOP)
if(signal_sell)OrderDelete(OrderTicket());
else s++;
}

}

1) Woher haben Sie b++?

2) Woher haben Sies++

3)if(signal_bue) ist was sonst?

Und der Rest des Codes. Tut mir leid, wenn ich Sie beleidigt habe.

 
Das ist wahrscheinlich der richtige Weg.
//+------------------------------------------------------------------+
//|                                                      ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss     = 100; //Стоплосс ордера  
extern double TakeProfit   = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =2;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if (TrailingStop!=0) Trailing();
  
   //ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
  
   int b = 0, s = 0, p = 0, res = 0;

   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
   for (int i=0; i<OrdersTotal(); i++)
    {
     if (OrderSelect(i, SELECT_BY_POS)==true)
      {
        if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
        if (OrderType()==OP_BUYSTOP)
        {
           if(RSI0<50&&RSI1>50)
                OrderDelete(OrderTicket());
            else
                b++;
        }
        if (OrderType()==OP_SELLSTOP)
        {
           if(RSI0>50&&RSI1<50)
                OrderDelete(OrderTicket());
              else
                s++;
        }
      }
    }

   double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить

//---- buy stop
   if(RSI0>50&&RSI1<50 && p<1 && b<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50 && p<1 && s<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
     }
//----
   return(0);
}
 
Movlat Baghiyev:
Ich sage Ihnen, dass sie hier gerne sarkastisch sind.) Und Trishkin hat es mir übel genommen. Er sagte, er würde mir mit dem Code helfen.

Auf diese Weise ist es einfacher:

void OrderDelete_(int Type)
  {
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
            OrderDelete(OrderTicket());
        }
     }
  }

Sie befindet sich irgendwo außerhalb der Funktion void OnTick().

if (сигнал_bue) OrderDelete_(OP_SELLSTOP);

if (сигнал_sell)OrderDelete_(OP_BUYSTOP);

Und zwar im Körper der Funktion void OnTick().

 
Alekseu Fedotov:


Und dies steht im Körper der void-Funktion OnTick()

Bitte nehmen Sie Korrekturen am Code vor
 
trader781:

Ja.

Ich habe sozusagen beendet, was ich konnte. Die Beschreibung ist fertig. Es geht darum, zu verstehen, warum es nicht so funktioniert, wie ich es möchte.

Innerhalb des if()-Blocks befindet sich else . War das wirklich so beabsichtigt?

Weiter. Die Funktion Counts() akzeptiert eine nicht initialisierte globale Variable count, die außerdem innerhalb der Funktion noch einmal definiert wird.

Die Funktion Counts() zählt die Aufträge, vergleicht sie aber mit einem Ticket, das sich in der Hauptfunktion mehrmals ändert. Der Ticketwert bleibt jedoch während des Funktionsablaufs gleich. Wie viele Aufträge wird die Funktion also berechnen? Ist es mehr als einer?

In dieser Form benötigt die Funktion keine Argumente, sondern wird einfach aufgerufen und gibt das Ergebnis zurück.

Nächste. Die Funktion FindLastOType() ist wiederum ein Vergleich mit dem Ticket. Können Sie garantieren, dass er mit einem gültigen Fahrschein verglichen wird? Ist es nicht einfacher, die Schleife zu unterbrechen, wenn der erste Auftrag mit der erforderlichen magischen Zahl und dem Symbol gefunden wird, und dann die Auftragsart zurückzugeben?

Dasselbe gilt für FindLastOrderOpenPrice() und FindLastLot().

Die Funktion ModifyOrders() hat mich so erschreckt, dass ich mich lange Zeit nicht damit befasst habe, um nächtliche Albträume zu vermeiden...

 
Movlat Baghiyev:
Bitte nehmen Sie Korrekturen am Code vor

Versuchen Sie es ^_~

extern double StopLoss     = 100; //Стоплосс ордера  
extern double TakeProfit   = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int    Delta        = 100; //Расстояние от цены для установки ордера
extern double LOT          = 0.1; //Объём позиции
extern int    Magic        =2;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer


//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer


  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  int  res = 0;

//ИНДИКАТОР RSI
   double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
   double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);

   double BuyPrice=Ask+Delta*Point;
   double SellPrice=Bid-Delta*Point;
  
//---- buy stop
   if(RSI0>50&&RSI1<50 && Number(OP_BUYSTOP)<0 && Number(OP_BUY)<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
     }        
//---- sell stop  
   if(RSI0<50&&RSI1>50 && Number(OP_SELLSTOP)<0 && Number(OP_SELL)<1) // < !!!!!!!!!
     {
      res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
     }
//----  
  
  
if (RSI0>50&&RSI1<50) OrderDelete_(OP_SELLSTOP);

if (RSI0<50&&RSI1>50)OrderDelete_(OP_BUYSTOP);

  }

//+------------------------------------------------------------------+
void OrderDelete_(int Type)
  {
  bool  r;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
          r = OrderDelete(OrderTicket());
        }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Number(int Type)
  {
  int kp=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
         if(OrderType()==Type)
            kp++;
        }
     }
  return(kp);  
  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov, ich danke Ihnen, Gott segne Sie.
 
Vitalie Postolache:

Innerhalb des if()-Blocks gibt es ein else . Sollte es wirklich so sein?

Weiter. Die Funktion Counts() akzeptiert eine nicht initialisierte globale Variable count, die auch in der Funktion selbst noch einmal deklariert wird.

Die Funktion Counts() zählt die Aufträge, vergleicht sie aber mit einem Ticket, das sich in der Hauptfunktion mehrmals ändert. Der Ticketwert bleibt jedoch während des Funktionsablaufs gleich. Wie viele Aufträge wird die Funktion also berechnen? Ist es mehr als einer?

In dieser Form benötigt die Funktion keine Argumente, sondern wird einfach aufgerufen und gibt das Ergebnis zurück.

Nächste. Die Funktion FindLastOType() ist wiederum ein Vergleich mit dem Ticket. Können Sie garantieren, dass er mit einem gültigen Fahrschein verglichen wird? Ist es nicht einfacher, die Schleife zu unterbrechen, wenn der erste Auftrag mit der erforderlichen magischen Zahl und dem Symbol gefunden wird, und dann die Auftragsart zurückzugeben?

Dasselbe gilt für FindLastOrderOpenPrice() und FindLastLot().

Die Funktion ModifyOrders() hat mich so erschreckt, dass ich mich lange Zeit nicht damit befasst habe, um nächtliche Albträume zu vermeiden...

Berichtigung

Anders kann man es nicht ausdrücken, es wäre ein falscher Parameter.

Sie muss den neuesten Stand der Dinge berücksichtigen

Ich werde versuchen, es zu ändern.

Ich habe versucht, die Standardfunktion OrderModify() zu verwenden, aber sie wird blockiert, wenn ich eine Reihe von Aufträgen gleichzeitig und ständig verschiebe

Danke für die Kritik.

 
spoiltboy:
Ja, das ist ein Druckfehler in der Klammer. Der Rest der Frage ist berechtigt.

bool condition;

if(condition) {}

gleichbedeutend mit

if(condition==true) {}

и

if(!condition) {}

ist gleich

if(condition==false) {}

Er ist einfach kürzer und vertrauter.

Grund der Beschwerde: