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

 
Galim_V:

Die Aufgabe besteht darin, den Balken mit der geringsten Schließung zu finden

for(int x=0; x<=xBars -1; x++)

{

Gegen++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

if(Zähler > 20) break;

}

Compiler schwört auf Close

Schreiben Sie die Schlusskurse in ein separates Array und dann außerhalb des ArrauMinimum-Kükens
 
Alekseu Fedotov:
Schreiben Sie die Schlusskurse in ein separates Array und dann außerhalb des ArrauMinimum-Kükens
Ich danke Ihnen!
 
Galim_V:

Die Aufgabe besteht darin, den Balken mit dem geringsten Abstand zu finden

es gibt die Funktionen iHighest und iLowest (jetzt auch im MT5)

 
Taras Slobodyanik:

es gibt die Funktionen iHighest und iLowest (jetzt auch im MT5)

Ich danke Ihnen!
 
Galim_V:

Die Aufgabe besteht darin, den Balken mit der geringsten Schließung zu finden

for(int x=0; x<=xBars -1; x++)

{

Gegen++;

// Print(Close[x],",",counter);

int h = ArrayMinimum(Close[x]);

if(Zähler > 20) break;

}

Der Compiler schwört auf Close

Die Aufgabe der Suche nach dem minimalen/maximalen Preis in MQL4 wird durch eine Zeile gelöst:

double fMinClose = iClose(NULL, 0, iLowest(NULL, 0, MODE_CLOSE, <сколько баров>, <начинать с бара>));
 
Taras Slobodyanik:

können Sie, aber es wird nicht gerade eine Zeitschaltuhr sein.

Ich danke Ihnen.

Wie berechne ich das Losvolumen in Inkrementen? Wenn Einlage =1000, Lot = 0,1, Einlage wurde 2000, Lot = 0,2. Das heißt, wenn die Kaution 1500 oder 1700 beträgt, wird die Menge nicht erhöht.

 
PolarSeaman:

Ich danke Ihnen.

Wie berechne ich das Losvolumen in Inkrementen? Wenn Einzahlung =1000, Lot = 0.1, Einzahlung wurde 2000, Lot = 0.2. Das heißt, wenn die Kaution 1500 oder 1700 beträgt, erhöht sich die Menge nicht.

double percentLot = 0.01,
       lot = NormalizeDouble(MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)*percentLot/10)/10, 1);

Irgendwie...

 
Konstantin Nikitin:

Etwa so...

Nein, nein, bei einer Einzahlung von 1100 beträgt das Los 0,11, und ich muss das Los nicht auf 2000 erhöhen. Wie kann ich in den Einstellungen den Schritt =1000 einstellen?

 
Guten Tag, könnten Sie mir bitte sagen, ob es möglich ist, Koordinaten an den Indexer, um die Maus hinzuzufügen, wenn Sie können, bitte mailen Sie mir an ereminmikola@yandex.ru
 

Hallo Programmierer. Könnten Sie mir einen Tipp geben, wie ich die folgende Bedingung richtig angehen kann?

1. Der Expert Advisor eröffnet 2 Market Orders (Kauf und Verkauf) mit demselben in den Einstellungen angegebenen Lot. - Der Auftrag wird ohne Probleme ausgeführt

Der nächste stellt ein Problem dar, denn der Preis kann sich sowohl in Richtung VERKAUF als auch in Richtung KAUF bewegen. Wie können wir den Code so einrichten, dass der Expert Advisor, wenn n Punkte überschritten wurden, die Rentabilität dieser beiden Geschäfte in LIVE überprüft und die Order schließt, die nach n Punkten einen negativen Saldo aufweist? Wenn Sie andere Ideen haben, wie man das machen kann, teilen Sie uns diese bitte mit.

Ich gebe Ihnen den Code - Entwurf, nur der erste Punkt wird ausgeführt, und 2 Trades werden mit TP und SL geöffnet

2. Wenn der Preis die angegebene Anzahl von Punkten erreicht, schließe ich den Auftrag mit einem Minussaldo und eröffne 2 weitere Aufträge (Kauf und Verkauf) mit demselben Lot,

Die Stopps werden zum Eröffnungskurs der ersten Order gesetzt, d.h. bei einer Trendumkehr sollten alle 3 Orders gleichzeitig geschlossen werden.


extern int    _ms = 1000;  
extern double _lots = 0.01;
extern double _TP = 80;
extern double _SL = 35;

int _mn;
double pt;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  { 
   pt = Point;
   if (Digits==3||Digits==5) {pt*=10;} else pt = Point;
   _mn = MagicNumberGenerator(_ms);
   Print("The magic number is ",_mn);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    if (IsNewCandle())
    {
      if (TotalOpenOrders(_mn)==0)
      {
        EnterTrade(OP_BUY);
        EnterTrade(OP_SELL);
      }
    }   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|   Открытие первых позиций                                        |
//+------------------------------------------------------------------+
void EnterTrade(int type)
{
   double price = 0; double sl = 0; double tp = 0; double lot = _lots;
   
   if      (type == OP_BUY)  price = Ask;
   else if (type == OP_SELL) price = Bid;
   
   int err = 0;
   int ticket = OrderSend(_Symbol, type, lot, price, 30, 0, 0, NULL, _mn, 0, clrGreen);
   if (ticket == -1)
   {
     err = GetLastError();
     Print("Could not place the order due to error ",err," ",ErrorDescription(err));
     if (err == ERR_TRADE_NOT_ALLOWED) Alert("You need to enable you autotrade button");
   }
   else 
   {
     if(!OrderSelect(ticket,SELECT_BY_TICKET))
     {
       err = GetLastError();
       Print("Could not select the order due to error ",err," ",ErrorDescription(err));
     }
     else 
     {
       if (OrderType()==OP_SELL)
       {
         sl = OrderOpenPrice()+(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()-(_TP*pt);
       }  
       else if (OrderType()==OP_BUY)
       {
         sl = OrderOpenPrice()-(_SL*pt);
         if (_SL==0) sl = 0; 
         tp = OrderOpenPrice()+(_TP*pt);
       }
       if(!OrderModify(ticket, OrderOpenPrice(), sl, tp, 0, clrNONE))
       err = GetLastError();
       Print("Could not modify the order due to error ",err," ",ErrorDescription(err));
     }
   }
}